2

私のプログラムの 1 つで、世界を動的に変更するためのスクリプト言語 (ユニット AI、世界生成など) が必要だったので、かなり基本的な言語 (継承のない単純なオブジェクト、1 次元配列、32 ビット int/floats、文字列) 用のコンパイラを作成しました。 ) ガベージ コレクションにも参照カウントを使用します。コンパイラは、スタック ベースのバイトコードを出力します。

私の問題は、私の VM が十分に効率的でないことです (実際には、最適化されていない C よりも 15 ~ 30 倍遅くなります)。巨大な SWITCH-CASE ブロックでデコードを実装する、非常にシンプルな VM です。

vm コードは次のようになります。

switch(*ip++)
    case ADD:
        ...
        break;
    case SUB:
        ...
        break;

私の質問は、スクリプトを x86 アセンブラーに再コンパイルして実行時に実行できるかどうかです。(それがJITコンパイラのすることだと思います)。よくグーグル検索しましたが、たとえば x86 コードをプロセッサに送信するためのコード サンプルは見つかりませんでした。より良い VM を構築する方法を説明するチュートリアルへのリンクを誰かが持っていれば、私はとても幸せです。

4

0 に答える 0