LLVM + Clang 基础介绍
前置
首先我们需要了解一些编译器相关的前置基础知识 才比较好理解本文的内容
我前两天写的:编译器基础知识传送门
正式开始
什么是LLVM?
广义上 说 LLVM 是编译器工具链的合集 比如包含clang前端+llvm后端和其它的一些模块
狭义上 说的就是LLVM的后端
如果前端,后端 这些概念都看不懂,建议回到上面看一下基础知识
llvm的起源就不多说了,总结就是两位牛逼的大学生发起的,后面入职了apple又继续发扬光大的.
LLVM架构
说到这里我们最好先了解下其它(传统)编译器的结构,比如GCC
GCC基础知识传送门
GCC 架构
gcc 这种就是前后端没有分开,耦合度很高
要新增一种语言的支持,或者新的硬件设备会很困难
LLVM 架构
前后端分离了
由一个中间语言IR进行连接
新增一门语言的支持,只需要实现个新的前端
新增新的硬件设备的支持,只需要实现新的后端
Clang又是啥
看完上面的llvm 的架构图 应该也比较清楚了
它是llvm集合下面的一个c/c++/objc编译器的前端
它的作用不说了,前面传送门也讲了
设计的目的就代替gcc
它的优点很多,它和gcc的官方对比也很多
相比较于GCC,Clang具有如下优点:
1.编译速度快。在某些平台上,Clang的编译速度明显快过GCC。Debug模式下,Clang编译OC的速度比GCC快3倍。
2.占用内存少。Clang生成的AST(抽象语法树)所占用的内存是GCC的五分之一左右 。
3.模块化设计。Clang作为LLVM项目下的一个子项目,采用基于库的模块化设计,易于IDE的集成及其他用途的重用。
4.诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告 。
5.设计清晰简单,容易理解,易于扩展增强。
end
大家可以可以把我写的这几篇编译器相关的基础知识看一下
脑子里基本上就可以串起来了
我后续在写一些 cmake cmakefile cmakelist gn ninja 那些都是啥