ネタバレといいつつネタバレプラグインはあえて使ってないです。
あのあとFORTHについてちょっと調べてみたんです。
一番の特徴はスタック方式で実行が行われるということですね。
よく引き合いに出される例は足し算なんですが、逆ポーランド方式で記述されます。
3 4 + . (cr) 7 ok
なんのこっちゃという感じですけど、スタックの仕組みを理解してると非常にわかりやすくって。
スタックというのは上から順にデータを積み上げていくイメージです。
上の例だとまずスタックに3を、次に4を上から積んで、そこで + と来たときに、下に積まれている3と4が足されて結果が出力されるわけです。
これで何がいいかというと、構文解析がやたら楽になるということで。
頭から順番に実行していけばいいので、頭から順番にコンパイルできて、プログラムが非常にコンパクトにできる、ということだそうで。
あと、プログラム、というか環境を動的にどんどん拡張していけるというのも特徴で。
FORTHの環境の上でワード(サブルーチンのようなもの)を定義すると、それをシステムの再起動なしに、次のステップで使うことができるし、改変も楽にできます。ここらへんはLISPと似てますね。
Wikipediaからの引用なんですが、ワードの定義の例です。
: FLOOR5 ( n -- n' ) DUP 6 < IF DROP 5 ELSE 1 - THEN ;
これは以下のCのプログラムに相当すると。
int floor5(int v) {
return (v < 6) ? 5 : (v - 1);
}
つまり、入力値が6未満だったら5を返し、それ以上だったら1を引いた値を返すと。
これは以下のように実行されます。
1 FLOOR5 CR .
5 ok
8 FLOOR5 CR .
7 ok
コンパイルによってメモリー上のデーターが再構築されて、無駄な定義などが整理されるので、結果がまたコンパクトになるんだとか。
基本的な定義を積み重ねて、それを利用してさらに段々と大きなシステムを作っていくというスタイルはまさにWizard's Baneでウィズが呪文を組み上げた方式と同じですね。
ちなみに、作中ではウィズはイーマックに対して\(バックスラッシュ)と唱えてコマンドモードにするのですけど、FORTHではバックスラッシュではじまる行はコメントなんだそうです ^^;;
まぁ、ウィズの呪文はスタック式の構造をしてないように見えるので、FORTHそのものではないわけですけどね。
実際のところは、本当の呪文は別のところで行われていて、イーマックに入力していたのは本当にコメントだったりして。。。
まさかね。
どっちにしろ、FORTHはモダンな言語とはかなり構造が違うわけなんですが、小さなリソースでもシステムを構築できることなどから、組み込み系で人気があるようですし、天文関連でも有名みたいですね。こちらにガイドがあります。
FORTHの実装についてはForth Systemsからたどれます。フリーのコンパイラーへのリンクもありますね。
いろいろな実装についてここにあります。Javascriptで書かれたやつとかAndroidで動くやつとかあったりして。