Rust で作るプログラミング言語シリーズです。 バイトコードコンパイラの難しさ 書籍での心残りの一つが、第6章のバイトコードの難易度です。本書ではプログラミング言語を作るにあたってステップ・バイ・ステップで難易度を上げていくように構成を考えていますが、第6章のバイトコードの実装の時点で難易度が急激に上昇します。例えば、次のようなジャンプアドレスの計算を行う必要があるのですが、これはかなり込み入ったロジック計算が必要になります。 条件分岐では、下図のようにジャンプしますが、このアドレス計算が厄介です。 ループについても同じくジャンプ命令が必要ですが、こちらはループの先頭にアドレスを戻します。 この実装の難しさは、プログラムの意味を理解する(意味論)ロジックと、それをバイトコードへ変換するロジックを一つとしてデバッグしなくてはならないところにあります。どちらに問題があるかを切り分けるのは簡単