[ 目次, 前節, 次節, 索引 ]

5.4  積極制御評価器



5.1節では単純なSchemeプログラムを, レジスタ計算機の記述へどう変換するかを見た. ここでは更に複雑なプログラム, つまりScheme解釈系の振舞いが手続きevalapplyを使ってどう記述出来るかを示した4.1.1--4.1.4節の超循環評価器についてこの変換を実行しよう. 本節で開発する積極制御評価器(explicit-control evaluator)は, 評価処理で使う基盤の手続き呼出しと引数渡しの機構が, レジスタとスタックを使ってどう記述出来るかを示す. その上, 積極制御評価器は, 通常の計算機の裸の機械言語と非常によく似た言語で書かれたScheme解釈系としても役立つ. この評価器は5.2節のレジスタ計算機のシミュレータで実行出来る. あるいはまた, これはScheme評価器の機械語による実装を構築する出発点として, 更にはSchemeの式を評価する 特殊目的の機械として使える. 図5.16はそういうハードウェア実装: Schemeの評価器として働くシリコンチップを示す. チップの設計者は, 本節に述べる評価器に似たレジスタ計算機のデータパスと制御器の仕様から始め, 集積回路のレイアウトを構成する設計自動化プログラムを使った.19



図5.16 Scheme評価器のシリコンチップ実装

レジスタと演算
積極制御評価器の設計では, レジスタ計算機で使う演算を決めなければならない. 超循環評価器は, quoted?make-procedureのような手続きを使い, 抽象構文によって記述した. レジスタ計算機の実装では, これらの手続きを基本的リスト構造メモリーの演算列に展開し, これらの計算をわれわれのレジスタ計算機に実装出来る. しかしこれでは評価器が非常に長くなり, 基本構造の細部が不明瞭になる. 説明を明晰にするため, レジスタ計算機の基本演算に, 4.1.2節で示した構文手続きと, 4.1.3節と4.1.4節に示した環境と, 他の実行時データを表現する手続きを取り込もう. 低レベルの機械語でプログラムが出来たり, ハードウェアに実装出来たりする評価器を完全に記述するのに, これらの演算を, 5.3節に述べたリスト構造の実装を使って, 更に基本的な演算に取り替える.

   われわれのScheme評価器のレジスタ計算機には, スタックと七つのレジスタ: exp, env, val, continue, proc, arglおよびunevがある. expは評価すべき式を保持し, envはそれにより評価を実行する環境を持っている. 評価の終りで, valは指示された環境で式を評価して得た値を持っている. continueレジスタは, 5.1.4節で説明したように再帰を実装するのに使う. (評価器は, 式の評価はその部分式の評価を必要とするので, 自分自身を再帰的に呼び出す必要がある.) レジスタproc, arglunevは組合せを評価するのに使う.

   われわれは評価器のレジスタと演算がどう接続しているかを示すデータパス図は用意しない. また計算機演算の完全なリストも出さない. これらはこれから詳述する評価器の制御器で暗黙に決められる.


19 チップとこれを設計した手法についての詳しい情報は Batali他 1982参照.

[ 目次, 前節, 次節, 索引 ]