Ruby Ruby-Inline Lua 計算速度比較

ruby-inlineを試したついでに計算速度の比較を行った。
15の階乗を100万回計算させたら...

言語 実行速度
Ruby 10.95s
Lua 0.90s
Ruby+C(Ruby-inline) 0.76(0.85)s

想像以上にLua速い!なんだこれ!
ruby-inlineいいけれどこれ、Cのソースを文字列としてくくるからemacsruby-modeでインデント出来なくなるんだよなあ...
でもいいぞruby-inline!もっとやれ!


ソースコードなどは以下からどうぞー。


Rubyのコード

#!/usr/bin/ruby

def factorial(n)
  i = n
  result = 1

  while (i>=2) do
    result *= i
    i -= 1
  end
  return result
end

for i in 1..1000000 do
   factorial(15)
end
$ time ruby fact-pureruby.rb
ruby fact-pureruby.rb  10.95s user 0.61s system 99% cpu 11.564 total


Luaのコード

function factorial(n)
   local i = n
   local result = 1

   while (i>=2) do
      result = result*i
      i = i-1
   end
   return result
end

for i=1,1000000 do
   factorial(15)
end
$ time lua fact-lua.lua
lua fact-lua.lua  0.90s user 0.00s system 99% cpu 0.903 total


Ruby-inlineのコード

#!/usr/bin/ruby                                                                                                                                                             

require 'rubygems'
require 'inline'

class InlineTest
  inline do |hoge|
    hoge.c '                                                                                                                                                                
    double factorial(int n) {                                                                                                                                             
      int i=n; 
      double result=1;                                                                                                                                           
      while (i >= 2) { result *= i--; }                                                                                                                                     
        return result;                                                                                                                                                      
      } '
  end
end

t = InlineTest.new()

for i in 0..1000000 do
  t.factorial(15)
end
$ rm -rf ~/.ruby_inline
$ time ruby fact-inline.rb
ruby fact-inline.rb  0.85s user 0.24s system 53% cpu 2.050 total
$ time ruby fact-inline.rb
ruby fact-inline.rb  0.76s user 0.25s system 99% cpu 1.010 total