Lua

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は、PerlPythonRubyといった他の汎用スクリプト[[言語]]と比較して、高速に動作します。これは、Luaが簡素、高効率、高移植性を重視して設計されているからです。特に、テーブル(連想配列)の実装は非常に最適化されており、数値キーのみを使用する場合は、単純な配列として高速に動作します。

メモリ管理には、初期のバージョンではマーク&スイープ方式のガベージコレクションが使用されていましたが、Lua 5.1以降はインクリメンタル・ガベージコレクションが採用され、リアルタイム用途での性能が向上しています。

LuaJIT



Mike Pallによって開発されたLuaJITは、LuaのJITコンパイラです。動的型付けの言語でありながら、Javaと同程度の速度で動作します。静的単一代入などの高度な最適化技術が使用されており、通常のバイトコード実行と比較して、数倍から数百倍の高速化が期待できます。

歴史



Luaは1993年に最初のバージョンがリリースされて以来、多くのバージョンアップを重ねてきました。主なバージョンとリリース日は以下の通りです。

Lua


1993年0728日 - Lua 1.0 リリース
1995年0207日 - Lua 2.1 リリース
1997年0701日 - Lua 3.0 リリース
2000年1106日 - Lua 4.0 リリース
2003年0411日 - Lua 5.0 リリース(MITライセンス採用)
2006年0221日 - Lua 5.1 リリース(インクリメンタルGC採用)
2011年1216日 - Lua 5.2.0 リリース(ビット演算ライブラリサポート)
2015年0106日 - Lua 5.3.0 リリース(整数型およびビット演算子サポート)
2020年0629日 - Lua 5.4.0 リリース

LuaJIT


2005年0908日 - LuaJIT 1.0.3 リリース(最初の公開版)
2006年0313日 - LuaJIT 1.1.0 リリース(Lua 5.1対応)
2012年1108日 - LuaJIT 2.0.0 リリース
2017年0501日 - 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は、そのシンプルさと強力な機能により、多くの開発者に愛用されているスクリプト[[言語]]です。興味を持たれた方は、ぜひ一度触れてみてください。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。