有什么影响
- 可移植性(调用约定:仅调用 C 或 OS 库函数时,在 LLVM 级别上是否真的很重要)
- 链接时间
- 优化
我想用 LLVM 编译一种玩具语言,因为所有困难的部分都已经存在(优化、目标代码生成),但是如果值得的话,我想保留一个概念:库文件应该是可再发行,可用作静态和共享库(用于链接,在共享情况下,链接最终应用程序时将生成真实的 so 或 dll),可移植的 . 我相信这会减少部分编译时间(因为本机代码生成和优化可能只在最终二进制链接时间完成一次)。我设想链接器负责调用约定(如果可能)并在请求时转换为共享库。在一个牵强附会的补充中,也许可以利用 LLVM 来避免链接,并使用 LLVM JIT 直接运行生成的字节码,完全消除编写代码时的链接时间。
这听起来
- 可行吗?
- 值得?我知道 C/C++ 链接时间比较长,这在频繁重建时会出现问题。自由链接时间优化怎么样(cfr
/GL
,-flto
因为它本质上是将 LLVM 字节码链接在一起,然后将其转换为本机二进制文件)。
这可能是一个模糊的问题,如果我必须澄清一些事情,请询问。