理论上和/或实际上是否可以将本机 c++ 编译成某种中间语言,然后在运行时编译?
同样,“便携式”是用来表示这一点的术语吗?
LLVM是一种编译器基础结构,它解析 C++ 代码,将其转换为一种称为 LLVM IR(IR 代表中间表示)的中间语言,它看起来像高级汇编语言。它是一种独立于机器的语言。产生 IR 是一个阶段。在下一阶段,它通过各种优化器(称为pass)。然后到达发出机器代码(即机器相关代码)的第三阶段。
它是基于模块的设计;一相(模块)的输出成为另一相的输入。您可以将 IR 保存在磁盘上,以便稍后可以恢复剩余阶段,也许在完全不同的机器上!
所以你可以生成 IR,然后在运行时做剩下的事情?我自己没有这样做,但 LLVM 似乎很有希望。
这是 LLVM IR 的文档:
Stackoverlow 上的这个话题似乎很有趣,正如它所说,
- LLVM 优势:
- JIT - 您可以动态编译和运行代码。
这些文章很好读:
LLVM 的设计(在 drdobs.com 上)