没有合适的资源?快使用搜索试试~ 我知道了~
首页华为方舟编译器开发全攻略:架构设计与实战指南
华为方舟编译器开发全攻略:架构设计与实战指南
需积分: 10 9 下载量 150 浏览量
更新于2024-07-15
收藏 2.81MB PDF 举报
华为方舟编译器开发文档是一份详细介绍华为自主研发的编译器的权威资料。它以独特的架构设计为核心,旨在提供开发者深入了解和使用该编译器的全面指导。文档涵盖了从环境配置到具体编程实践的各个环节。 首先,致谢部分表达了对书栈(BookStack.CN)平台的感谢,以及对所有参与者和贡献者的认可。书栈作为一个文档管理系统,使得知识的整理和分享成为可能,但同时也提示了读者,尽管文档内容由网友贡献,可能存在知识更新不及时或错误的地方,鼓励用户发现问题时积极反馈,共同提升文档质量。 接着,文档详细阐述了方舟编译器的架构,它主要分为前端(处理Java/Kotlin等语言的字节码)、中间表示(IR)转换器,以及后端的优化器和生成二进制文件的环节。IR的设计目标是保留源程序的完整信息,便于编译器进行深度分析和优化,这体现了华为在性能优化上的技术追求。 在开发指南部分,读者可以学习到如何进行源码编译,遵循的编程规范,包括命名规则、代码格式以及对C++和其他现代特性的支持。这些内容有助于开发者确保代码的可读性、一致性,以及利用最新技术提升代码效率。 文档还强调了如何参与到方舟编译器的贡献过程,包括文档贡献、代码贡献和邮件列表交流的指南,鼓励社区成员积极参与,推动技术进步。此外,文档结尾还提供了链接到华为官方网站和书栈平台的资源,方便用户查找最新的技术更新和进一步了解。 华为方舟编译器开发文档是一份实用且具有前瞻性的资源,无论是对开发者熟悉新工具,还是对技术研究人员探索前沿技术,都是极有价值的参考资料。通过这份文档,读者不仅能掌握编译器的基础原理,还能了解到华为在软件工程领域的实践和思考。
资源详情
资源推荐
除有明确的必要性,否则不要用typedef/#define对基本数据类型进行重定义。优先使用 <cstdint> 头文件中的
基本类型:
有符号类型 无符号类型 描述
int8_t uint8_t 宽度恰为8的有/无符号整数类型
int16_t uint16_t 宽度恰为16的有/无符号整数类型
int32_t uint32_t 宽度恰为32的有/无符号整数类型
int64_t uint64_t 宽度恰为64的有/无符号整数类型
intptr_t uintptr_t 足以保存指针的有/无符号整数类型
如果模块有自己的定义,请使用统一的typedef来定义类型:
1. typedefsignedcharVOS_INT8;
2. typedefunsignedcharVOS_UINT8;
3.
4. #if__WORDSIZE==64
5. typedefunsignedlongintVOS_UINTPTR;
6. #else
7. typedefunsignedintVOS_UINTPTR;
8. #endif
如果模块为了封装某个类型的信息,方便后续的扩展,可以使用typedef来重新定义。
1. typedefuint8_tDeviceID;
2. //...
3. //若干版本后扩展成16-bit
4. typedefuint16_tDeviceID;
有特殊作用的类型 typedefvoidHandle; 注意:*不要使用#define进行别名定义,并且在C++11以后推荐使用
using来定义类型。
除上述理由外,应避免给其本数值类型别名定义。因为类型别名可读性并不好,隐藏了基本数值类型信息,如位宽,
是否带符号。滥用举例:
1. typedefuint16_tMyCounter;
2. //...
3. intFoo(...){
4. MyCounterc;
5. //...
6. while(c>=0){
7. printf("counter=%d\n",c);
8. //...
9. }
10. //...
11. }
对'MyCounter'是否可能小于0,打印时用'%d'还是'%u'都不是很直观,极容易引入上述类似缺陷。
命名
-14-本文档使用书栈(BookStack.CN)构建
通用变量命名采用小驼峰,包括全局变量,函数形参,局部变量,成员变量。
1. std::stringtableName;//Good:推荐此风格
2. std::stringtablename;//Bad:禁止此风格
3. std::stringpath;//Good:只有一个单词时,小驼峰为全小写
1. classFoo{
2. private:
3. std::stringfileName;//不添加任何作用域前缀或者后缀
4. };
当构造函数参数和成员变量重名时,可通过this->来引用成员变量。
1. classMyClass{
2. public:
3. MyClass(intmyVar):myVar(myVar){//OK,初始化列表允许同名入参初始化同名成员
4. if(NeedNewVar()){
5. this->myVar=GetValue();//注意不要漏掉this->,否则就成了给入参赋值
6. }
7. }
8.
9. private:
10. intmyVar;
11. };
宏采用全大写,下划线连接的格式。常量、枚举值使用k+大小写混合。函数局部const常量和类的普通const成员
变量,使用小驼峰命名风格。
1. #defineMAX(a,b)(((a)<(b))?(b):(a))//仅对宏命名举例,并不推荐用宏实现此类功能
2.
3. enumTintColor{//注意,枚举类型名用大驼峰,其下面的取值是k+大小写混合
4. kRed,
5. kDarkRed,
6. kGreen,
7. kLightGreen
8. };
9.
10. intFunc(...){
11. constunsignedintbufferSize=100;//函数局部常量
12. char*p=newchar[bufferSize];
13. ...
14. }
变量命名
规则2.5.1类的成员变量命名使用小驼峰。
宏、常量、枚举命名
命名
-15-本文档使用书栈(BookStack.CN)构建
15.
16. namespaceutils{
17. constunsignedintkFileSize=200;//全局常量
18. }
命名
-16-本文档使用书栈(BookStack.CN)构建
尽管有些编程的排版风格因人而异,但是我们强烈建议和要求使用统一的编码风格,以便所有人都能够轻松的阅读和
理解代码,增强代码的可维护性。
建议每行字符数不要超过120个。如果超过120个字符,请选择合理的方式进行换行。
例外:
如果一行注释包含了超过120个字符的命令或URL,则可以保持一行,以方便复制、粘贴和通过grep查找;
包含长路径的#include语句可以超出120个字符,但是也需要尽量避免;
编译预处理中的error信息可以超出一行。预处理的error信息在一行便于阅读和理解,即使超过120个
字符。
1. #ifndefXXX_YYY_ZZZ
2.
#errorHeaderaaaa/bbbb/cccc/abc.hmustonlybeincludedafterxxxx/yyyy/zzzz/xyz.h,because
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3. #endif
只允许使用空格(space)进行缩进,每次缩进为2个空格。
K&R风格函数左大括号跟随语句放行末。右大括号独占一行,除非后面跟着同一语句的剩余部分,如do语句中的
while,或者if语句的else/elseif,或者逗号、分号。
如:
1. structMyType{//跟随语句放行末,前置1空格
2. ...
3. };
4.
5. intFoo(inta){//函数左大括号跟随语句放行末
6. if(...){
7. ...
8. }else{
格式
行宽
建议3.1.1行宽不超过120个字符
缩进
规则3.2.1使用空格进行缩进,每次缩进2个空格
大括号
规则3.3.1除函数外,使用K&R缩进风格
格式
-17-本文档使用书栈(BookStack.CN)构建
剩余82页未读,继续阅读
worthcvt
- 粉丝: 91
- 资源: 407
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功