【发布时间】:2021-10-31 09:50:44
【问题描述】:
我们以一些简单的 pyhton 代码为例:
var = 10
print(var)
我想知道这里的var 何时以及如何被声明和引用。我目前正在使用 C++ 编写我自己的受 Lisp 启发的脚本语言,这将是等效代码:
(def var 10)
(print var)
该语言分为三部分:tokenizer、“compiler”和executor。
这里的(def var 10) 更像是一个“编译”时间构造,它使用“var”键值对虚拟机放置一个新变量。在此之后,(def...) 函数被转换为一个初始化器,在 execution 阶段执行时重新初始化其变量。 (print var) 然后将指向“var”的指针置于其参数列表中,作为 编译 的一部分,它再次在 执行 阶段执行。基本上在编译结束时,执行具有所有数据集,不需要额外的“运行时”搜索即可获得所需的数据。
所以实际上(def...) 不参与实际执行阶段,而只是编译。这会导致结构有点不一致,因为所有其他功能都是在执行时执行的。
其他解释语言如何解决这个问题? python 会在运行时到达var = 10 时声明“var”,然后在执行print(var) 时动态定位并绑定指向“var”的指针吗?以这种方式建立变量声明有什么好处,或者由于减少了语言运行时搜索,是否应该接受设计不一致以提高性能?
【问题讨论】:
-
这个问题可能更适合softwareengineering.stackexchange.com而不是堆栈溢出
-
谢谢,我会在那里发帖
标签: python variables scripting compilation