解释语言通常更高级,因此具有动态类型(包括动态创建没有声明的新变量)、臭名昭著的eval和许多其他使程序员的生活更容易的特性--但是为什么编译语言也不能有这些特性呢?
我指的不是运行在VM上的像Java这样的语言,而是那些编译成二进制语言的语言,比如C(++)。
我现在不打算列出一个列表,但是如果您要问我指的是哪些特性,请查看PHP、Python、Ruby等所提供的功能。
发布于 2010-03-25 15:32:27
无论源代码是编译到本机二进制文件,还是某种中间语言(Java /IL),还是解释的,都绝对是语言的特性。这只是一个实现的问题。
实际上,您可以为同一种语言提供编译器和解释器,例如
某些语言特性,如eval或dynamic类型,可能会显示出所谓的“动态语言”和静态语言之间的区别,但是如何运行这一点永远不是首要问题。
发布于 2010-03-25 15:23:24
最初,解释语言的最大好处之一是调试。这样,在寻找程序不工作的原因时,您可以获得非常准确和详细的信息。然而,大多数编译器已经变得足够先进,不再是太大的交易了。
另一个主要的好处(无论如何,在我看来)是,使用解释语言,您不需要等待永恒的项目编译来测试它。
发布于 2010-03-25 15:28:05
例如,由于我认为非常明显的原因,您不可能做eval:确切地说,您将如何实现它?使运行时包含编译器的完整副本?每次您想要计算一个字符串时(记住每次都可能是不同的!)您会将字符串保存到文件中,在其上运行编译器以生成DLL/shared,然后加载DLL/shared并调用您的代码?你不明白为什么这可能有点不切实际吗?)
您可以在动态语言中发现这样的事情,如果没有基本上在幕后运行解释器,那么在静态代码中是无法做到的。
https://stackoverflow.com/questions/2516754
复制相似问题