VM命令:まとめ
Lua 5.1 の VM の全命令を分類すると、こうなります。
- 変数/定数コピー
- MOVE, LOADK, LOADNIL
- グローバル
- GETGLOBAL, SETGLOBAL
- 関数呼び出し
- CALL, TAILCALL, RETURN
- 演算子
- ADD, SUB, MUL, DIV, MOD, POW, UNM, NOT, LEN, CONCAT, GETTABLE, SETTABLE
- ジャンプ
- JMP, LOADBOOL, TEST, TESTSET, EQ, LE, LT
- forループ
- FORPREP, FORLOOP, TFORLOOP
- クロージャ
- GETUPVAL, SETUPVAL, CLOSURE, CLOSE
- テーブル
- NEWTABLE, SELF, SETLIST
- 可変長引数
- VARARG
今回直接触れなかった命令は・・・TAILCALLは、末尾関数呼び出しですね。CALLとRETURNをくっつけたような処理をするだけです。NEWTABLE は空テーブル {} を作るだけ、SELF は obj:method(...) 形式の式の最適化のために、テーブルアクセスと変数コピーを同時に行う命令です。SETLIST は {1,2,3} のように配列形式でテーブルに要素を設定するための命令です。かなり巨大なテーブルも書けるように工夫した命令フォーマットになっていましたが、いい加減長くなってきたので詳細は略です。
てなわけで、命令セットは見終わったので、次回はモジュールとコルーチンの辺りを見ていこうと思います。