LLVM
理解
什么是LLVM
- LLVM项目是模块化、可重用的编译器以及工具链技术的集合
- 创始人就说Swift之父
- LLVM本身不是首字母缩略词,它是项目的全名
传统的编译器架构
-
GCC、LLVM、Clang
- 优化阶段是一个通用的阶段,它针对的是统一的LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改
4.相比之下,GCC的前端和后端没分得太开,前端后端耦合在了一起,所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,就会变得特别困难
5.LLVM现在被作为实现各种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)
Clang
什么是Clang
1.LLVM项目的一个子项目
2.基于LLVM架构的C/C++/Objective-C编译器前端
相比于GCC,Clang具有如下优点
1.编译速度快:在某些平台下,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GCC快3倍)
2.占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右
3.模块化设计: Clang采用基于库的模块化设计,易于IDE(开发工具)集成及其他用途的重用
4.诊断信息可读性强:在编译过程中,Clang创建并保留了大量详细的元数据,有利于调试和错误诊断
5.设计清晰简单,容易理解,易于扩展增强
IR–>Pass→IR属于中间代码,可以自己编写
Oc源文件的编译过程
词法分析
1.词法分析,生成Token:$ cla