ルーチンの入れ子における静的スコープサポート
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/30 08:24 UTC 版)
「コールスタック」の記事における「ルーチンの入れ子における静的スコープサポート」の解説
PascalやAdaといったプログラミング言語はサブルーチンの入れ子が可能であり、内側のルーチンが外側のルーチンのコンテキスト(外側のルーチンの引数や局所変数)にアクセスできるようになっている。この静的な入れ子はいくつも繰り返すことができ、関数の中に別の関数を定義し、その中でさらに別の関数を定義し……といったことが可能である。このため実装に当たっては呼び出された関数が静的な入れ子を遡って外側のフレームにアクセスできる手段を提供する必要がある。一般に外側のフレームへのポインタとしてこの参照を実装し、これを「ダウンスタック・リンク」または「スタティック・リンク」と呼んで、直前の呼び出し側ルーチンとのリンク(ダイナミック・リンク)と区別する(呼び出し側は定義上の外側のルーチンとは限らない)。例えば、内側のルーチンは自分自身を再帰呼び出しできるようになっている言語が多く、同じルーチンのスタックフレームがコールスタック上にいくつも重なることがあり、それらが全て同じ外側のルーチンのコンテキストへのスタティック・リンクを持つことになる。スタティック・リンクの代わりに、外側のスタックフレームへの参照を集めてポインタの配列とする方式もある。この配列を display と呼び、インデックスを指定することで必要なフレームを得ることができる。バロース B5000 はハードウェアでこれをサポートしており、32レベルの静的入れ子を使用可能だった。
※この「ルーチンの入れ子における静的スコープサポート」の解説は、「コールスタック」の解説の一部です。
「ルーチンの入れ子における静的スコープサポート」を含む「コールスタック」の記事については、「コールスタック」の概要を参照ください。
- ルーチンの入れ子における静的スコープサポートのページへのリンク