如何执行ruby代码

时间:2011-02-21 16:24:25

标签: ruby interpreter

我最近开始学习Ruby。我知道Ruby是一种解释型语言(尽管“每种”语言都是因为它被CPU解释为机器代码)。但ruby解释器如何将用Ruby编写的代码转换为机器代码?我已经读过,解释器不会读取源代码,而是读取字节码,但是我从来没有像在Java中那样编译。那么,这是Ruby为你做的另一件事吗?如果确实如此,它是否在运行时生成字节代码?因为你永远不会像在Java中那样获得.class文件。最重要的是,我读到了Just-In-Time编译器,它显然对字节代码做了一些事情,因此它运行得更快。

如果是上述情况,解释器首先扫描所有源代码,将其转换为字节代码,然后在运行时用JIT再次编译它?

最后我不是在寻找有关性能方面的答案,我只是想知道它是如何处理的,它经历了哪些阶段以及它在什么时间内完成。

感谢您的时间。

我正在使用此插件http://www.ruby-lang.org/en/

2 个答案:

答案 0 :(得分:9)

  

但ruby解释器如何将用Ruby编写的代码转换为机器代码?

它没有,至少不是所有的实现。

仅Afaik Rubinius正在尝试按照您所描述的内容进行操作,即编译机器代码。

  

我已经读过,解释器不会读取源代码,而是读取字节码,但是我从来没有像在Java中那样编译。那么,这是Ruby为你做的另一件事吗?

  

如果是,它是否在运行时生成字节代码?

Yeap,非常。并将其保存在记忆中。交易是下次必须阅读 - >翻译 - >再次执行。

  

如果是上述情况,解释器首先扫描所有源代码,将其转换为字节代码,然后在运行时使用JIT再次编译它?

不是所有的源代码,只是它需要的东西。然后是的,创建一个字节码表示将其保存在内存中,而不一定是编译成机器代码。

答案 1 :(得分:3)

Ruby1.8的标准实现使用了一个名为MRI的解释器(Matz的Ruby解释器)。这是一个编译为机器代码的程序:

  1. 将文本文件读入数据结构。
  2. 按照数据结构中的说明决定做什么