为什么在解释语言和编译语言之间有这样明显的差别?

在学习像C或C ++这样的编译语言时,你会了解编译器。 为了运行你的代码,你必须先编译它。 编译代码将其从文本表示转换为可执行的内容。 由此产生的代码非常快,可以使用预处理器等。

当学习像Python,Matlab或Ruby这样的动态语言时,你会了解解释器。 为了运行你的代码,你只需将它输入到解释器中即可。 因此,您可以在运行时使用您的代码,并即时更改程序的行为。 这样做的缺点似乎是解释型语言相当慢,缺乏清晰的编译时间似乎使预处理器不可能。

然后有即时编译器,这些编译器像解释型语言一样使用,但与编译语言相比性能较差。 但是他们通常不会运行预处理器,也不会输出准备运行的二进制文件。

然后我学会了Lisp,它可以被编译,解释和你有什么,一直很快,并且有一个强大的预处理系统(宏)。 这似乎是Lisp世界的常识,但不是其他任何地方。

为什么没有用于Python的C或编译器的流行解释器? 为什么解释语言和编译语言之间有很大的分歧 (我知道有些项目可以编译Python或解释C,但总的来说它们似乎并不是很受欢迎)。


大多数流行的编译语言都是从头开始编译的:它们倾向于避免使编译代码难以生成的特性。 这些语言功能包括方便的“动态”功能,例如动态类型,非均匀容器和临时对象名称空间。

因此,编译语言的解释程序无法利用解释型语言可用的动态功能,但缺乏编译实现的性能优势。

相反,编译器必须复制解释型语言的所有功能和行为,而不考虑费用。 一般来说,这意味着解释语言的编译程序将带来很多解释器的开销。 举一个例子,任何一种eval()函数都需要包含解释器。

最后,这些影响被大量的用户基础,良好的支持和强大的实施相辅相成的优势所放大。

链接地址: http://www.djcxy.com/p/72321.html

上一篇: Why is there such a clear cut between interpreted and compiled languages?

下一篇: Interpreters and Dynamically Typed Languages