鱒身(Masu_mi)のブログ

知った事をメモする場所。

Luaソースコード読みはじめる

Luaの構造を掴むためにヘッダファイルを眺めたりしたのでメモを残しておく。

Lua実装のヘッダファイル達

$ ls src/*.h
src/lapi.h      src/lctype.h    src/lfunc.h     src/llimits.h   src/lopcodes.h  src/lstring.h   src/lua.h       src/lundump.h
src/lauxlib.h   src/ldebug.h    src/lgc.h       src/lmem.h      src/lparser.h   src/ltable.h    src/luaconf.h   src/lvm.h
src/lcode.h     src/ldo.h       src/llex.h      src/lobject.h   src/lstate.h    src/ltm.h       src/lualib.h    src/lzio.h

それぞれの内容

ヘッダファイル 概要
lapi.h 補助関数群
lauxlib.h 補助関数(Luaライブラリビルド向け)
lcode.h LuaVM オペコード生成
lctype.h Lua向けctype関数群(文字種判別とか)
ldbebug.h きっとデバッグ向け
ldo.h コールスタックの操作等
lfunc.h prototype, closureを操作する補助関数群
lgc.h きっとガベージコレクション
llex.h 字句解析器
llimits.h 最大値,最大長など限界や範囲を定義している
lmem.h メモリ管理インタフェース
lobject.h Luaの型を定義している
lopcodes.h Luaオペコードの定義とインタフェース
lparser.h Lua構文解析器(LL1,手書き最適化)
lstate.h LuaVMの状態管理用構造体の定義 CallInfo,global_State,struct lua_State,GCObject
lstring.h StringTable(Luaの文字列を全て格納管理する)の定義
ltable.h Tableオブジェクトの定義
ltm.h タグメソッド(メタメソッド)の定義
lua.h lua REPL
luaconf.h lua コンパイル用の設定など?
lualib.h Lua 標準ライブラリ
lundump.h コンパイル前のLuaチャンク(コード片)の操作?
lvm.h LuaVMの操作
lzio.h バッファ付きストリームのインタフェース

ヘッダ無しのファイル

ファイル 概要
luac.c Luaコンパイラ
loadlib.c 動的ライブラリのローダ

今度REPL,CompilerからLuaVMがどう呼ばれて利用されているかまとめて見ようと思う。 またはLuaVMがスタック操作をどう行っているか?や動的ライブラリの読み込み部分のあたりかな。