深入理解LLVM:代码生成
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 绪论

在现代计算机系统中,编译器是必不可少的基础软件。程序员使用高级语言进行编程完成业务需求,编译器则负责将高级语言转换为底层硬件可以执行的机器指令。

编译器是计算机科学发展史中最为悠久的学科之一。现代公认的第一款编译器是IBM于1957年发布的Fortran编译器;读者所熟知的GCC早在1987年就发布了第一个版本,距今快40年了;而本书讨论的LLVM于2003年正式开源,也有20多年的历史了。

早期编译器研究聚焦于从高级语言到机器码的转换以及优化程序满足对时间和空间的需求。随着时代的发展,应用程序执行性能和多硬件支持逐步成为编译器的主要需求,在编译器领域产生了大量的有关程序分析与转换、代码自动生成以及运行时等新知识。与早期的编译器实现相比,今天的编译算法明显更为复杂。例如,早期的编译器采用简单直观的技术对程序进行词法分析,而现代的编译器词法分析技术都是基于形式语言和自动机理论实现的,这使得编译器前端的开发更为系统化;再例如,早期编译器优化技术更多采用简单直观的技术进行依赖分析和循环变换,而现代编译器可以采用更为复杂的算法,例如多面体理论、线性规划等。

本书讨论的LLVM是过去20多年最成功的编译项目之一,它不仅被广泛用于C/C++等传统语言的编译,更被很多新型语言作为开发基础。为什么LLVM能取得这么大的成就?根本原因在于LLVM良好的设计与实现。LLVM为编译项目开发提供基础,程序被前端编译到LLVM IR,再由LLVM后端编译至任意平台(指LLVM所支持的大多数主流平台),不同目标架构可以重用内置的编译优化,这极大地简化了针对某一编程语言开发编译器的过程。此外,LLVM还提供了完备的编译相关的工具链。

本章主要探讨LLVM的设计思路、发展现状,以及LLVM构建和在线学习工具Compiler Explorer,方便读者在学习后续章节。