如果编译Python的exec和eval?

时间:2011-01-06 03:03:41

标签: python compilation eval exec

eval和exec的等价物是否可以用编译语言存在?如果是这样,他们将如何编译(粗略地说)?

2 个答案:

答案 0 :(得分:5)

当然,各种Lisp环境已经具备了数十年的这种能力。 Lisp编译器通常基于每个函数工作,编译器和运行时系统同时工作。

当被问到eval时,Lisp运行时环境会将列表(数据结构)传递给编译器进行编译。编译器可能会生成机器代码(或者可能是字节码,具体取决于系统),然后该函数可以在机器级调用,就像程序中的其他所有函数一样。

答案 1 :(得分:5)

对于初学者来说,python 一种编译语言,它只是在运行时进行编译。话虽这么说,在任何其他编译语言中实现eval所需要做的就是能够运行编译器(并动态加载目标代码) - 你可以用Python(以及一连串的其他语言)来实现语言)很容易,因为编译器是运行时的一个组成部分。从技术上讲,没有什么可以阻止用C编写的程序调用编译器并在运行时加载结果(使用dlopen),这不常见,因为C运行时不需要编译器,所以大多数用户不要没有。