Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 为什么解释语言和编译语言之间有如此明确的界限? 学习C语言或C++语言时,你就可以了解编译器了。为了运行你的代码,你必须先编译它。编译代码将它从文本表示转换为可以执行的内容。生成的代码非常快,可以使用预处理器等_Programming Languages_Interpreted Language_Compiled Language - Fatal编程技术网

Programming languages 为什么解释语言和编译语言之间有如此明确的界限? 学习C语言或C++语言时,你就可以了解编译器了。为了运行你的代码,你必须先编译它。编译代码将它从文本表示转换为可以执行的内容。生成的代码非常快,可以使用预处理器等

Programming languages 为什么解释语言和编译语言之间有如此明确的界限? 学习C语言或C++语言时,你就可以了解编译器了。为了运行你的代码,你必须先编译它。编译代码将它从文本表示转换为可以执行的内容。生成的代码非常快,可以使用预处理器等,programming-languages,interpreted-language,compiled-language,Programming Languages,Interpreted Language,Compiled Language,学习Python、Matlab或Ruby等动态语言时,您会了解解释器。为了运行代码,只需将其键入解释器。因此,您可以在运行时使用代码并动态更改程序的行为。这样做的缺点似乎是解释语言相当慢,而且缺乏明确的编译时间似乎使预处理器不可能 还有一些即时编译器,它们与解释语言一样使用,但与编译语言相比,性能缺陷更小。但它们通常不支持预处理器,也不输出准备运行的二进制文件 然后我学习了Lisp,它可以被编译、解释,还有你所拥有的东西,一直以来都很快,并且有一个强大的预处理系统(宏)。这似乎是Lisp世界的常

学习Python、Matlab或Ruby等动态语言时,您会了解解释器。为了运行代码,只需将其键入解释器。因此,您可以在运行时使用代码并动态更改程序的行为。这样做的缺点似乎是解释语言相当慢,而且缺乏明确的编译时间似乎使预处理器不可能

还有一些即时编译器,它们与解释语言一样使用,但与编译语言相比,性能缺陷更小。但它们通常不支持预处理器,也不输出准备运行的二进制文件

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


为什么没有流行的C解释器或Python编译器?为什么解释语言和编译语言之间存在巨大的差异?(我知道存在一些可以编译Python或解释C的项目,但一般来说它们似乎不是很流行。)

大多数流行的编译语言都是从头开始编译的:它们倾向于避免那些会使生成高效编译代码变得困难的特性。这些语言特性包括方便的“动态”特性,如动态类型、非统一容器和特殊对象名称空间

因此,编译语言的解释器不能利用解释语言可用的动态特性,但缺乏编译实现的性能优势

相反,编译器必须复制解释语言的所有特性和行为,而不考虑费用。一般来说,这意味着为解释语言编译的程序将承担大部分解释程序的开销。例如,任何类型的
eval()
功能实际上都需要包含解释器


最后,大量用户、良好的支持和强大的实现这三个相辅相成的优势进一步增强了这些效果。

C语言有解释器:。我想挑战一下您的一些前提。预处理器是完全独立的,可以在任何编译器或解释器之前运行很久(它们在源代码上运行,而不是在二进制文件上运行)。C和C兼容的语言都内置了特定的预处理器,但这还有其他原因(需要廉价的编译时抽象)。而且,正如您在下一句中所承认的,有Python编译器和C解释器。它们似乎不是主流,但也有使用它们的社区。无论如何,“没有解释器/编译器”显然是错误的。@delnan True,“没有解释器/编译器”是错误的。我修好了。谢谢你指出这一点。关于预处理器:许多编译语言似乎都有内置的预处理器(特别是所有C派生的预处理器),但很少有解释语言有内置的预处理器。除了Lisp,它是编译和解释的,并且有一个预处理器。这很有用,为什么其他语言没有这些呢?@bastibe请举例说明。我所知道的(远程)流行的是C、Obj-C(它是C的一个适当的超集)和C++(这几乎是C的超集)。然而,还有更多的“编译”语言,例如Pascal+派生(特别是Delphi)、Java、C#、ML+派生、Haskell和Rust。您可以使用预处理器在任何源代码上运行它,事实上有些人会这样做。两个例子:我看到有人建议在Python代码上运行m4,一些Haskell项目在他们的代码上运行C预处理器。@delnan是的,我没有这样看它。因此,在某种程度上,C预处理器是C派生语言特有的。大多数其他语言没有内置(或广泛使用)的预处理器。有趣。谢谢你指出这一点。