#contents

*Luaとは [#w31318e9]
ver 5.1 からGCがインクリメンタルGCに変更された。

*IDEへのインストール [#d18a617c]
Lua Development Tools という Lua の eclipse プラグインがあるため、開発にはこれが利用できる。

 <Eclipse へのインストール時のアドレス>
 URL : http://download.eclipse.org/koneki/releases/stable

*コンパイル [#xc476112]

 # gcc test.c -l lua -l dl -l m

*文法 [#d97018aa]
**print文 [#k99b34f3]
 fmt = "key=%s,value=%s"
 print(fmt:format("kagi","800"))
 print(string.format("name=%s", "taro"))

**C言語の連携 [#x1b4ae9c]
LUA側のグローバル変数を通じてデータのやりとりを行う。
<C側でLUA内のグローバル変数を取得>
 lua_State* L = luaL_newstate();
 lua_getglobal(L, "NAME");                 // NAMEというグローバル変数名の値を、スタックにコピー。
 lua_getglobal(L, "SIZE");
 printf("NAME : %s\n", lua_tostring(L, -2));                // スタックから値を取り出し。
 printf("SIZE : %d\n", lua_tointeger(L, -1));

**C言語からLUA関数の呼び出し。 [#c480d24c]
 lua_State* L = luaL_newstate();
 lua_getglobal(L, "show");                   // 関数名をスタックに設定
 lua_pcall(L, 0, 0, 0);                          // 関数の呼び出し

**LUAからC言語の関数を呼び出す。 [#r5c552e3]
<LUA側>
 result = add(x, y)
<C言語>
 int l_add(lua_State* L)
 {
    int x = luaL_checkint(L, -2);    // 第1引数 intとして取得
    int y = luaL_checkint(L, -1);    // 第2引数
    int result = x + y;
    lua_pushnumber(L, result);     //戻り値をスタックに積む
    return 1;                                //戻り値の数を指定
 }

**Luaの基本的概念 [#af0b94a6]

Luaは基本的に、プロトタイプ型オブジェクト指向といわれる言語であり、いわゆるJavaなどのクラス型とは違う。そのため、他のファイルなどを読み込んで実行させる場合などは、注意が必要になる。

<例>
 require("test")

この場合、test.lua というファイルを読み込み、その時点で実行する。注意するべきは、実行後 test.lua は終了してしまうため、通常は以下のような使い方が多い。

 local test = require("test")

また自分のオブジェクトに新しい関数を追加するような場合には、下記のような使い方もする。

 require("test").extend(self)

特に注意するべきは、この読み込むファイル内での local 定義は、このファイル内でのみアクセスできるスコープ範囲となっており、読み込み元からこれらの変数にアクセスできない。そのため、読み込むファイル内に変数を操作するための setter getter を作っておくと良い。











*LUAインタプリタのインストール [#w6116442]

 # wget http://www.lua.org/ftp/lua-5.2.3.tar.gz
 # tar zxvf lua-5.2.3.tar.gz
 # cd lua-5.2.3
 # make linux
 # make install




**JSONの導入 [#vfb75c75]
 # wget http://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz
 # tar xzf lua-cjson-2.1.0.tar.gz
 # cd cjson-2.1.0
 # make install LUA_INCLUDE_DIR=/usr/local/include/luajit-2.0

*LuaRocksの導入(Lua 5.1のみに対応、5.3には未対応の様子) [#qb86cec5]
**インストール [#feabf02a]
 # wget http://luarocks.org/releases/luarocks-2.1.2.tar.gz
 # tar zxvf luarocks-2.1.2.tar.gz
 # cd luarocks-2.1.2
 # ./configure
 # make
 # make install

※但しLUAをソースから入れていないと、lua.h が見つからないとエラーがでるので、yum 経由でのインストールの場合は、lua-devel も一緒に入れることをわすれないこと。

** インストールされた場所 [#c830aae8]

ここには、LuaRocksの config ファイルが置かれる。
 /usr/local/etc/luarocks/

ここには、LuaRocksのプログラム一式が置かれる。
 /usr/local/share/lua/5.1/luarocks/                                  << 但しこれは、LUA 5.1 の場合。

**利用方法 [#udc0c165]