-
2007-02-02
体验YARV
YARV,Yet Another Ruby VM,又一个Ruby VM。
其实,我觉得它的名字算不上准确,因为原来Ruby算不上拥有VM。当然,按照作者的本意,这个名字不会长久的存在下去,因为项目如果成功,它就会成为Ruby的一部分,不成功的话,没人会记住它。事实上,它正一步步走向成功,因为现在它已经被合并到Ruby的主干代码中。
我不想苦苦等待YARV随着发行版来到我们身边,于是我选择提前体验YARV。到Ruby的网站上,下载Nightly Snaphot版本,我们就可以拥有最新的Ruby版本,当然,这样做的代价是这个版本可能不如正式的发布版那样稳定。事实上,我自己在编译的时候就遇到了一些小问题,幸好,简单修改一下便万事大吉。
关于如何编译Ruby,我已经在之前的blog上讨论过,这里就不再赘述。
下面是我用来体会YARV的一段代码:
def fibonacci(n)
if n == 1 or n == 0
n
else
fibonacci(n - 1) + fibonacci(n - 2)
end
endstart_time = Time.new.to_f
puts start_time
puts fibonacci(30)
end_time = Time.now.to_f
puts start_time
puts end_time - start_time首先,我用Ruby 1.8.5-p12运行这个版本,我最关心的运行时间大概是:
2.60199999809265同样一段代码用加入YARV的Ruby来跑:
0.401999950408936大幅度提高,看来YARV果然不负众望。如果希望继续体会YARV,现在Ruby的代码中还多了一个benchmark目录,里面全是一些耗时的运算。
既然YARV号称虚拟机,自然要有自己的指令集。JRuby正在开发的代码之中,已经开始提供对YARV指令的支持,Ola Bini在自己的blog上写过几篇与之相关的blog:
Executing YARV (in JRuby)
YARV tail call optimization in JRuby







