スタックはいいものだ

岩波講座 ソフトウェア科学〈〔環境〕5〉プログラミング言語処理系」、第6章「実行時環境」へと進む。内容は、手続き呼び出しにともなう実行時スタックの管理について。活性レコード(フレーム)とか、ディスプレイ法とかのお話。スコープとかも絡んでくるんで、結構面白い。

活性レコードの動的リンクと静的リンクの違いを理解して、やっと動的スコープというものが理解できた。

  関係 可視性 確定
静的スコープ 字面 内側のブロック → 外側のブロック コンパイル
動的スコープ 呼び出し 呼び出された側 → 呼び出した側 実行時

静的スコープの実現については、ディスプレイ法について述べられていて、その巧妙な動きに痺れた。こういう巧妙な動きをする機械とか、システムとか、アルゴリズムとか、好きだなあ。

そういえば、「スモールコンパイラ の制作で学ぶ プログラムのしくみ」で使われていたな、ディスプレイ法。あれは静的スコープを実現するためだったってことが、今になってやっと理解できた。*1

ここまで来て、仮想マシンにおける実行時スタックの実現法について興味が湧いてきた。仮想マシンの場合、スタックやレジスタも抽象化、仮想化されているはずなので、この章で述べられていたことを実装する方法も、実際の機械(リアルマシン)を対象にしたものとはまた違ったことになっているはず。その辺は、一体どうなってるんだろう?

仮想マシンへの興味も盛り上がってきたところで、いざ第7章「中間コード生成」へ!

*1:図書館で借りて、さらっと流し読んだだけでした。中田先生、すいません。