0

静的チェーンを使用して非ローカル変数にアクセスすることに対する批判の 1 つは、静的な親を超えたスコープ内の変数への参照は、ローカルへの参照よりもコストがかかるということです。静的チェーンをたどる必要があります。参照から宣言への囲みスコープごとに 1 つのリンクです。幸いなことに、実際には、離れた非ローカル変数への参照はまれであるため、これは深刻な問題ではありません。静的チェーン アプローチのもう 1 つの批判は、タイム クリティカルなプログラムに取り組んでいるプログラマーが非ローカル参照のコストを見積もることが難しいということです。宣言。この問題をさらに複雑にしているのは、その後のコード変更によってネストの深さが変わる可能性があり、それによって一部の参照のタイミングが変わる可能性があることです。

このアプローチには、他に潜在的な問題はありますか?

4

3 に答える 3

1

この質問はおなじみのように思えます (宿題のようなものです) ので、慎重に回答し、検索対象をどこに絞るべきかを説明します。

静的連鎖は静的スコープを実装します。1 つは概念であり、もう 1 つはその概念をどのように実装するかです。代数の連想特性を使用して、そこから進むことをお勧めします。:)

念のため、静的スコーピングにはもう少し説明が必要です: http://hoolihan.net/blog-tim/2009/02/17/static-vs-dynamic-scope/

于 2012-04-22T22:37:38.150 に答える
0

除外される 2 つの問題は次のとおりです。非ローカル参照のコストは等しくなく、コードのアップグレードや修正によって変化する可能性があるため、タイム クリティカルなコードは困難です。

ただし、サブプログラムの呼び出しと戻りごとに静的チェーンを変更する必要があります。サブプログラム呼び出しで必要なアクションは複雑です。正しい親スコープはコンパイル時に簡単に判別できますが、呼び出し時に親スコープの最新のアクティベーション レコード インスタンスを見つける必要があります。静的チェーンの長いウォークはオーバーヘッドになります。スタティック チェーンに代わるいくつかの方法が開発されています。最も顕著なのは、ディスプレイと呼ばれる補助データ構造を使用するアプローチです (ディスプレイをレジスタに保持できない限り、スタティック チェーンの方が優れています)。ただし、静的チェーン方式よりも優れている代替手段は見つかっていません。静的チェーン方式は、依然として最も広く使用されているアプローチです。また、ダイナミック スコーピングにも優れたディープ アクセスは、同様にダイナミック リンクを作成します。

于 2012-04-24T00:24:09.597 に答える