语言被“解释”意味着什么?

时间:2010-05-13 12:01:40

标签: ruby compiler-construction programming-languages interpreter interpreted-language

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

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

2 个答案:

答案 0 :(得分:4)

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

通常,在运行之前编译的语言与没有编译过程并在另一个程序(称为解释程序)内运行的语言之间进行区分。后一种语言通常被称为interpreted languages

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

  • 某些语言可以编译或解释,例如PHP。
  • 某些解释的代码可能在运行时编译为本机机器指令(JIT compilation)。
  • 某些编译语言可能具有exec功能,允许在运行时生成和执行代码,绕过正常的编译过程。

答案 1 :(得分:4)

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

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