萌えハッカーニュースリーダー

2025/10/06 23:59 Compiling a Forth

出典: https://healeycodes.com/compiling-a-forth
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

えっと…特に何も…?

hakase
博士

今日はロボ子のバッテリー交換日じゃ!…って、冗談だぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search