主要观点:LLVM 曾被视为很棒的东西,但如今一些语言项目抱怨其性能不佳且速度慢,正逐渐远离它,需探讨其真实情况。
关键信息:
- LLVM 如今是整个工具链,包括编译器后端、链接器等,大多语言项目仅用其后端和链接器,且多以 C++编写。
- 速度问题上,未优化构建时 LLVM 代码生成和链接耗时超总编译时间 98%,比解析、词法分析和语义检查慢 2 个数量级。
- 原因可能是其传统 C++面向对象设计导致大量堆分配,且使用 C++易引入低效模式。
- 它存在文档不佳、是 C/C++后端导致部分代码生成不可靠和优化差、常有强制未定义行为等问题。
- 替代方案如 Cranelift 等未提供完整解决方案且更慢,与 GCC 整合也不能解决问题,目前暂无可替代的完整后端。
- 虽有缺点,但 LLVM 是经过充分测试的完整后端,能为语言开发者提供服务,开始时用它是个好主意。
重要细节: - Zig 是个例外,它使用整个 Clang 库。
- 早期实验用 mimalloc 使 LLVM 运行时间提升 10%,说明内存分配是运行时成本的重要因素。
- LLVM 有大量优化容器,但有时不用容器更高效。
- 文档虽不比其他库差但仍可改进,因理解后端本身就难。
- 一些替代方案虽有但不完整或更慢,目前暂无可替代 LLVM 的后端。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。