[TOC]
1、LLVM是什么?
LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。
但是现在,LLVM所代表的基本和虚拟机没有关系了,也不再作为一个缩写使用了,而是直接作为一个名字使用。
那么LLVM到底是什么?
LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的。这是LLVM官方的解释。
原话是:
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
(官方定义永远是准确精练的)
LLVM是一个编译器;
LLVM是一个编译器框架;
LLVM是一系列的编译器工具;
LLVM是一个编译器工具链;
LLVM是一个C++实现的开源软件;
这几种对LLVM的理解都对,但是也都是LLVM的一个方面,综合起来就是一个完整的LLVM。
所以,从狭义上来说,可以把LLVM理解为一个编译器,但是这个编译器可不仅仅是个编译器,它包含了编译相关的各种工具链,并且有一些相对独立的工具,而且它还是开源的。关键一点LLVM是搞编译的,跟虚拟机已经完全没关系了。
2、Clang是什么?
Clang是一个C、C++、OC语言的轻量级编译器。
Clang由Apple公司开发,源代码授权使用BSD的开源授权。
Clang是由C++编写,基于LLVM,发布于LLVM BSD许可证下的编译器。
它与GNU C语言规范几乎完全兼容,并增加了额外的特性。
那么来比较一下Clang和GCC。
Clang编译速度更快,编译产出更小、出错提示更友好。
clang采用的是BSD协议,这是苹果资助LLVM、FreeBSD淘汰GCC换用Clang的重要原因。
Clang是LLVM的一个编译器前端。
由于优秀的设计,使得Clang非常适合用于开发源代码级别的分析工具。
Clang对源程序进行语法分析和语义分析,并将分析结果转换为Abstract Syntax Tree(抽象语法树),最后使用LLVM作为后端代码的生成器。
Clang的开发目标是提供一个可以替代GCC的前端编译器。
由于GNU编译器套装(GCC)系统庞大,而且Apple大量使用的OC在GCC中优先级较低,同时GCC作为一个纯粹的编译系统,与IDE配合并不优秀。