或曰

月曜日, 9月 03, 2007

スクリプト D&I (Fin) 組み込み

Win32 版のスクリプトコンパイラ (cscrc.exe), 逆アセンブラ (cscds.exe), C++グルーコード出力プログラム (sysdecl.exe) の実行ファイルを作成して commit すると共に、GameObj.exe 本体に VM インタプリタ組み込み。これで、ひとまずスクリプト言語処理系は終わり。
組み込み前に簡単な最適化をいくつか追加して、実行ファイルに定数プールセクションを出力できるようにした。

Win32 版の実行ファイルは FreeBSD 上で MinGW gcc version 4.2.0 を使って作成。FreeBSD システムコンパイラの gcc 3.4.6 や、Cygwin 版の gcc 4.1.1 だと、意味不明のコンパイルエラーになる。なんか微妙なバグを突いてしまった雰囲気。

関係ないけど Lua は 5 から仮想マシンがスタックマシンではなくレジスタマシンになってるんですね。レジスタマシン流行りなのかなと思って調べてみたら、いくつか paper 発見。

現実のレジスタマシンだと、レジスタの割り当てと、関数呼び出し時の引数設定・破壊されるレジスタの退避・復元処理なんかが面倒。どう処理してるのかと思ったら、レジスタの本数を多めにとるのと、レジスタウィンドウ的なアーキテクチャを採用してレジスタの退避・復元処理をインタプリタ側で手助けする形になってる。なるほどね。

あと Lua 5 の VM 命令セットはシンプルで素敵。さすがによく考えられてる。

ラベル:

0 件のコメント:

コメントを投稿



この投稿へのリンク:

リンクを作成

<< ホーム