llvm 背后的整个想法对我来说似乎很有趣,我很想看看它的表现如何。如果工具还没有准备好投入生产,我只是不想浪费大量时间来试用这些工具。
如果您有使用这些工具的经验,您如何看待它们?您遇到了哪些主要限制?最大的好处是什么?
非常感谢!
关于 LLVM,我不能说太多好话。与我看过的其他编译器项目相比,它非常容易使用。我不是编译器专家,但是当我对 LLVM 或 clang 的某些限制感到沮丧时,通常很容易潜入并更改它。
我们(Nate Begeman、我自己和其他一些人)在编译器设计方面没有实际经验的情况下编写了 PPC 后端,但它看起来很简单,非专家也可以接近它。我们对 PPC 组装非常熟悉,但是我们在空闲时间的几周内设法让 LLVM-gcc 输出 PPC 代码仍然令人难以置信。绝对是我编译过的最令人满意的 Hello World 之一。
我已经断断续续地玩 LLVM 好几个月了。我写了两篇关于从OCaml编程语言中使用 LLVM 的OCaml Journal文章。这一点特别有趣,因为 OCaml 语言非常适合编写编译器,并且拥有大量强大且成熟的工具和库用于解析等。
总的来说,我的经历非常积极。LLVM 做到了它在锡上所说的,并且非常易于使用。生成的代码的性能非常好。我编写的程序之一是一个简单的小 Brainf*ck 编译器,它可以生成我测试过的任何编译器(包括 GCC)中最快的可执行文件。
我对 LLVM 只有两个不满。首先,它在出现任何问题时使用 abort() 而不是引发异常。这是其作者的一个深思熟虑的设计决定,他们正在努力从 LLVM 中删除所有异常使用,但是当尝试调试使用 LLVM 的编译器时,它使得不可能从 OCaml 获得回溯:你的程序只是死于来自 LLVM 的文本解释但不知道您的源中发生错误的位置。其次,LLVM 的编译库非常大(20Mb)。我认为这是由于 C++ 引起的膨胀,但它使编译非常缓慢。
编辑:我在 LLVM 上的工作最终导致创建了一个高性能的高级垃圾收集虚拟机。在此处免费下载并查看相应的基准测试(哇!)。@Alex:我会尽快在某个地方为您准备好那个 BF 编译器。
我对 LLVM 进行了初步尝试,完成本教程后,我对它的潜力感到非常兴奋;我可以使用它相对轻松地将 JIT 构建到应用程序中的想法让我很兴奋。
我还没有深入到能够就其局限性、稳定性、性能等提供任何有用的意见。我知道这在所有方面都很好,但这纯粹是道听途说。
您询问了工具,我想提一下 Eclipse CDT(适用于 Windows、Linux 和 Mac)的 LLVM 插件。它将 LLVM 很好地集成到 IDE 中,用户不需要了解有关 LLVM 的任何信息。按下构建按钮就足以生成 .bc 和可执行文件(以及用户不可见的后台中间文件)。
最新版本可通过官方 Eclipse 更新站点获得:http: //download.eclipse.org/releases/mars
它在 Programming Languages 下,被命名为“C/C++ LLVM-Family Compiler Build Support”。