编译的语言可以具有什么样的解释语言功能?
解释型语言通常更高级,因此具有动态类型的特征(包括动态创建新变量而无需声明),臭名昭着的eval
以及使程序员的生活更轻松的许多其他特性 - 但为什么编译语言不能将其作为好?
我不是指在VM上运行的像Java这样的语言,而是像C(++)那样编译为二进制文件的语言。
我现在不打算列出清单,但如果您要问我的意思是什么,请查看PHP,Python,Ruby等必须提供的功能。
无论是源代码编译 - 本地二进制文件,某种中间语言(Java Bytecode / IL) - 还是解释,都绝对不是该语言的特征 。 这只是一个实施问题。
实际上,您可以同时使用编译器和解释器
某些语言功能(如eval或动态打字)可能暗示了所谓的“动态语言”与静态语言之间的区别,但它的运行方式永远不会是主要问题。
最初,解释型语言最大的好处之一就是调试。 这样,当您查找程序无法运行的原因时,您可以获得令人难以置信的准确和详细的信息。 但是,大多数编译器已经足够先进,这已经不是什么大事了。
另一个主要好处(无论如何,我认为)是,使用解释型语言,你不必等待你的项目永恒的编译来测试它。
例如,你可能无法合理地eval
,因为我认为这很明显:你会如何实现它? 使运行时包含编译器的完整副本? 每次你想要评估一个字符串(记住每次它可能不同!)你会将字符串保存到一个文件,运行编译器来创建一个DLL /共享库,然后加载该DLL /共享库和调用你的代码? 你不明白为什么这可能有点不切实际? ;)
你可以在动态语言中找到这种类型的东西,而静态代码基本上不能运行解释器,实际上在幕后,你无法做到这一点。
链接地址: http://www.djcxy.com/p/12539.html上一篇: What features of interpreted languages can a compiled one not have?
下一篇: What is the difference between statically typed and dynamically typed languages?