lua, V8, ruby, mrubyでfib(39)の実行時間比較
lua, V8, ruby, mrubyでfib(39)の実行時間比較 - hnakamur’s blog at githubが@matzさんにツイートされたのを受けて、各処理系の最新版で再度試してみました。
テスト環境その1(前回とは違う環境です)
- Model: MacBook Pro Retina, Mid 2012
- CPU: 2.6GHz Intel Core i7
- RAM: 16GB 1600MHz DDR3
- OS: Mac OS X 10.8.2
2013-03-24 追記
goでも試してみました
go 1.0.3
package main
import "fmt"
func fib(n int) int {
if n < 2 {
return n
}
return fib(n - 1) + fib(n - 2)
}
func main() {
fmt.Println(fib(39))
}
$ time fib39
63245986
real 0m0.484s
user 0m0.481s
sys 0m0.002s
lua
function fib(n)
if n < 2 then
return n
end
return fib(n-2) + fib(n-1)
end
print(fib(39))
$ luajit -v
LuaJIT 2.0.1 -- Copyright (C) 2005-2013 Mike Pall. http://luajit.org/
$ time luajit fib.lua
63245986
real 0m0.906s
user 0m0.901s
sys 0m0.003s
$ lua -v
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
$ time lua fib.lua
63245986
real 0m12.278s
user 0m12.271s
sys 0m0.006s
$ src/lua -v
Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio
$ time src/lua ~/bench/fib.lua
63245986
real 0m13.971s
user 0m13.965s
sys 0m0.005s
v8
function fib(n) {
if (n < 2) return n;
return fib(n-2) + fib(n-1);
}
print(fib(39));
$ v8
V8 version 3.16.14 [sample shell]
> ^D
$ time v8 fib.js
63245986
real 0m0.804s
user 0m0.798s
sys 0m0.008s
ruby
def fib n
return n if n < 2
fib(n-2) + fib(n-1)
end
puts fib(39)
$ git log -1 | grep commit
commit 46d8c51763bd13b69a4234f0d4be05cbfd8ae401
$ time bin/mruby fib.rb
63245986
real 0m16.357s
user 0m16.345s
sys 0m0.008s
$ rbenv version
1.9.3-p374 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m16.225s
user 0m16.169s
sys 0m0.043s
$ rbenv version
1.9.3-p392 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m36.813s
user 0m36.746s
sys 0m0.043s
$ rbenv version
2.0.0-p0 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m31.828s
user 0m31.743s
sys 0m0.045s
2013-03-12 23:15 追記
1.9.3-p374と1.9.3-p392でこんなに違うのは変だなと思って、1.9.3-p374を入れなおして再度測ってみました。
$ rbenv version
1.9.3-p374 (set by /Users/hnakamur/.rbenv/version)
$ time ruby ~/bench/fib.rb
63245986
real 0m38.909s
user 0m38.834s
sys 0m0.045s
以前1.9.3-p374を入れた時から、XCodeのバージョンが変わっているので、コンパイラが違うせいで大幅に時間が変わったようです。
テスト環境その2
lua, V8, ruby, mrubyでfib(39)の実行時間比較 - hnakamur’s blog at githubと同じマシンです。 OSはLionのままですがアップデートはしています。XCodeもバージョンアップしました。
- Model: MacBook Air 13-inch, Mid 2011
- CPU: 1.7GHz Intel Core i5
- RAM: 4GB 1333MHz DDR3
- OS: Mac OS X Lion 10.7.5
lua
$ src/luajit -v
LuaJIT 2.0.1 -- Copyright (C) 2005-2013 Mike Pall. http://luajit.org/
$ time src/luajit ~/fib_bench/fib.lua
63245986
real 0m1.268s
user 0m1.256s
sys 0m0.003s
$ cd ../lua-5.2.1
$ src/lua -v
Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio
$ time src/lua ~/fib_bench/fib.lua
63245986
real 0m20.299s
user 0m20.299s
sys 0m0.006s
$ src/lua -v
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
$ time src/lua ~/fib_bench/fib.lua
63245986
real 0m20.100s
user 0m20.089s
sys 0m0.012s
V8
$ v8
V8 version 3.16.14 [sample shell]
> ^D
$ time v8 fib.js
63245986
real 0m1.105s
user 0m1.099s
sys 0m0.011s
ruby
$ rbenv version
1.9.3-p194 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m23.462s
user 0m23.431s
sys 0m0.039s
この1.9.3-p194は以前のXCodeでビルドしたものです。
$ rbenv version
1.9.3-p392 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m51.765s
user 0m51.679s
sys 0m0.048s
$ rbenv version
2.0.0-p0 (set by /Users/hnakamur/.rbenv/version)
$ time ruby fib.rb
63245986
real 0m47.074s
user 0m47.048s
sys 0m0.045s
テスト環境その3
- Model: NEC Express5800/S70 type RB
- CPU: Intel Pentium G6950 (2.8GHz)
- RAM: 16GB DDR3-1333
- OS: CentOS 6.4 x86_64
lua
$ luajit -v
LuaJIT 2.0.1 -- Copyright (C) 2005-2013 Mike Pall. http://luajit.org/
$ time luajit fib.lua
63245986
real 0m1.244s
user 0m1.241s
sys 0m0.000s
$ src/lua -v
Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio
$ time src/lua ~hnakamur/fib_bench/fib.lua
63245986
real 0m15.804s
user 0m15.774s
sys 0m0.002s
$ time src/lua ~hnakamur/fib_bench/fib.lua
63245986
real 0m15.658s
user 0m15.627s
sys 0m0.002s
V8
$ ./out/x64.release/d8
V8 version 3.16.14 [console: dumb]
d8>
Segmentation fault
$ time ./out/x64.release/d8 ~hnakamur/fib_bench/fib.js
63245986
real 0m1.311s
user 0m1.314s
sys 0m0.004s
ruby
$ rbenv version
1.9.3-p374 (set by /usr/local/rbenv/version)
$ time ruby fib.rb
63245986
real 0m40.485s
user 0m40.365s
sys 0m0.038s
$ rbenv version
1.9.3-p392 (set by /usr/local/rbenv/version)
$ time ruby fib.rb
63245986
real 0m38.841s
user 0m38.749s
sys 0m0.013s
$ rbenv version
2.0.0-p0 (set by /usr/local/rbenv/version)
$ time ruby fib.rb
63245986
real 0m32.491s
user 0m32.410s
sys 0m0.014s
$ git log -1|grep commit
commit f63cd331da6257f9b44778dabff60be55b0721fa
$ time bin/mruby ~hnakamur/fib_bench/fib.rb
63245986
real 0m20.752s
user 0m20.713s
sys 0m0.002s