fibonacci(36) を計算してみた

いつも読んでる SoftwareDesign 誌の 2010年 5月号に Konoha という言語が紹介されていた。

Konoha というのは静的型のスクリプト言語らしい。

記事の最後にフィボナッチ数列を求めるスクリプトベンチマークが載っていた。

我らが Ruby は断トツの最下位に挙げられていた。
でも、バージョンが 1.8.5 ってひどい。

最近の Ruby でやってみた。

記事に載っていた Konoha のスクリプトはこんな感じ。

int fib(int n) {
  if (n<3)
    return 1;
  return fib(n-1)+fib(n-2);
}

fib(36);

同じようなのを Ruby で書くとこんな感じ。

def fib(n)
  if n<3
    1
  else
    fib(n-1)+fib(n-2)
  end
end

puts fib(36)

まずは Konoha で実行。

$ konoha
Konoha 0.5.2(kurume) source/LGPL3.0 (rev:1377, May 19 2010 21:55:14)
[GCC 4.0.1 (Apple Inc. build 5493)] on macosx_32 (32, UTF-8)
Options: iconv refc sqlite3 thread regex used_memory:368 kb
>>> exit

$ time konoha fib.k
14930352

real	0m1.944s
user	0m1.935s
sys	0m0.006s

つづいて ruby

$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin9.8.0]

$ time ruby fib.rb
14930352

real	1m40.886s
user	1m12.737s
sys	0m27.677s

なにこれ遅い。

やっぱり 1.9 系で試さなければ。

$ ruby19 -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.8.0]

$ time ruby19 fib.rb
14930352

real	0m3.687s
user	0m3.670s
sys	0m0.013s

どんよりとしますね。