generated at
Schemeのコールスタック

これ
CとSchemeの比較
図もあって冷静に読めばわかりやすい

用語
dynamic link
自分を呼び出した関数のスタックフレーム指す
その関数が(任意のタイミングで)誰に呼ばれるかは実行時でないとわからないので動的リンク
その関数が終了し、復帰する際にdynamic link内の値を見て、元のフレームポインタの状態を復元する
static link
自分を定義した関数のスタックフレームを指す
その関数が、どこで定義されているかはコンパイル時にわかるので静的リンク
そのおかげで定義時周辺のローカル変数にアクセスできる
例えば上の記事にあるこのコードでは、
関数Aの中で
関数Dを定義
関数B, Cの呼び出し
をしている
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の例のように実装したらどういう利点があるのか #??
なぜわざわざこのように実装するのか
利用者が得するのか、処理系実装者が得するのか