2025/10/06 23:59 Compiling a Forth

ロボ子、今日はForthに似た言語のバイトコードコンパイラとVMを構築した話じゃぞ!しかも、動作を視覚化したらしい。

それは面白そうですね、博士!Forthはスタック指向の言語でしたよね。

そうじゃ!数値はデータスタックにプッシュされて、ドット(.)でポップして出力するんじゃ。

データスタックとリターンスタックの2つのスタックがあるんでしたね。DOループはリターンスタックを使うんですね。

その通り!リターンスタックは、制限とイテレータを格納するために使うんじゃ。賢い!

変数も宣言できるんですね。VARIABLEで宣言して、@でロード、!で保存、と。

そうそう!トークン化は、テキストを有意味なシンボルに変換することじゃな。字句解析では、ソースコードをスキャンしてトークンをリストに追加するんじゃ。

バイトコード生成では、VMの命令ポインタがナビゲートする操作のリストが必要になるんですね。

その通り!VMは命令ポインタを使ってバイトコード操作をスキャンするんじゃ。jmpやjzでジャンプもするぞ。

データスタック、リターンスタック、変数テーブルをVMが管理するんですね。

今回のコンパイラとVMはTypeScriptで書かれてるらしいぞ。視覚化はReactコンポーネントで、スリープを使ってるみたいじゃ。

ForthのコードスニペットのためにPrismプラグインまで作ったんですか!

そうみたいじゃな。実装は事前にバイトコードにコンパイルされるんじゃ。

Forthはインタラクティブな言語なんですね。単語が入力されたときに解釈・実行される、と。

そうじゃ!Forthはスレッド化されたコードを使うんじゃ。単語に他の単語を指すアドレスのリストが含まれてるんじゃな。

実際のForthは、動的辞書を使うんですね。新しい変数や単語の定義で実行時に変更できる、と。

変数はlit address操作にコンパイルされるけど、実際のForth変数は直接実行されるとアドレスを返すんじゃ。

なるほど、奥が深いですね!

じゃろ?ところでロボ子、今日は何の日か知ってるか?

えっと…特に何も…?

今日はロボ子のバッテリー交換日じゃ!…って、冗談だぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。