http://www.aosabook.org/en/llvm.htmlhttp://llvm.org/文中缩写定义在这里查找http://llvm.org/docs/Lexicon.html#the-llvm-lexicon
传统的编译器对代码编译分为三个部分,前端,优化器和后端;
前端用于对具体语言进行编译;优化器对前端生成的中间代码进行一般性的优化;后端针对不同的硬件平台将中间代码生成机器码。
在这个中间,其实前端和优化器是可以(也应该是)不变的,后端根据硬件选择对应的代码生成器。
LLVM的架构:前端,优化器和后端不同的地方在于作为项目初始的优化器和后端都针对一种统一的中间格式,也就是说所有的语言要使用LLVM都必须把自己编程程由LLVM定义的中间代码,成为LLVMIR。优化器对前端生成的LLVM IR进行优化,之后针对不同的平台生成代码。LLVM提供一个良好的接口使得可以自己创作语言,编写前端,并使用LLVM的后端进行编译。
LLVM一些著名的项目:
LLVM Core libraries :提供代码目标分离的优化器和针对多种不同cpu的代码生成器。Clang : LLVM的 C/C++/Objective-C代码编译器,提供快速编译(在debug模式下编译OC的时候比GCC快3+倍)。提供精确的错误和警告消息,provide a platform for building great source level toolsClang Static Analyzer :自动找到代码中的bug是使用CLang作为lib解析C/C++代码,搭建一系列工具的一个极好的例子
dragonegg :结合了LLVM的代码优化器与代码生成器。使得编译所有GCC前端支持的语言成为可能。
LLDB :使用LLVM和CLang提供一个本地的调试器。使用CLang ASTs 和 CLang expressionparser, LLVM JIT, LLVM disassembler等。比GDB在加载符号的时候省内存
![LLVM原理与overview apple llvm 8.0](http://img.aihuau.com/images/02111102/02013341t01172cfc211754ac62.jpg)
libc++ and libc++ ABI : 提供对C++标准库的实现,完整支持C++'0x.