【发布时间】:2014-07-12 04:20:24
【问题描述】:
据我了解,JIT(即时编译)是指run-time 过程,其中字节码被编译(翻译)为本机代码以提高运行时性能。
另一方面,编译时评估是通用编程或运行时优化的常见做法。同样,据我了解,在这种情况下,编译器解释源代码以评估表达式(产生例如值或类型)。在这种情况下,编译时间通常会显着增加。
是否有一个编译时 JIT 过程,其中编译器将源代码转换为本机代码以实现更有效的编译时评估?我觉得这很自然,但是任何编译器都可以用任何语言做到这一点吗?
如果我要在自己的编译器中执行此操作,会不会是个好主意?与运行时 JIT 相比,我会遇到哪些额外困难?
【问题讨论】:
-
您的意思是提前将字节码编译为原生?如果是这样,互联网上有很多程序可以做到这一点。因为“编译时 JIT”没有意义。 “编译时间”是“在用户运行它之前”。并且“JIT”是“作为/在用户开始运行它之后”。真的不可能有混血儿。在用户启动代码之前或之后/之后进行编译。
-
哦等等,你的意思是编译器在哪里生成本地代码,然后在静态编译期间执行本地代码?我希望 C++
constexpr完全适用于这个概念,尽管我怀疑 C++ 中的其他任何东西。 C++ 中常量和类型的编译时评估通常不是执行“代码”,而是“在表中查找内容”。 (我显然会 C++,不会说其他语言) -
@MooingDuck 是的,我的意思是你在第二条评论中所说的。 C++
constexpr在编译时进行所有评估,但我不知道如何。我读到 D 通过解释代码来做到这一点,这比运行本机代码慢 1-2 个数量级。只是测量编译时间(clang 或特别是 gcc),我不认为 C++ 在实践中做得更好。
标签: compiler-construction code-generation jit native-code compile-time