python - 为什么 (python|ruby) 被解释?

标签 python ruby compiler-construction

Python 和 Ruby 等语言被解释(开箱即用)而不是编译的技术原因是什么?在我看来,对于这个领域的知识渊博的人来说,让这些语言不像今天那样被解释应该不难,我们会看到显着的性能提升。所以我当然错过了一些东西。

最佳答案

几个原因:

  • 更快的开发循环,write-test vs write-compile-link-test
  • 更容易安排动态行为(反射、元编程)
  • 使整个系统可移植(只需重新编译底层 C 代码,您就可以在新平台上使用)

想想如果系统被解释会发生什么。假设您使用转换为 C 作为机制。编译后的代码必须定期检查它是否已被元编程取代。 eval() 类型的函数也会出现类似的情况。在这些情况下,它必须再次运行编译器,这是一个非常缓慢的过程,或者它必须在运行时有解释器。

这里唯一的选择是 JIT 编译器。这些系统非常复杂和精密,并且比所有其他替代方案具有更大的运行时占用空间。它们启动非常缓慢,因此不适合编写脚本。见过 Java 脚本吗?我没有。

所以,你有两个选择:

  • 编译器和解释器的所有缺点
  • 只是解释器的缺点

通常,主要实现只与第二选择一起使用,这并不奇怪。很可能有一天我们会看到像编译器这样的二级实现。 Ruby 1.9 和 Python 有字节码虚拟机;那里是½路。编译器可能只针对非动态代码,或者它可能具有可声明为选项的各种级别的语言支持。但是由于这样的事情不能成为主要的实现,它代表了很多工作,但 yield 非常微不足道。 Ruby 中已经有 200,000 行 C 代码...

我想我应该补充一点,人们总是可以添加一个已编译的 C(或者,通过一些努力,任何其他语言)扩展。所以,假设你有一个缓慢的数值运算。如果您添加,例如带有 C 实现的 Array#newOp,那么您将获得加速,程序将保留在 Ruby(或其他)中,并且您的环境会获得一个新的实例方法。每个人都赢了!因此,这减少了对有问题的辅助实现的需求。

关于python - 为什么 (python|ruby) 被解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1805148/

相关文章:

python - 在 Python 中读/写 MS Word 文件

python - 如何将多个 zip 文件中的文件添加到单个 zip 文件中

ruby - 如何查看哪种方法运行得更快

ruby - 如何在 Ruby 扩展别名中发出 YAML

c++ - 为什么在 Eclipse 中出现 "unrecognised emulation mode: 32"错误?

Python pandas 如何通过内部编号获取某些值?

python - SFTP 通过 Paramiko : Errno 10061 (probably proxy)

ruby - 导轨 : submit Ajax form via anchor click

java - Java 编译器是否会针对手动重载决议优化远离类型转换?

c - 这种技术会减少 MATLAB 实时研讨会编码器的编译时间吗?