LLVM的最大好处是什么
What are the greatest benefits of LLVM?
有人有LLVM、LLVM gcc或Clang的经验吗?
llvm背后的整个想法对我来说似乎很有趣,我很想看看它的表现。如果工具还没有准备好投入生产,我只是不想浪费大量时间来尝试这些工具。
如果你有使用这些工具的经验,你觉得它们怎么样?您遇到了哪些主要限制?最大的好处是什么?
非常感谢!
关于LLVM,我说得再好也不为过。与我看过的其他编译器项目相比,它很容易使用。我不是一个编译器爱好者,但当我对LLVM或clang的某些限制感到沮丧时,通常很容易深入并更改它。
我们(Nate Begeman,我自己和其他一些人)在没有编译器设计经验的情况下编写了PPC后端,但它看起来足够简单,非专家可以使用它。我们非常熟悉PPC汇编,但仍然非常令人难以置信的是,我们在几周的业余时间内成功地让LLVM gcc输出PPC代码。绝对是我整理过的最令人满意的Hello World之一。
我已经断断续续地玩LLVM好几个月了。我写了两篇OCaml Journal文章,介绍了OCaml编程语言中LLVM的使用。这一点特别有趣,因为OCaml语言是编写编译器的理想选择,并且有大量强大而成熟的工具和库用于解析等
总的来说,我的经历非常积极。LLVM做到了它在锡上说的,并且非常容易使用。生成的代码的性能非常出色。我写的一个程序是一个简单的Brainf*ck小编译器,它可以生成我测试过的任何编译器中最快的可执行文件(包括GCC)。
我对LLVM只有两个不满。首先,每当出现任何问题时,它都会使用abort(),而不是引发异常。这是其作者深思熟虑的设计决定,他们正努力从LLVM中删除所有异常的使用,但这使得在尝试调试使用LLVM的编译器时无法从OCaml获得回溯:您的程序只会随着LLVM的文本解释而消亡,但不知道错误发生在源代码中的位置。其次,LLVM的编译库非常大(20Mb)。我认为这是由于C++引起的膨胀,但它使编译非常缓慢。
编辑:我在LLVM上的工作最终创建了一个高性能的高级垃圾收集虚拟机。在这里免费下载并查看相应的基准测试(哇!)@亚历克斯:我会尽快给你找个BF编译器。
我已经初步了解了LLVM,完成本教程让我对它的潜力感到非常兴奋;我可以用它相对轻松地在应用程序中构建JIT,这让我很兴奋。
我还没有深入到能够就它的局限性、稳定性、性能等提供任何有用的意见。我知道这在所有方面都很好,但那纯粹是道听途说。
您询问了有关工具的问题,我想提到的是,有适用于Eclipse CDT(适用于Windows、Linux和Mac)的LLVM插件。它很好地将LLVM集成到IDE中,用户不需要了解LLVM的任何信息。按下build按钮就足以生成.bc和可执行文件(以及用户不可见的后台中间文件)。
最新版本可通过官方Eclipse更新网站获得:http://download.eclipse.org/releases/mars
它在编程语言下,被命名为"C/C++LLVM系列编译器构建支持"。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么