Mac OS X でコンパイルした Ruby インタプリタは遅いのか?

某 国内有名 SNS に「自前でコンパイルした Ruby インタプリタは遅い」というトピックがあったので、実際に試してみた。

ベンチマークに使ったのは、みんなが大好きなフィボナッチ数列

def fib(n)
  i = n.to_i
  case
  when i <= 0; 0
  when i == 1; 1
  else fib(i-1) + fib(i-2)
  end
end

fib(-1)         # => 0
fib(0)          # => 0
fib(1)          # => 1
fib(2)          # => 1
fib(3)          # => 2
fib(4)          # => 3
fib(5.5)        # => 5
fib("6")        # => 8

def fibonacci(n)
  (1..n).map{|i| fib i}
end

fibonacci 8     # => [1, 1, 2, 3, 5, 8, 13, 21]

if defined? Profiler__
  fibonacci 10
else
  require 'benchmark'
  puts Benchmark.measure{fibonacci 32}
end

自前でコンパイルした RubyMac OS X 標準の Ruby で試してみる。
ついでに Ruby1.9 でも試してみる。

$ ruby -v   # 自前
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.4.0]
$ ruby fib.rb
 51.740000  18.080000  69.820000 ( 70.403618)

$ /usr/bin/ruby -v   # Mac OS X 標準
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
$ /usr/bin/ruby fib.rb
 14.310000   0.050000  14.360000 ( 14.442732)

$ ruby19 -v   # Ruby 1.9
ruby 1.9.0 (2008-10-04 revision 19669) [i386-darwin9.5.0]
$ ruby19 fib.rb
  4.080000   0.020000   4.100000 (  4.121011)

ほんとに遅い (;_;)

いろいろ試してみた結果 configure --enable-pthread だと遅いみたい。(本当か?)

pthread なしだと普通の速度。

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0]
$ ruby fib.rb
 13.710000   0.100000  13.810000 ( 14.032186)

ちょっとフィボナッチで遊んでみたかっただけなのに (^_^;;

でも速くなって良かった。