LLVM
1.1、LLVM简介
short for:Low Level Virtual Machine
是什么 ?:a collection of modular and reusable compiler and toolchain technologies.
开发语言:C++
官方主页:http://llvm.org
源码仓库:https://github.com/llvm/llvm-project

LLVM的名字可能会误导初学者,看到这样的名字,一般人会联系到虚拟机,但事实上, 它不是虚拟机,只是它的架构参考了虚拟机,它其实是一个编译系统,或者称为编译工具链

1.2、LLVM的架构

在做架构设计的时候,有很多的模式,常用的一个思想就是分治法分层分阶段等方法都是分治法思想的体现。分治法思想在日常生活中也是使用最多的一种思想。

LLVM把一个大的编译系统拆分成很多个组件(component), 每个组件(component)都独立实现,对应一个子项目

组件LLVMGCC
后端LLVM-CoreGCC
前端ClangGCC
辅助工具clang-tools-extraGNU BinUtils
链接器LLDGNU ld
调试器LLDBGDB
libc++libc++libstdc++

LLVMGCC相比,前者明显更具有设计感。 当然,这是因为LLVM是后出现的,它看到了GCC没有将前端后端进行分离,导致它难以扩展的问题才这样设计的。

LLVMGCC的对比中,我们可以看出一个良好设计的系统带来的易扩展性。 一个缺乏良好设计的系统,随着需求的增加只能进行小心翼翼的修补,他会逐渐被抛弃,因为修修补补的工作实在太难了,可能还无法有产出。

在实际工作中,有一些人就是实际派,不做设计,只要做出结果来就行,这是很危险的。还有一些人比较热衷于设计,无论大小都会进行设计,甚至被称为过度设计。 其实,是否过度设计这个很难说,毕竟,所有的设计都是基于将来的易扩展性作出的假设,如果你的项目没有将来, 那么在将来未到达之前说他是过度设计的,这确实是事实,但是如果真到了将来,它就不是过度设计了。

注意:LLVM官方提供的架构图中并没有划分出中端,我这里单独划出的中端LLVM官方的架构中归在后端中的,华为方舟编译器是把优化器相关内容独立成中端的。

GCCLLVM再到华为方舟编译器,后者都是站在前者的基础上进行优化,以适应不断变化的新需求。