FOREWORD
前言
方舟编译器自2019年4月出现在大家的视野之后,就引发了强烈关注。2019年8月31日,方舟编译器开始开源,大家对方舟编译器的关注达到了顶点。编译器行业的从业者、App开发者等相关从业者都保持了对方舟编译器的极大热情。笔者也是从2019年8月31日开始对方舟编译器保持持续关注。
方舟编译器开源之后,为了丰富方舟编译器的学习资料,方便更多相关行业从业者学习方舟编译器,我从2019年8月31日开始在知乎连载方舟编译器学习笔记系列博客。该系列博客保持每天至少更新一篇,连续更新了2个多月,累计更新70余篇。同时,我参与了方舟编译器社区的所有线上线下活动,积极跟踪方舟编译器社区的最新动态。在此基础上,对方舟编译器目前唯一的开源版本V0.2.1的代码进行了梳理,编写了这本《华为方舟编译器之美——基于开源代码的架构分析与实现》。
阅读本书需要具备基本的编译原理知识,至少系统地阅读或学习过“编译原理”课程,了解编译器的基本环节和处理流程。同时,需要对业界主流编译器的大致情况有一个基本的了解。阅读本书并不需要遵循一定的顺序,可按照需要选取对应的章节进行阅读。
本书对V0.2.1版本开源代码整体情况进行了梳理和介绍。同时,抽取其中开源代码比较集中的IR框架部分,进行了详细的源码分析。其各章的主要内容如下:
第1章方舟编译器的前世今生,主要对方舟编译器的开源进程进行介绍,采用大事记的形式,记录开源过程中的重大事件节点。同时,还对方舟编译器的发展前景进行了展望。
第2章方舟编译器的构建,对方舟编译器所采用的三层构建体系及其运作流程做简要介绍,在此基础上,介绍方舟编译器源码及其sample的编译。
华为方舟编译器之美——基于开源代码的架构分析与实现
前言
00
00
第3章方舟编译器总体介绍,对方舟编译器的架构、源码目录、官方文档和执行流程等几方面进行初步介绍,更详细的内容在后续对应章节进行讨论。
第4章中间表示,介绍三地址码和SSA等基本的中间表示基础理论,为后续的源码分析提供基本的理论知识。
第5章方舟编译器IR的设计与实现,从方舟编译器IR设计的思想起源入手,对Maple IR的结构及其代码实现、基本类型的设计与实现、控制流语句的设计与实现等方面进行分析。
第6章方舟编译器IR与其他编译器IR的横向对比,将Maple IR与LLVM IR、Open64的WHIRL IR进行IR设计层面的一些横向对比。
第7章Maple IR的处理流程分析,分析Maple IR的处理流程所涉及的lexer、parser、lower等环节,以及符号表的相关处理。
第8章Me体系实现,对Me体系中的相关结构及其实现进行分析。
第9章方舟编译器phase体系的设计与实现,对方舟编译器的整个phase体系从设计入手,对其注册、添加、调用,以及其两个类别ModulePhase、MeFuncPhase的设计与实现进行分析。
第10章phase实例分析,对ModulePhase的整体实现和运行情况及具体的classhierarchy进行分析。同时,对MeFuncPhase的执行前准备、返回,以及具体的dominance、ssaTab和SSA进行分析。
第11章如何参与方舟编译器社区,对如何参与方舟编译器社区的讨论及代码提交进行介绍。
另外,方舟编译器本身也在不断完善中,社区代码也在不断更新中,本书选取其中的V0.2.1版进行分析,但是依然可能会出现本书代码与实际代码不同的情况,在这种情况下请跟踪最新代码并获取最新信息。
史宁宁
2020年6月
本书源代码下载