我问这个是因为我对翻译开发比较陌生,我想在重新发明轮子之前先了解一些基本概念。
我想到了存储在数组中的所有变量的值,这些变量使得当前作用域在进入函数时,数组被交换并且原始数组被放置在某种堆栈上。离开函数时,弹出“范围堆栈”的顶部元素并再次使用。
答案 0 :(得分:2)
为什么要交换阵列?只需查看堆栈顶部的数组即可。此外,在大多数语言中,当您想要交换它时,您不必复制数组,只需交换引用或指针。
这也是口译员可能会做的事情。另一种方法是为当前作用域提供一个特殊的数据结构,该结构明确地保存对其父帧的引用。
答案 1 :(得分:0)
Python使用C堆栈来跟踪其范围。每次输入新的作用域时,都会进行一次新的函数调用,以便作用域的数据始终保存在堆栈的局部变量中。
对于其他一些口译员来说,一切都像你的建议一样保留在堆栈上。但是,解释器就位于堆栈顶部。因为只有一个副本,所以不需要来回复制。