「フィボナッチで各種言語をベンチマーク - satosystemsの日記」を見て、Rubyの各バージョン(1.8.7, 1.9.3, 2.0.0dev)での速度の違いを測ってみました。
- fib.rb
def fib(n) return n if (n < 2) return fib(n - 2) + fib(n - 1) end puts fib(38)
- 1.8.7
$ ruby -v ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0] $ time ruby fib.rb 39088169 real 1m24.281s user 1m23.033s sys 0m0.324s
- 1.9.3
$ ruby -v ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-darwin11.4.2] $ time ruby fib.rb 39088169 real 0m19.173s user 0m18.974s sys 0m0.170s
- 2.0.0dev
$ ruby -v ruby 2.0.0dev (2012-11-01 trunk 37411) [x86_64-darwin11.4.2] $ time ruby fib.rb 39088169 real 0m11.566s user 0m11.372s sys 0m0.168s
番外編
Rubyに限った話ではないですが、メモ化を使うとかなり速くなります。
- fib_memo.rb
def fib(n) @fib ||= Hash.new do |hash, key| if key < 2 key else hash[key] = hash[key-1] + hash[key-2] end end @fib[n] end puts fib(38)
- 結果
$ ruby -v ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-darwin11.4.2] $ time ruby fib_memo.rb 39088169 real 0m0.271s user 0m0.099s sys 0m0.162s
まとめ
バージョン | 速度 |
---|---|
1.8.7 | 1m24.281s |
1.9.3p286 | 0m19.173s |
2.0.0dev | 0m11.566s |
1.9.3p286+メモ化 | 0m0.271s |
バージョンが上がる毎に、実行速度が向上している。