3

私はインタプリタ開発に比較的慣れていないので、車輪を再発明する前にいくつかの基本的な概念を知りたかったので、これを求めています。

現在のスコープを構成する配列に格納されているすべての変数の値を考えました。関数に入ると、配列が交換され、元の配列が何らかのスタックに置かれます。関数を終了すると、「スコープ スタック」の最上位要素が取り出され、再度使用されます。

  • これは基本的に正しいですか?
  • 配列の交換 (大量のデータを移動することを意味します) はそれほど遅くないため、最新のインタープリターでは使用されませんか?
4

2 に答える 2

2

アレイを交換する理由 スタックの一番上の配列を見てください。さらに、ほとんどの言語では、配列を交換するときに配列をコピーする必要はなく、参照またはポインターを交換するだけで済みます。

これは、通訳者が行うことでもあります。別の方法は、親フレームへの参照を明示的に保持する現在のスコープ用の特別なデータ構造を持つことです。

于 2010-05-25T14:45:53.083 に答える
0

Pythonは、Cスタックを使用してそのスコープを追跡します。新しいスコープが入力されるたびに、スコープのデータが常にスタック上のローカル変数に保持されるように、新しい関数呼び出しが行われます。

他の通訳者の場合、すべてがあなたの提案のようにスタックに保持されます。ただし、インタプリタはスタックの最上位でインプレースで動作します。コピーは1つしかないため、前後にコピーする必要はありません。

于 2010-05-27T06:32:13.967 に答える