这是我参与「第五届青训营 」伴学笔记创作活动的第9天
一、本堂课重点内容:
编译器原理和静态代码分析
静态代码分析是指在不实际执行程序的情况下,对代码语义和行为进行分析,由此找出程序中由于错误的编码导致异常的程序语义或未定义的行为。
通俗的说,静态代码分析就是在代码编写的同时就能找出代码的编码错误。你不需要等待所有代码编写完毕,也不需要构建运行环境,编写测试用例。它能在软件开发流程早期就发现代码中的各种问题,从而提高开发效率和软件质量。
二、详细知识点介绍:
1.编译器结构
1.1重要的系统软件 ·识别符合语法和非法的程序·生成正确且高效的代码
1.2分析部分(前端front end) ·词法分析,生成词素(lexeme)·语法分析,生成语法树 ·语义分析,收集类型信息,进行语义检查 ·中间代码生成,生成intermediate representation (IR)。
1.3综合部分(后端back end) ·代码优化,机器无关优化,生成优化后的IR。代码生成,生成目标代码
2.静态分析 静态分析:不执行程序代码,推导程序的行为,分析程序的性质。 控制流(Control flow):程序执行的流程数据流(Data flow):数据在控制流上的传递
3.过程内分析和过程间分析
3.1过程内分析(Intra-procedural analysis) ·仅在函数内部进行分析
3.2过程间分析(Inter-procedural analysis) ·考虑函数调用时参数传递和返回值的数据流和控制流
4.Go编译器优化
4.1为什么做编译器优化 用户无感知,重新编译即可获得性能收益通用性优化
4.2现状 ·采用的优化少 。编译时间较短,没有进行较复杂的代码分析和优化
4.3·编译优化的思路 。场景:面向后端长期执行任务 . Tradeoff:用编译时间换取更高效的机器码
4.4Beast mode 函数内联·逃逸分析 默认栈大小调整·边界检查消除·循环展开 ·
四、课后个人总结: 总结 编译器的结构与编译的流程 编译器后端优化 数据流分析和控制流分析 ·过程内分析和过程间分析