Abstract
从开始接触编译系统的学习已经快半年了,有些心得总结一下。
什么是编译系统?我想从两个角度谈一下:
首先从技术角度来讲,广义的编译系统负责将高级语言转换成为CPU可执行的二进制机器代码。编译系统包括编译器, 汇编器,静态/动态链接器,操作系统装载器以及运行库。
- 编译器: 是系统前半部分的核心,负责将源文件.c转换成为汇编文件.s。
- 汇编/链接/装载器:是系统后半部分的核心,主要是将.s转换为二进制ELF文件并进一步围绕ELF处理。
- 运行库:是操作系统层面用来支持高级语言运行环境比如内存池,标准API等的库文件。
然后从专业的角度来讲,我觉得可以分为系统层面和算法优化层面,系统层面主要是整个编译框架比如LLVM,核心是和操作系统交互的部分,这部分内容是编译器工程师的基本功,需要掌握细节。而算法优化层面指的是编译优化——编译器工程师的最理想的方向就是做优化,这一部分需要精通,从静态单赋值SSA等传统的静态分析优化到现在主流的深度学习推理引擎比如TVM等。
本文主要是对系统层面的学习,对系统层面的学习止步于对LLVM编译框架的使用和源代码阅读。