当前位置:  开发笔记 > 编程语言 > 正文

像C#和Java这样的语言如何避免C/C++ - 就像独立编译一样?

如何解决《像C#和Java这样的语言如何避免C/C++-就像独立编译一样?》经验,为你挑选了1个好方法。

对于我的编程语言课程,我正在撰写一篇关于语言设计史上一些重要人物的研究论文.CAR Hoare的一个人让我感到奇怪,因为它反对在C甚至C版开始流行之前在C和后来的C++中使用的独立编译技术.

由于这主要是加速编译时间的优化,因此Java和C#能够避免依赖独立编译的原因是什么?它是一种编译器技术还是有语言元素可以促进这一点?是否还有其他编译语言在他们之前使用这些技术?



1> Daniel Earwi..:

简短回答:Java和C#不避免单独编译; 他们充分利用它.

它们的不同之处在于,在编写可重用库时,它们不需要程序员编写一对单独的头文件/实现文件.用户一次编写类的定义,编译器从该单个定义中提取等同于"标题"的信息,并将其作为"类型元数据"包含在输出文件中.因此,输出文件(Java中的.jar完整.class文件或.dll基于.NET的语言中的程序集)是单个包中二进制文件和标头的组合.

然后,当编译另一个类并且它依赖于第一个类时,它可以查看元数据而不必查找单独的包含文件.

碰巧他们的目标是虚拟机而不是特定的芯片架构,但这是一个单独的问题; 他们可以将x86机器代码作为二进制文件放入,并且在同一个文件中仍然具有类似标题的元数据(这实际上是.NET中的一个选项,虽然很少使用).

在C++编译器中,通常使用"预编译头"来加速编译..NET .dll.class文件中的元数据非常类似于预编译的标头 - 已经过解析和索引,可以快速查找.

其结果是,在这些现代语言,有做模块化的方法之一,它有一个完美的组织和手工优化的C++编译模块化系统的特点-非常漂亮,说ASFAC++乙.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有