Luaをexe化する際は、LuaDist/srluaというLuaのコンパイラとLuaスクリプトを一つのexeとして固めるツールが有名ですが(といいますか、これ以外知らない)、Luaの場合は実行速度がRubyよりも遅く、遅さが気になる場合があります。
なのでLuaJIT版を作りました。
なお、こちらは複数のLuaスクリプトをアーカイブしてexe内に取り込むようになっています。
使い方
コマンド名はcluajitです、これは作成時にソースを流用させて頂いたuLuaの名前にあやかっています。
# luajitと同じくスクリプトを実行
$ cluajit hello.lua
hello world
# 一端exe化して実行
$ cluajit hello.lua hello.exe -link
$ hello.exe
hello world
# モジュール用スクリプトもある場合は
$ cluajit hello.lua foo.lua hello.exe -link
$ hello.exe
hello world
from foo
速度比較
exe化したバイナリは内部でLuaJITが使われている為高速です、試しにこちらのフィボナッチ数列のベンチマークをもとにこちらでも計測してみます。
なお、各言語のバージョンは以下の通りです。
- Ruby(2.3.1)
- Lua(5.2.4)
- LuaJIT(2.0.4)
- cluajit(内部のLuaJITは 2.0.4)
計測に用いたソースコードも再掲しておきます。
Ruby
def fib(n)
if (n < 2) then
return n
end
return fib(n - 2) + fib(n - 1)
end
puts fib(42)
Lua
function fib(n)
if n < 2 then
return n
end
return fib(n - 2) + fib(n - 1)
end
print(fib(42))
これらのソースコードの実行時間を計測します、なお、cluajitは一端exe化してから実行しています。
言語 | 実行時間 |
---|---|
Ruby | 31.023sec |
Lua | 43.881sec |
LuaJIT | 2.734sec |
cluajit | 2.858sec |
やはりLuaJITは速いです、exe化したら少し遅くなってますがこれくらいの誤差なら気にならないかと思います、なによりも配布時にバイナリ渡すだけで済むのは楽です。