Luaとは、スクリプト言語のひとつ。ポルトガル語では「月」という意味を表す。C/C++/java/VB.netなど、他の言語で組まれたプログラムに組み込んで使うことができる。2014年1月6日のLuaのバージョンは5.2.3となっている。
概要
この言語の設計における基本的なコンセプトは、言語そのものに多くの機能を実現するのではなく、様々な機能を実現するための少数の仕掛けをつくることでした。たとえば、 Lua言語は純粋なオブジェクト指向言語ではありませんが、クラスや継承といった仕組みを実現できるのです。 むやみに多くの概念を導入することなく、簡素な言語のままで拡張を可能にしたそれらの仕掛はLuaの際だった特徴です。
何に使われてるの?
Luaはプログラムに組み込み読み込ませるだけで使え、さらに独自のAPIを親プログラム側から提供することができることから、あとから容易に機能を追加・変更する(したい)ことが多いプログラムによく用いられる。ゲーム開発などでも、システムの根幹は高速な言語で作り、頻繁に調整されるシナリオなどはLuaで構築するといった使い方で利用されている。ちなみにLua単体でも動く。
- AviUtlのスクリプト → AviUtlスクリプト講座
- 各種TAS用ゲームエミュレータ EmuLua
- MinecraftのMOD ComputerCraft (Minecraftはjavaで構築されているためLuajが使用されている)
- VOCALOID3 Job Plugin
Hello world
print("Hello world")
C/C++とLuaとのやり取り
Luaスクリプトはlua_Stateという構造体のポインタを関数に持たせることでluaを解釈させることができる。たとえばLuaからC言語の関数を呼び出す場合は基本的に以下のようにする。またLuaに関数やクラスを簡単に公開するにはLuabind、tolua++、SWIGを使えば可能になる。
int l_add(lua_State* L)
{
int top = lua_gettop(L); /* Luaのスタックの数を取得 */
int ret = 0; /* 結果の格納用変数 */
for(int i = 0; i < top; i++){ /* スタックの数だけを繰り返す。 */
ret += (int)lua_tonumber(L, i+1); /*retと加算 */
}
lua_settop(L, 0); /*スタックの削除 */
lua_pushnumber(L, ret); /* 加算した結果を戻り値としてLuaのスタックにプッシュ */
return 1; /* 戻り値の数 */
}
EmuLua
エミュレータにLuaスクリプトの機能を付け加えたものを「EmuLua」と呼ぶ。これはDeHackEd氏が最初にSnes9xに搭載して以来、Gens、VitualBoy Advance、FCEUX、FinalBurn Alpha、DeSmuME(いずれもre-recording版)などにも搭載されたものである。EmuLuaに使われているLuaのバージョンは5.1。
詳しいことはTAS用エミュレータの機能紹介 - 悟茶辞苑ッをご覧ください。
関連動画
関連商品
関連コミュニティ
関連項目
外部リンク
- The Programming Language Lua (英語/ポルトガル語)
- lua-users.org (英語)
- Lua@空想具現化プログラミング (日本語/Shift_Jis版の配布サイト)
- Luaプログラミング入門 (日本語・解説サイト)
- 3
- 0pt