LLVM和Clang
LLVM(Low Level Virtual Machine)是架构编译器的框架系统,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间。
宏观的LLVM,指整个LLVM框架,编译器为了解耦合将编译的过程分为前端和后端,编译器前端生成中间代码,编译器后端继续生成目标代码以及代码优化。LLVM框架支持很多的编译器前端和编译器后端。
微观的LLVM是实际开发过程中,包括实际使用过程中,划分出来的LLVM,从编译器的角度来讲,微观的LLVM是一个编译器的后端。
Clang是一个c/c++/objective-c的编译器前端,它只支持c/c++/objective-c三种c家族语言。Clang编译快速,占用内存少,代码质量高于gcc。
LLVM得到Apple和FreeBSD的大力支持
Apple看中LLVM能够摆脱GCC的束缚,Apple一直使用gcc作为官方的编译器。GCC作为开源世界的编译器标准一直做得非常不错,但Apple对编译工具会提出更高的要求。一方面,Apple对objective-c语言(甚至后来对c语言)新增了很多特性,但GCC开发者并不买Apple的帐——不给实现;另一方面,gcc的代码耦合度太高,不好独立,而且越是后期的版本,代码质量越差,但Apple想做的很多功能(比如更好的IDE支持)需要模块化的方式来调用GCC,但是GCC一直不给做。
而FreeBSD主要不满意GCC的代码品质(BSD代码质量整体比GNU要高),更重要的是协议问题。BSD开发者有洁癖的居多,大多数都不喜欢GPL代码,尤其是GPL协议第三版发布时,和FreeBSD的协议甚至是冲突的。