LLVM的最大优势是什么?

45

有没有人使用 LLVMllvm-gcc 或者 Clang?与其它编译器相比,LLVM 的整体思想非常引人注目,我很想看看它的性能表现如何。但如果这些工具还不适用于生产环境,我就不想浪费太多时间去尝试。

如果你有使用过这些工具的经验,请问你对它们的评价如何?你遇到了哪些主要限制?最大的好处是什么?

非常感谢!


1
我已经撰写了以下文件,讨论了LLVM的好处。http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf - Petri Tuononen
4个回答

40

我无法充分赞扬LLVM。与我看过的其他编译器项目相比,它非常容易使用。虽然我不是编译器专家,但当我对LLVM或clang的某些限制感到沮丧时,通常很容易深入研究并进行更改。

我(Nate Begeman、我自己和其他几个人)没有真正的编译器设计经验,但我们用几周的业余时间编写了PPC后端,因为它看起来足够简单,即使非专家也可以接近。我们对PPC汇编语言相当熟悉,但我们仍然惊讶于我们能在几周的空闲时间内让LLVM-gcc输出PPC代码。这绝对是我编译的最令人满意的Hello World之一。


25

我已经玩弄LLVM很长时间了。我写了两篇OCaml Journal文章,介绍如何使用OCaml编程语言来使用LLVM。这非常有趣,因为OCaml语言非常适合编写编译器,并且具有许多强大而成熟的用于解析等操作的工具和库。

总体而言,我的经验非常积极。LLVM做到了它所说的,并且非常易于使用。生成代码的性能非常优秀。我写的其中一个程序是一个简单的Brainf\*ck编译器,它生成的可执行文件比我测试过的任何编译器都要快(包括GCC)。

我只有两个抱怨LLVM的地方。首先,每当出现问题时,它都会使用abort()而不是引发异常。这是其作者有意设计的决策,他们正在努力删除LLVM中所有的异常使用,但这使得在尝试调试使用LLVM的编译器时,无法从OCaml中获取回溯:您的程序只会以文本说明从LLVM中死亡,但无法知道错误发生在源代码的哪个位置。其次,LLVM的编译库非常庞大(20Mb)。我认为这是由于C++所导致的膨胀,但它使得编译过程非常缓慢。

编辑:我的LLVM工作最终在创建高性能、高级别垃圾收集虚拟机中达到高潮。可免费下载此处并查看相应的基准测试(哇!)。@Alex:我将尽快在某个地方上传那个BF编译器。


2
你能发布BF编译器吗?我写了一个BF->C翻译器,我认为在单次遍历中它是最好的,而且llvm-gcc在非常大的程序中表现得很差。虽然他们有点不公平。 - alex strange

21

我已经初步尝试了LLVM,并通过this tutorial进行了一些工作,这让我对它的潜力非常兴奋;我可以相对轻松地将其用于构建应用程序中的JIT,这让我感到非常兴奋。

我还没有深入研究它的限制、稳定性、性能等方面,因此无法提供任何有用的意见。我知道它在所有方面都很好,但这纯粹是道听途说。


2
你询问了有关工具的问题,我想提到的是,LLVM插件适用于Eclipse CDT(适用于Windows、Linux和Mac)。它将LLVM与IDE很好地集成在一起,用户不需要了解LLVM。只需按下构建按钮即可生成.bc和可执行文件(以及后台不可见的中间文件)。
最新版本可通过官方Eclipse更新站点获得:http://download.eclipse.org/releases/mars 它位于“编程语言”下,名称为“C/C++ LLVM-Family Compiler Build Support”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接