Forth

1970年に Charles Moore が開発したスタック指向プログラミング言語。

プログラマ向けの一言

自分自身のコンパイラを数KBで書ける言語。 変数なし、構文なし、スタックとワード(関数)定義だけ。極限までミニマル。

コードで理解する

\ 数値をスタックに積む
3 4 +       \ → 7 がスタックに残る

\ ワード(= 関数)を定義
: square  ( n -- n^2 )  dup * ;

5 square    \ → 25

\ フィボナッチ
: fib  ( n -- fib(n) )
  0 1 rot 0 do
    over + swap
  loop drop ;

10 fib      \ → 55

\ 条件分岐
: abs  ( n -- |n| )
  dup 0 < if negate then ;

-5 abs      \ → 5
// 上の square を TypeScript のスタックマシンで表現すると:
// "5 dup *"
// ステップ1: push(5)        → [5]
// ステップ2: dup            → [5, 5]
// ステップ3: *              → [25]

なぜ重要か

// 1. 究極のミニマリズム
//    Forth のコンパイラ全体が数KB〜数十KBに収まる
//    → 組み込みシステム、宇宙探査機(Philae 着陸機)で使われた

// 2. 拡張 = 言語そのものを作ること
//    新しいワードを定義 = 言語を拡張
//    if/then/else すら Forth のワードとして定義されている
//    → メタプログラミングの極致

// 3. 教育的価値
//    スタック、辞書、インタプリタ/コンパイラの仕組みを
//    最小限の複雑さで理解できる

構造

入力 → 字句解析(スペースで分割するだけ) → 辞書検索
        ↓                                    ↓
    数値なら push                   ワードなら実行

関連

Graph