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
的名字可能会误导初学者,看到这样的名字,一般人会联系到虚拟机
,但事实上, 它不是虚拟机
,只是它的架构参考了虚拟机
,它其实是一个编译系统
,或者称为编译工具链
。
在做架构设计
的时候,有很多的模式
,常用的一个思想就是分治法
,分层
、分阶段
等方法都是分治法
思想的体现。分治法
思想在日常生活中也是使用最多的一种思想。
LLVM
把一个大的编译系统
拆分成很多个组件(component
), 每个组件(component
)都独立实现,对应一个子项目
。
组件 | LLVM | GCC |
---|---|---|
后端 | LLVM-Core | GCC |
前端 | Clang | GCC |
辅助工具 | clang-tools-extra | GNU BinUtils |
链接器 | LLD | GNU ld |
调试器 | LLDB | GDB |
libc++ | libc++ | libstdc++ |
LLVM
与GCC相比,前者明显更具有设计感
。 当然,这是因为LLVM
是后出现的,它看到了GCC没有将前端
和后端
进行分离,导致它难以扩展的问题才这样设计的。
从LLVM
与GCC的对比中,我们可以看出一个良好设计的系统带来的易扩展性
。 一个缺乏良好设计的系统,随着需求的增加只能进行小心翼翼的修补,他会逐渐被抛弃,因为修修补补的工作实在太难了,可能还无法有产出。
在实际工作中,有一些人就是实际派
,不做设计,只要做出结果来就行,这是很危险的。还有一些人比较热衷于设计,无论大小都会进行设计,甚至被称为过度设计
。 其实,是否过度设计这个很难说,毕竟,所有的设计都是基于将来的易扩展性
作出的假设,如果你的项目没有将来
, 那么在将来
未到达之前说他是过度设计的
,这确实是事实,但是如果真到了将来
,它就不是过度设计
了。