c++ - 为什么编译语言不能有 "eval"函数?

标签 c++ c compilation eval

<分区>

昨天我开始和我的一个 friend 讨论这个问题。他习惯于使用具有 eval 函数的解释型语言(AS3、PHP)进行编码,而我习惯于使用编译型语言(例如 C++)。 然后,我试图向他解释,在编译语言中拥有 eval 功能是不可能的,因为 native 代码对其源代码一无所知(变量、语法、反射(在 C/C++ 的情况下)等等)和那样的话,你就不能让任何函数在不编译的情况下实时执行源代码(而要编译它,你需要其余的源代码,所以这是不可能的)。

你怎么看?这个论点够扎实吗?你会给出任何其他论据来争论为什么编译语言不能具有 eval 功能吗? (请不要发布支持或反对 eval 想法的东西)。

最佳答案

编译型语言可以有eval,但二进制文件也需要包含或可以访问编译器。

如果 evaled 代码要与编译后的代码交互,那么二进制文件中的一些注释(例如变量名、类名、函数名、类型)是必要的。 Java .class 文件是一个很好的例子,其中仍然可以仅从编译代码中收集大量信息。

关于c++ - 为什么编译语言不能有 "eval"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710387/

相关文章:

c++ - 具有类型转换的多态复制构造函数

C++ 通过引用传递与类中的指针

c++ - 如何初始化这个具有两个类似替代方案的 std::variant 数据成员?

创建我自己的计算器但程序不起作用

c++ - 逻辑/关系表达式优化

go - 无法编译 Go 文件 - "initialization failure...xxxx redeclared in this block"

c++ - 有什么方法可以优化c++字符串+ =运算符?

c - 通过重叠 IO 的异步命名 Windows 管道通信

C++ 分发具有依赖关系的程序

compilation - 使用 Clozure Common Lisp 编译二进制文件