4

像 Ruby 这样的语言(如果运行 MRI,我的意思是不编译为字节码)是否在每次需要执行例如方法或循环体时都运行实际解析?我的意思是,要执行一个循环,你需要解析它的主体N次?

我只是一直认为所有这些程序都在引导程序中被解析一次,转换为“强类型”语句树等。这不是真的吗?

4

2 回答 2

4

解释是一个定义非常宽松的词。甚至机器代码指令也由处理器解释。

一般来说,在运行之前编译的语言和没有编译过程并在另一个程序(称为解释器)中运行的语言之间存在区别。后一种语言通常被称为解释语言

在某些情况下,这条线并不那么清楚:

  • 有些语言既可以编译也可以解释,例如 PHP。
  • 一些解释代码可能会在运行时编译为本机机器指令(JIT 编译)。
  • 一些编译语言可能具有exec允许在运行时生成和执行代码的功能,绕过正常的编译过程。
于 2010-05-13T12:05:14.027 回答
4

我现在只想说几乎每一种编程语言都会被解释,无论是软件(Ruby、Python、Java)还是硬件(C、C++)解释器:)

对于一个真正的答案,虽然我不知道内部 Ruby 实现,但我确信他们不会一遍又一遍地解析语句。虽然在原始实现中没有使用字节码(或者它们是否已经迁移?),但它们使用了一些中间表示(当你想为它编写 C 扩展时你可以很好地看到它),因此只是一遍又一遍地执行这些。

于 2010-05-13T12:05:44.980 回答