LoginSignup
6
8

More than 5 years have passed since last update.

LuaスクリプトをLuaJITを使ってexe化する

Last updated at Posted at 2016-11-24

Luaをexe化する際は、LuaDist/srluaというLuaのコンパイラとLuaスクリプトを一つのexeとして固めるツールが有名ですが(といいますか、これ以外知らない)、Luaの場合は実行速度がRubyよりも遅く、遅さが気になる場合があります。

なのでLuaJIT版を作りました。
なお、こちらは複数のLuaスクリプトをアーカイブしてexe内に取り込むようになっています。

wordijp/cLuaJIT(github)

使い方

コマンド名は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化したら少し遅くなってますがこれくらいの誤差なら気にならないかと思います、なによりも配布時にバイナリ渡すだけで済むのは楽です。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8