LLVM集成编译环境

LLVM编译环境是C、Objective-C和C++的编译工具集,为面向C或基于C的语言提供新一代高效易用的虚拟机环境。LLVM起源于2000年伊利诺伊大学发起的开源项目,起先主要在学术研究领域应用。在2005年,Apple为LLVM提供了人员支持以帮助其发展,并保持LLVM与Xcode良好的兼容性,使其成为一个开发者易于使用的编译器。

相比较传统的GCC工具,LLVM的设计秉承了更为现代的模块化思想。LLVM为开发者提供了中间代码和编译基础设施,并能与IDE紧密交互和集成,作为IDE的底层支撑基础,为代码补全、重构等功能提供辅助,同时在程序编译、连接、运行环境执行过程中实现全新的编译优化策略。值得一提的是,LLVM还提供了很多编译器以外的辅助工具,如对代码进行静态检查并生成HTML格式的分析报告等。

在程序编译过程中,GCC完成了从预处理到代码生成的整个过程,其封装式的设计使得很多中间信息无法被其他程序重用。而Clang将编译过程分隔成模块化的阶段,以大幅度增强开发者对于代码的操控能力。Clang的设计目标之一就是要超越GCC编译器,在Clang官方站点的性能比较栏目中,列举了Clang与GCC、Elsa以及Portable C的各项比较优势

在LLVM 2.7版本之前,LLVM支持C和Objective-C编译,在LLVM 2.7版本发布时引入了对于C++的支持。LLVM的编译器由Clang完成,Clang在编译速度方面非常高效,体现在包括预处理、语法解析、语义分析、抽象语法树生成的各个编译步骤之中。同时Clang在内存占用方面的开销非常经济,较之GCC有大幅度的缩减。与GCC相比,Clang的设计清晰简单、易于理解,具备良好的扩展性,同时能够保持与GCC 的兼容性。Clang为程序诊断信息提供了非常好的版式结构,为程序语法错误提供了源码提示,以及上下文调用的错误提示。

在最新发布的LLVM 2.8版本中,增加了C++标准库实现LibC++。在C++标准符合性以及高效代码生成方面,LibC++库有很强的优势。新版本LLVM中还包含了新一代高性能调试器LLDB,LLDB使用与LLVM编译器相同的解析器和源代码工具,以替代先前的GDB调试器。

来自伊利诺伊大学香槟分校的Vikram,同时也是LLVM开发者Chris Lattner的导师,在代码生成和优化大会CGO 2009上的主题演讲《下一代编译器设想》中谈到:下一代编译器、优化器和运行时的基础架构将更注重在静态语言中应用实时编译和动态优化技术,并且编译器将借助更为灵巧的自动调优策略来挖掘程序优化潜能,同时编译器将会采用投机优化的方式来弥补静态分析优化的不足之处。LLVM项目已经在为下一代编译器的实现方向做出努力,这个致力于超越GCC的新一代编译环境,必将为程序编译注入新的动力。

本文曾发表于《程序员》杂志-2010年11期-“程序天下事”栏目。