MagLev と Matz Ruby (Ruby1.8)、YARV(Ruby1.9)を戦わせてみる


ついにアルファ版が公開されたようです。


GemStone/S64(組み込みの OODB 機能を持つ GemStone 社製 Smalltalk 処理系。MagLev と呼ばれる Ruby 処理系のベースになっている…)が 64bit OS でしか動かないということなので、新しく VMware イメージをこしらえてみました(Debian lenny を使用)。なかなか動かせず難儀していたのですが、単純に割り当てメモリをケチっていたためのメモリ不足だったようで、増やしてやったらすんなり動作しました。


とりあえず動かせるようにはなったので、目玉の永続化機能とかは華麗にスルーして、さっそく恒例のフィボナッチで対決。

$ cat fib.rb
class Integer
  def fib
    return self if self < 2
    (self-2).fib + (self-1).fib
  end
end

n = ARGV[0].to_i
start = Time.now
res = n.fib
puts res, (Time.now - start).to_s + " sec"


単純な再帰なので Smalltalk VM ベースの MagLev は強いです。

$ maglev start
startnetldi[Info]: Starting GemStone network server "gs64ldi".
startnetldi[Info]: GemStone server 'gs64ldi' has been started.
startstone[Info]: Starting Stone repository monitor "maglev".
startstone[Info]: GemStone server 'maglev' has been started.

$ maglev-ruby -v fib.rb 39
maglev 0.6 (ruby 1.8.6) (2009-11-20 rev 22578-1067) [x86_64-linux]
63245986
6.317193 sec
$ ruby -v fib.rb 39
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
63245986
208.395008 sec
$ ruby1.9 -v fib.rb 39
ruby 1.9.1p243 (2009-07-16 revision 24175) [x86_64-linux]
63245986
19.335945162 sec