• 2007-02-02

    体验YARV

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/4438696.html

    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
    end

    start_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

    分享到:

    历史上的今天:

    开工了! 2004-02-02
    引用地址: