2010-05-25 45 views
3

我在問這個,因爲我對解釋器開發比較陌生,在重新開發之前我想知道一些基本概念。解釋器如何切換範圍?

我認爲存儲在數組中,這使得目前的範圍,在進入該陣列被交換的功能和原始陣列放在某種堆疊的所有變量的值的。當離開功能時,「範圍堆棧」的頂層元素被彈出並再次使用。

  • 這是基本上是正確的?
  • 不交換數組(這意味着移動大量數據)不是很慢,因此現代解釋器不使用它們嗎?
+0

它不需要涉及移動大量的數據;你的棧可能只包含一個引用(指針)到數組,而不是它的全部內容。 – 2010-05-25 14:47:15

回答

2

爲什麼交換陣列?只要看看堆棧頂部的數組。此外,在大多數語言中,當您想要交換數組時,您不必複製數組,只需交換引用或指針即可。

這也是一個解釋可以做什麼。另一種方法是爲當前範圍提供一個特殊的數據結構,該結構明確地包含對其父框架的引用。

0

Python使用C堆棧跟蹤它的範圍。每次進入一個新的作用域時,都會進行一個新的函數調用,以便作用域的數據始終保存在堆棧的局部變量中。

對於一些其他的解釋,所有事情都保持在棧上像你的建議。然而,解釋器就地在棧頂進行操作。由於只有一個副本,所以不需要複製事物。