Schemeのコールスタック
これ
CとSchemeの比較
図もあって冷静に読めばわかりやすい
用語
dynamic link
その関数が(任意のタイミングで)誰に呼ばれるかは実行時でないとわからないので動的リンク その関数が終了し、復帰する際にdynamic link内の値を見て、元のフレームポインタの状態を復元する static link
その関数が、どこで定義されているかはコンパイル時にわかるので静的リンク そのおかげで定義時周辺のローカル変数にアクセスできる
例えば上の記事にあるこのコードでは、
関数Aの中で
関数Dを定義
関数B, Cの呼び出し
をしている
code:scheme
(define (A a1 a2)
(let ((a3 (+ a1 a2)))
(define (D e1) (+ a3 e1))
(B arguments)
(C D)))
Dの定義内には、a3という、A内のローカル変数が使われている
DをC内で読んだとしてもstatic linkを利用することでこのa3にもアクセスすることが出来る
で?という感じがある
Schemeの例のように実装したらどういう利点があるのか #?? なぜわざわざこのように実装するのか
利用者が得するのか、処理系実装者が得するのか