假设有人想使用LLVM静态编译某种语言,使用CLang将其先翻译为C然后再进行IR翻译,与直接进行IR翻译相比,最大的区别(优点和缺点)是什么?
显而易见的答案是,通过使用了解源语言的前端,可以更轻松地生成优化的IR表示形式,而不是期望CLang能够很好地处理生成的C代码。
这里还需要补充什么吗?
显而易见的答案是,通过使用了解源语言的前端,可以更轻松地生成优化的IR表示形式,而不是期望CLang能够很好地处理生成的C代码。
这里还需要补充什么吗?
使用通用的C后端的优点:
缺点包括:
gcc
等。没有它,裸的LLVM可以自行使用,依赖项可以保持自包含。在大多数情况下,优化不是问题。Clang故意生成非常不优化的LLVM IR。LLVM应该处理所有优化,而不是前端。当然,除非您可以进行一些高级优化,但这些优化不会取决于您选择的后端。
Clang
需要从gcc
获取crtbegin.o
、crtend.o
等文件,以及一些头文件。 - SK-logicclang
软件包的依赖关系,它在这里引用了gcc
及其一些内部库(Fedora 18)。但我也会看看MacOS,苹果对GPL过敏,因此可能有一种无需GCC的构建方式。 - vonbrand