静的チェーンを使用して非ローカル変数にアクセスするという批判の1つは、 スコープ内の静的な親以外の変数への参照が、ローカルに参照 を超えるコストがかかることです。静的な連鎖は、宣言への参照から囲むスコープごとに1つのリンクに従わなければなりません。幸いにも、実際には、 離れた非局所変数への参照はまれです。したがって、これは深刻な問題ではありません。もう1つの 静的チェーンアプローチの批判は、プログラマーにとって、時間基準プログラムで働く が非ローカル参照のコストを見積もるのは難しいということです。 各参照のコストは、 リファレンス間の入れ子の深さによって決まるためですおよび宣言の範囲。この問題を更に複雑にするのは、 であり、その後のコード変更によって入れ子の深さが変更され、変更されたコードとおそらく のコードの両方が変化から遠ざかるようないくつかの参照のタイミングが変更されます。コンパイラでの静的チェーンの問題
この方法にはさらに問題がありますか?
正確には、動的スコープと静的スコープとは何ですか?私は静的なスコープの実装が静的なチェーンの他にあるのか知っていますが、それはまだ最も広く使われています。 –
サブプログラムの呼び出しごとに静的チェーンを変更して戻す必要があります。サブプログラム呼び出しで必要なアクションは複雑です。正しい親スコープはコンパイル時に容易に決定されますが、親スコープの最新のアクティベーションレコードインスタンスは、コール時に見つかる必要があります。 –
スタティック・チェインが最も広く使用されていますが、スタティック・スコープは言語のスコープ・ルールに関連しています。静的スコープが悪いのはなぜですか?スタティックチェーンのボトムアップ(ベースARIから呼び出し元ARI)のスタックウォークは問題に貢献していませんか? – JFish222