4 C API

この章は Lua の C API を説明します。つまりホストプログラムと Lua の対話で利用可能な C 関数の集合を説明します。C API 関数に関する型と定数は全てヘッダーファイル lua.h で定義されます。

「関数」という言葉を使っていても、API の実体はマクロであることがあります。特に断りがない限りそういったマクロは引数を一度だけ使うので、引数の持つ副作用を気にする必要はありません (Lua ステートを表す第一引数は何度も使われます)。

多くの C ライブラリと同様 Lua の C API は引数の正当性や一貫性を確認しませんが、LUA_USE_APICHECK マクロを定義して Lua をコンパイルすればこの振る舞いを変更できます。

Lua ライブラリは全て再入可能であり、グローバル変数はありません。Lua ライブラリが使う全ての情報は Lua ステート (Lua state) と呼ばれる動的な構造に保存されます。

各 Lua ステートは一つ以上のスレッドを持ち、スレッドは強調して動作する独立した実行の流れを表します。型 lua_State が (その名前に反して) スレッドを表します。スレッドに対応する Lua ステートはスレッドを通して間接的にアクセスできます。

C API の全ての関数は第一引数にスレッドのポインタを受け取ります。唯一の例外は Lua ステートを新しく作成してそのメインスレッドへの参照を返す lua_newstate です。