LLVM 到底有多糟糕?

主要观点:LLVM 曾被视为很棒的东西,但如今一些语言项目抱怨其性能不佳且速度慢,正逐渐远离它,需探讨其真实情况。
关键信息

  • LLVM 如今是整个工具链,包括编译器后端、链接器等,大多语言项目仅用其后端和链接器,且多以 C++编写。
  • 速度问题上,未优化构建时 LLVM 代码生成和链接耗时超总编译时间 98%,比解析、词法分析和语义检查慢 2 个数量级。
  • 原因可能是其传统 C++面向对象设计导致大量堆分配,且使用 C++易引入低效模式。
  • 它存在文档不佳、是 C/C++后端导致部分代码生成不可靠和优化差、常有强制未定义行为等问题。
  • 替代方案如 Cranelift 等未提供完整解决方案且更慢,与 GCC 整合也不能解决问题,目前暂无可替代的完整后端。
  • 虽有缺点,但 LLVM 是经过充分测试的完整后端,能为语言开发者提供服务,开始时用它是个好主意。
    重要细节
  • Zig 是个例外,它使用整个 Clang 库。
  • 早期实验用 mimalloc 使 LLVM 运行时间提升 10%,说明内存分配是运行时成本的重要因素。
  • LLVM 有大量优化容器,但有时不用容器更高效。
  • 文档虽不比其他库差但仍可改进,因理解后端本身就难。
  • 一些替代方案虽有但不完整或更慢,目前暂无可替代 LLVM 的后端。
阅读 9
0 条评论