BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

LLVM 2.8发布

| 作者 Alex Blewitt 关注 4 他的粉丝 ,译者 李明(nasi) 关注 0 他的粉丝 发布于 2010年10月16日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

LLVM团队昨日发布了LLVM 2.8,包括下一代C/C++编译器、优化器和运行时的低级虚拟机基础架构。

LLVM实际上是一群项目的集合,能够支持C、Objective-C和C++的编译。编译本身是由Clang来完成的,它早就可以编译C和Objective-C了。在LLVM 2.7时引入了对C++的支持,而后2.8的发布则是对C++规范的支持的更为完整,新增的libc++让C++应用得以使用标准库。全新的调试器LLDB也包含其中,它应用和编译器相同的解析器和源代码工具,目的是为了替代旧有的gdb调试器。尽管LLDB早前已经可以下载使用了,这次LLVM 2.8中的LLDB却是其首次正式发布。

和基于GPL授权的单一编译器GCC不同的是,LLVM工具族更为模块化。而且得益于更为宽松的BSD授权,LLVM可以嵌入在商业工具中。因此,像苹果的Xcode这样的应用,在Clang的支持下能够比外部gcc应用的性能更好。不仅如此,工具生成的AST还可以由所包含的工具进行自省,这给予了IDE更为强大的能力,来了解源代码的相关结构和编译码。

另外,模块化的架构使得Clang的静态分析器可以纵观源代码并指出潜在的bug,比如Klee,它是一个符号化虚拟机,可以在一个程序之中给出事件发生的次序。Klee的特性之一便是通过事件寻找bug,它能够通过编程生成一个测试用例,而这个用例便可以用来演示bug被修正后的状态变化。

不仅是C语言

最终,LLVM项目不仅是面向C或基于C的语言。因为前端解析器其实是符号化指令集,这种指令集实质上是一组可移植的汇编码,能够翻译到任何支持的机器架构之上。这使得构建其他的解析器和翻译器成为可能,只需生成相同的汇编码,便可支持所有LLVM族支持的平台。

不仅如此,优化的工作可以深入到汇编码级别,而非仅是在源代码级别,因此任何能够翻译成LLVM IR的语言都能够自然而然地享受到运行时优化的好处。运行时可以直接解释IR,所以解释型语言也可以受益于此,根据接下来对JIT的调用来优化应用对应的部分。

目前VMKit已经在这样做了,它提供了JVM和CLR的通用运行时,其他语言运行时也有所涉及。Mono运行时现在已经发布了2.8版本,包含了对LLVM的支持,将其作为JIT(使用mono-llvm)来辅助运行时优化。其他运行时包括Ruby on LLVMMacRubyUnladen Swallow等。甚至在Clam AV内部也用到了它,来实现高效的病毒扫描。

你可以通过试用基于web的演示,来观察代码是如何编译成LLVM IR的,或通过查看LLVM博客文档来获取更多的信息。

查看英文原文:LLVM 2.8 Released

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

优势? by Java 陈

有谁知道这个和gcc比较,有什么优势?

Re: 优势? by Nathan Li

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT