2012-04-22 20 views
0

静的チェーンを使用して非ローカル変数にアクセスするという批判の1つは、 スコープ内の静的な親以外の変数への参照が、ローカルに参照 を超えるコストがかかることです。静的な連鎖は、宣言への参照から囲むスコープごとに1つのリンクに従わなければなりません。幸いにも、実際には、 離れた非局所変数への参照はまれです。したがって、これは深刻な問題ではありません。もう1つの 静的チェーンアプローチの批判は、プログラマーにとって、時間基準プログラムで働く が非ローカル参照のコストを見積もるのは難しいということです。 各参照のコストは、 リファレンス間の入れ子の深さによって決まるためですおよび宣言の範囲。この問題を更に複雑にするのは、 であり、その後のコード変更によって入れ子の深さが変更され、変更されたコードとおそらく のコードの両方が変化から遠ざかるようないくつかの参照のタイミングが変更されます。コンパイラでの静的チェーンの問題

この方法にはさらに問題がありますか?

答えて

0

除外二つの問題がある: 非局所参照が遅いのであれば、基準と参照の宣言間スコープ数変数が大きい。非ローカル参照のコストは等しくなく、コードのアップグレードや修正で変更することができるため、タイムクリティカルなコードは困難です。

ただし、静的チェーンはサブプログラムの呼び出しごとに変更する必要があります。サブプログラム呼び出しで必要なアクションは複雑です。正しい親スコープはコンパイル時に容易に決定されますが、親スコープの最新のアクティベーションレコードインスタンスは、コール時に見つかる必要があります。静的なチェーンを長時間歩くことはオーバーヘッドになります。静的チェーンの代替手段の中には、特にディスプレイと呼ばれる補助データ構造を使用する手法が開発されています(ディスプレイがレジスタに保持されない限り、静的チェーンが優れています)。しかしながら、その代替物のどれも、最も広く使用されている方法である静的鎖法より優れていることが判明していない。また、動的スコープでも優れているディープアクセスは、動的リンクを作成する場合と同様に動作します。

1

この質問はおなじみに聞こえます(宿題をするならば欲しい)ので、私は答えに慎重なアプローチをとって、あなたの検索に集中する場所を教えていきます。

スタティック・チェーンは静的スコープを実装します。 1つは概念であり、もう1つはその概念がどのように実装されているかです。私は代数の連想プロパティを使用し、そこから行くことをお勧めします。 :)

そして、念のための静的スコープを少し追加明確必要:

http://hoolihan.net/blog-tim/2009/02/17/static-vs-dynamic-scope/
+0

正確には、動的スコープと静的スコープとは何ですか?私は静的なスコープの実装が静的なチェーンの他にあるのか知っていますが、それはまだ最も広く使われています。 –

+0

サブプログラムの呼び出しごとに静的チェーンを変更して戻す必要があります。サブプログラム呼び出しで必要なアクションは複雑です。正しい親スコープはコンパイル時に容易に決定されますが、親スコープの最新のアクティベーションレコードインスタンスは、コール時に見つかる必要があります。 –

+0

スタティック・チェインが最も広く使用されていますが、スタティック・スコープは言語のスコープ・ルールに関連しています。静的スコープが悪いのはなぜですか?スタティックチェーンのボトムアップ(ベースARIから呼び出し元ARI)のスタックウォークは問題に貢献していませんか? – JFish222