eval和exec的等价物是否可以用编译语言存在?如果是这样,他们将如何编译(粗略地说)?
答案 0 :(得分:5)
当然,各种Lisp环境已经具备了数十年的这种能力。 Lisp编译器通常基于每个函数工作,编译器和运行时系统同时工作。
当被问到eval
时,Lisp运行时环境会将列表(数据结构)传递给编译器进行编译。编译器可能会生成机器代码(或者可能是字节码,具体取决于系统),然后该函数可以在机器级调用,就像程序中的其他所有函数一样。
答案 1 :(得分:5)
对于初学者来说,python 是一种编译语言,它只是在运行时进行编译。话虽这么说,在任何其他编译语言中实现eval
所需要做的就是能够运行编译器(并动态加载目标代码) - 你可以用Python(以及一连串的其他语言)来实现语言)很容易,因为编译器是运行时的一个组成部分。从技术上讲,没有什么可以阻止用C编写的程序调用编译器并在运行时加载结果(使用dlopen
),这不常见,因为C运行时不需要编译器,所以大多数用户不要没有。