Lua(ルア)とは
Luaは、
ブラジルのリオデジャネイロ・カトリカ大学で開発された
スクリプト[[言語]]です。高速な動作と高い移植性、そして
C[[言語]]への容易な組み込みが特徴で、ゲーム開発からWebアプリケーションまで、幅広い分野で利用されています。手続き型、プロトタイプベースのオブジェクト指向、関数型
言語の要素を併せ持ち、柔軟なプログラミングが可能です。
名称の由来
Luaという名前は、
ポルトガル語で「
月」を意味します。この名称は、Luaの前身となった二つの簡易
言語、データ入力用のDELとレポート生成用のSOLに由来します。SOLが
ポルトガル語で
太陽を意味することから、新しい
言語は
月を意味するLuaと名付けられました。
概要
Luaは、
C[[言語]]のホストプログラムに組み込むことを前提に設計されています。そのため、高速な動作、高い移植性、そして容易な組み込みが特徴です。Luaは、まずバイトコードにコンパイルされ、その後Lua VM上で実行されます。特に、LuaJITというJITコンパイラを使用すると、動的型付けの
スクリプト[[言語]]の中でも最速クラスのパフォーマンスを発揮します。
過去には
プログラミング[[言語]]の人気ランキングで上位にランクインしたこともありますが、近年はゲーム産業での利用が目立っています。
ウィキメディア財団のサイトでもLuaがサポートされており、その汎用性と実用性が伺えます。LuaはMIT
ライセンスの下で配布されています。
特徴
Luaの最大の特徴は、その汎用性の高さと実装の容易さです。オブジェクト指向などの機能は明示的にはサポートされていませんが、拡張性が高く、必要に応じて機能を追加できます。また、高速な動作と優れた移植性は、多くの開発者にとって大きな魅力です。
構文は
Pascalに似ており、コルーチン(協調的
マルチタスク)をサポートしています。数値型は
整数と
浮動小数点数を区別しませんが、Lua 5.3からは
整数型も導入されました。関数を変数として扱える点も特徴です。
Luaは、
Perl、
Python、
Rubyといった他の汎用
スクリプト[[言語]]と比較して、高速に動作します。これは、Luaが簡素、高効率、高移植性を重視して設計されているからです。特に、テーブル(連想配列)の実装は非常に最適化されており、数値キーのみを使用する場合は、単純な配列として高速に動作します。
メモリ管理には、初期のバージョンではマーク&スイープ方式のガベージコレクションが使用されていましたが、Lua 5.1以降はインクリメンタル・ガベージコレクションが採用され、リアルタイム用途での性能が向上しています。
LuaJIT
Mike Pallによって開発されたLuaJITは、LuaのJITコンパイラです。動的型付けの
言語でありながら、
Javaと同程度の速度で動作します。静的単一代入などの高度な最適化技術が使用されており、通常のバイトコード実行と比較して、数倍から数百倍の高速化が期待できます。
歴史
Luaは1993年に最初のバージョンがリリースされて以来、多くのバージョンアップを重ねてきました。主なバージョンとリリース日は以下の通りです。
Lua
1993年07月28日 - Lua 1.0 リリース
1995年02
月07日 - Lua 2.1 リリース
1997年07月01日 - Lua 3.0 リリース
2000年11
月06日 - Lua 4.0 リリース
2003年04月11日 - Lua 5.0 リリース(MITライセンス採用)
2006年02
月21日 - Lua 5.1 リリース(インクリメンタルGC採用)
2011年12月16日 - Lua 5.2.0 リリース(ビット演算ライブラリサポート)
2015年01
月06日 - Lua 5.3.0 リリース(
整数型およびビット演算子サポート)
2020年06月29日 - Lua 5.4.0 リリース
LuaJIT
2005年09
月08日 - LuaJIT 1.0.3 リリース(最初の公開版)
2006年03月13日 - LuaJIT 1.1.0 リリース(Lua 5.1対応)
2012年11
月08日 - LuaJIT 2.0.0 リリース
2017年05月01日 - LuaJIT 2.0.5 リリース
コード例
Hello World
lua
print("Hello, World!")
挿入ソート
lua
function insertionSort(arr)
for i = 2, #arr do
local key = arr[i]
local j = i - 1
while j > 0 and arr[j] > key do
arr[j + 1] = arr[j]
j = j - 1
end
arr[j + 1] = key
end
end
コルーチン
コルーチンは、状態遷移を記述するのに便利な機能です。
Luaは、POSIXやECMAScript標準とは異なる独自のカスタムパターンマッチングをサポートしています。
LuaとC/C++の相互運用
Luaには、C[[言語]]向けの相互運用APIが用意されています。これにより、LuaからC/C++の関数を呼び出したり、逆にC/C++からLuaの関数を呼び出したりすることが可能です。
C/C++からLuaの関数を呼び出す例
C/C++の関数をLua VMに登録し、Luaスクリプト側から呼び出す例を以下に示します。
言語バインディングの例
Luaの他言語用バインディングは公式には提供されていませんが、有志によって開発されたサードパーティ製ライブラリやツールが多数存在します。
C++: toLua、tolua++、Luabind、Selene、Sol、Sol2などがあります。
Java: Luaj、JNLuaなどがあります。
.NET: LunaRoad、MoonSharp、NeoLuaなどがあります。
Luaを採用している製品
Luaは、ゲーム業界だけでなく、Webアプリケーション、組み込みシステムなど、さまざまな分野で利用されています。
ゲーム
多くの人気ゲームでLuaが採用されています。
ゲーム以外
Adobe Photoshop Lightroomなど、ゲーム以外の分野でもLuaが利用されています。
関連情報
Wikipedia:Lua
Lua 公式サイト
*
Lua 5.3 Reference Manual
Luaは、そのシンプルさと強力な機能により、多くの開発者に愛用されている
スクリプト[[言語]]です。興味を持たれた方は、ぜひ一度触れてみてください。