試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

LuaとLuaJITの概要と、LuaJITのLua 5.2との互換性について(2014年6月時点)

  1. 概要
  2. LuaJITについて

概要

C/C++言語のプログラム内に組み込み、その中でスクリプトとして動作することを想定したプログラミング言語であり、この機能を提供するためのライブラリ(liblua)も指す。制限の緩いMITライセンスであることや、他のスクリプト言語と比較して動作が高速であるとされることなどもあって、ゲームを含む商用プログラムなどに使われることも多い。
ライブラリ部分以外にも、PythonPerlなどと同様にインタプリタとして単独で動作するプログラム(luaコマンド)も提供しており、これを用いるスクリプトを記述して(C/C++言語のプログラム内に組み込まずに)動かすこともできる。引数を付けずにインタプリタを実行するとPythonなどと同様に対話モードで動作し、-iオプションを付けてスクリプトの場所を指定すると、そのスクリプトの実行後に対話モードに入る。
他の用途として、アプリケーションの設定を行うための言語として使われることもある。
2014年6月時点の最新バージョンは5.2系で、次期バージョンの5.3系が開発中。

LuaJITについて

www.lua.orgによる本家版のライブラリやインタプリタとは別に、プログラム実行時に機械語へのコンパイルを行って動かすことで本家版と比べて非常に高速に動作するLuaJITというソフトウェアが存在する。ライセンスは本家版と同様のMITライセンス。
本家版にあるluacというコマンドはプログラムの読み込みを高速化できるが、中の処理自体は同じ動作速度となる。その一方でLuaJITはプログラム内の処理を高速化する。
こちらにも機能をC/C++言語のプログラム内に組み込むためのライブラリ(libluajit)とインタプリタ(luajitコマンド)が存在する。
LuaJITにはFFI Libraryと呼ばれる追加機能が存在(内部に統合されている形)し、C言語で書かれたライブラリを開いてその中の機能を呼び出すことができる他、C言語のデータ型に基づく変数(構造体や共用体含む)を作成してこれを用いたプログラムを記述することでプログラムの動作を高速化したりメモリ使用量を削減したりもできる。ただし、FFI Libraryを用いたプログラムはLuaJIT専用となり、本家版では動作しない。
LuaJITのバージョン番号の付き方は本家版とは異なり、対応する言語仕様についてもバージョン2.0系が本家版のバージョン5.1系に対応となっており、本家版のバージョン5.2系から使用可能になった機能は既存のLua 5.1向けに書かれたコードの互換性に影響しない範囲にある一部を除いて利用できない(例えば、goto文関係はバージョン5.2系から追加されたがLuaJITでも利用可)。
また、ソースを入手してLuaJIT-[バージョン]/src/Makefile

# Features from Lua 5.2 that are unlikely to break existing code are
# enabled by default. Some other features that *might* break some existing
# code (e.g. __pairs or os.execute() return values) can be enabled here.
# Note: this does not provide full compatibility with Lua 5.2 at this time.
#XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT

の部分の「#XCFLAGS+=」の行の最初の「#」を消してビルドすると追加で幾つかのLua 5.2との互換性が得られるが、既存のLua 5.1向けのプログラムの動作が一部変わる上に(LuaJITのバージョン2.0.3時点では)Lua 5.2と完全な互換性が得られるわけではない。また、ディストリのパッケージでこの設定が行われていない場合、追加の互換性を得たいのであれば自分でビルドしてそれを使用する必要がある。
LuaJITのライブラリの扱い方は本家版と同様(API互換)で、更にLuaJITにはABIの互換性もあるため、Lua 5.1向けにビルドされたC言語モジュール(言語バインディングなど)はそのままLuaJITでも使用できる。
本家版との速度比較については
http://luajit.org/performance.html
を参照。

使用したバージョン:

  • Lua 5.2.3
  • LuaJIT 2.0.3

関連URL: