TL;DR

ラムダ計算を実際に動かすための実行モデル(抽象機械)である。名前は 4 つの主要なレジスタの頭文字から取っている。

なぜ必要か

Wikipedia によると、SECD マシンは関数型言語のコンパイラのターゲット(目的機械)として意図された抽象機械で、後に大きな影響を与えた。Peter J. Landin が考案し、1964 年に Computer Journal 誌で発表した。

仕組み

SECD マシンは次の 4 つのレジスタで計算を進める。

  • Stack: 計算中の値を保持する
  • Environment: 変数を保持する
  • Control: 実行すべき命令列を保持する
  • Dump: 関数を呼び出す前の S、E、C を保持する

SECD マシンを説明する論文には、現在の Dump を捕捉する J operator が出てくる。これが継続の考え方の起源である。

4 つのレジスタは、いずれもメモリ上の連結リストを指す。関数適用の ap 命令は、スタックからクロージャと引数リストを取り出し、引数を環境に置いて、関数本体を C に入れる。このとき、それまでの S と E、C の次の値をダンプに退避する。ret 命令はダンプから S、E、C を戻し、戻り値を呼び出し元のスタックに積む。なお、Wikipedia では C を Code の頭文字としている。

関連

出典