猜你喜欢
华为方舟编译器之美——基于开源代码的架构分析与实现

华为方舟编译器之美——基于开源代码的架构分析与实现

书籍作者:史宁宁 ISBN:9787302562627
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7755
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

华为方舟编译器自面世以来,在业界乃至互联网科技圈引发了巨大的反响。作为一款国内研发的大型工业编译器,方舟编译器从一开始就承载了众多期望。方舟编译器开源之后,业界不少同仁开始分析方舟编译器的架构和实现,本书也是这时候开始编写的。

本书基于方舟编译器开源代码的V0.2.1版本,从方舟编译器的开源进程与前景谈起,介绍方舟编译器的构建、总体架构、IR设计、Maple IR的处理、Me体系、phase体系的设计与实现等内容,覆盖了V0.2.1版本所开源的所有核心内容。在最后,还对如何参与方舟编译器社区的建设给出了指引。

总体而言,本书既有对整体架构的分析,又有对整体架构实现以及重点内容代码实现的介绍,可以帮助读者快速的了解方舟编译器的开源代码,让读者更加方便的参与到方舟编译器的建设和使用之中。


作者简介

史宁宁,中国科学院软件研究所智能软件研究中心PLCT实验室项目主管。吉林大学计算机学院硕士。2012年起作为核心开发人员和项目经理参与组织开发多个编译器项目。长期坚持撰写技术博客,其中“LLVM每日谈”“方舟编译器学习笔记”等系列影响较大,曾出版图书1部。目前活跃在HelloGCC/HelloLLVM、方舟编译器等开源社区。

前言

方舟编译器自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月

目录
CONTENTS
目录
第1章方舟编译器的前世今生00
1.1方舟编译器的开源进程00
1.2方舟编译器的前景00
第2章方舟编译器的构建00
2.1方舟编译器构建体系00
2.2方舟编译器源码编译0
2.3方舟编译器官方例子编译0
2.4Toy runtime简介0
第3章方舟编译器总体介绍0
3.1方舟编译器的架构0
3.2方舟编译器源码目录0
3.2.1一级目录0
3.2.2src目录介绍0
3.3方舟编译器文档0
3.4方舟编译器的执行流程0
第4章中间表示0
4.1IR简介0
4.2三地址码0
4.3SSA0
第5章方舟编译器IR的设计与实现0
5.1Maple IR设计的起源与思想0
5.2Maple IR的结构0
5.3Maple IR结构表示代码0
5.4Maple IR中的基本类型的设计与实现0
5.4.1基本类型的设计0
华为方舟编译器之美——基于开源代码的架构分析与实现
目录
0
0
5.4.2Maple IR基本类型的实现0
5.5Maple IR中的控制流语句的设计与实现0
5.5.1控制流语句的设计0
5.5.2控制流语句的实现0
第6章方舟编译器IR与其他编译器IR的横向对比0
6.1Maple IR与LLVM IR的对比0
6.1.1Maple IR与LLVM IR的结构对比0
6.1.2Maple IR与LLVM IR的类型对比0
6.1.3Maple IR与LLVM IR中module层面的
信息对比0
6.2Maple IR与WHIRL IR的对比0
6.2.1Maple IR与WHIRL IR的基本类型对比0
6.2.2Maple IR与WHIRL IR的控制流语句对比0
第7章Maple IR 的处理流程分析0
7.1Maple IR的整体处理流程0
7.2Maple IR的 build类0
7.3Maple IR的符号表0
7.4Maple IR的寄存器实现0
7.5Maple IR的lower处理0
7.5.1if语句的向下转换0
7.5.2while和dowhile语句的向下转换0
7.5.3doloop语句的向下转换
第8章Me体系实现
8.1MeFunction实现
8.2MeCFG实现
8.3BB实现
8.4MeStmt实现
8.5MeExpr实现
第9章方舟编译器phase体系的设计与实现
9.1phase体系的总体设计与实现
9.2phase的注册与新增
9.3phase的运行机制
9.4ModulePhase的设计与实现
9.5MeFuncPhase的设计与实现
9.6DriverRunner的调用
第10章phase实例分析
10.1ModulePhase类phase的实现与运行
10.2ModulePhase之classhierarchy分析
10.3MeFuncPhase类phase的执行前准备
10.4MeFuncPhase类的phase的返回分析
10.5MeFuncPhase之dominance分析
10.6MeFuncPhase之ssaTab分析
10.7MeFuncPhase之ssa分析
第11章如何参与方舟编译器社区
附录A方舟编程体系
参考文献
后记
短评

不错,,,,,,,,,,,,,,,

2020-11-11 01:17:32

读了前5章,感觉写的太差,就是目录里代码在哪里之类的,凑字数和蹭热度吧。

2020-10-31 09:44:56

这次买了送给朋友们的。

2020-11-06 08:25:01

方舟编译器目前唯一的一本书,值得买来读一读。

2020-10-31 09:08:53

产品特色