2010-05-25 59 views
3

我在问这个,因为我对解释器开发比较陌生,在重新开发之前我想知道一些基本概念。解释器如何切换范围?

我认为存储在数组中,这使得目前的范围,在进入该阵列被交换的功能和原始阵列放在某种堆叠的所有变量的值的。当离开功能时,“范围堆栈”的顶层元素被弹出并再次使用。

  • 这是基本上是正确的?
  • 不交换数组(这意味着移动大量数据)不是很慢,因此现代解释器不使用它们吗?
+0

它不需要涉及移动大量的数据;你的栈可能只包含一个引用(指针)到数组,而不是它的全部内容。 – 2010-05-25 14:47:15

回答

2

为什么交换阵列?只要看看堆栈顶部的数组。此外,在大多数语言中,当您想要交换数组时,您不必复制数组,只需交换引用或指针即可。

这也是一个解释可以做什么。另一种方法是为当前范围提供一个特殊的数据结构,该结构明确地包含对其父框架的引用。

0

Python使用C堆栈跟踪它的范围。每次进入一个新的作用域时,都会进行一个新的函数调用,以便作用域的数据始终保存在堆栈的局部变量中。

对于一些其他的解释,所有事情都保持在栈上像你的建议。然而,解释器就地在栈顶进行操作。由于只有一个副本,所以不需要复制事物。