《邢其正-Koopa-开源的本科生编译实践教学方案_20230328_114018.pdf》由会员分享,可在线阅读,更多相关《邢其正-Koopa-开源的本科生编译实践教学方案_20230328_114018.pdf(58页珍藏版)》请在三个皮匠报告上搜索。
1、邢其正(MaxXing)北京大学Koopa是?KoopaKingBowsera.k.a.库巴/酷霸王KoopaKoopaKoopa面向本科生的编译实践教学方案教学用的编译器构建框架详尽的“手把手”式教程文档开箱即用的Docker实验环境支持C/C+/Rust多种开发语言Koopa全部开源,面向全网开放手把手教你从零开始写一个编译器编译实践在线文档Koopa是怎么诞生的?Koopa的诞生2020年,参加第一届编译系统设计赛Koopa的诞生2020年参加编译赛三件让我印象深刻的事情Koopa的诞生2020年参加编译赛三件让我印象深刻的事情1.第一次完整实现C子集编译器2.其他学校的选手好强啊3.大
2、赛的评测系统很有意思(就是有些测例太难了)Koopa的诞生2020年参加编译赛评测系统很有意思自动编译提交的Git项目运行后台的测试用例给出测试结果(虽然也有一些槽点)Koopa的诞生2020年,入学北大成为编译课助教Koopa的诞生2020年编译课助教完整实现C子集编译器说明你对编译器很了解其他学校的选手好强啊相比比赛,你更适合当助教大赛的评测系统很有意思刚好,给课程加个评测系统Koopa的诞生2020年编译课助教然后我就当了四个学期助教2020年秋季2021年春季2021年秋季2022年春季Koopa的诞生2020年编译课助教从大赛到课程在实践课中引入大赛的SysY语言推出面向课程的在线评
3、测系统在课程中推行Git版本控制引入大赛测试用例和性能评测机制Koopa的诞生2020年编译课助教评测系统很有意思自动编译提交的Git项目运行后台的测试用例给出测试结果(虽然也有一些槽点)Koopa的诞生2020年编译课助教虽然也有一些槽点自动编译提交的Git项目运行后台的测试用例给出测试结果但不支持构建脚本例如Makefile/CMake但无法提供更具体的信息测试结果的划分不适合编译器项目不适合编译器项目Koopa的诞生2020年编译课助教测试结果的划分不适合编译器项目不适合编译器项目普通的项目编译运行检查结果编译器项目编译编译器编译测例运行测例检查结果汇编测例Koopa的诞生2020年编译
4、课助教原先的测试结果改进后的测试结果CE:编译错误TLE:超时RE:运行时错误WA:结果错误AC:结果正确编译编译器:CCE/CCTLE编译测例:CTE/CTTLE汇编测例:AE/ATLE运行测例:RE/RTLE结果:WA/ACKoopa的诞生用同样的思路审视实践教学的安排Koopa的诞生审视实践教学的安排课程阶段划分/难度设置不合理课程使用的中间表示存在设计缺陷缺乏一个足够详细的实验指导书实验环境的配置复杂且耗时Koopa的诞生课程使用的中间表示存在设计缺陷反思旧设计提出新设计见pku-minic/next-gen-ir-proposalKoopa的诞生2021年6月正式开始设计新IR202
5、1年9月Koopa设计基本确定第一代Koopa框架2021年12月引入基本块参数设计Koopa框架重构2022年2月在线文档编写完成新版Koopa框架Koopa IR易用,通用标准化Koopa IR线性IR,显式CFG,强类型支持SSA形式,但也可以不使用类似LLVM IR,更贴近工业界易于分析、优化、阅读和调试提供标准化的框架(C/C+/Rust)Koopa的设计旧版分层IRSysY源文件Eeyore(高层IR)Tigger(底层IR)汇编/执行文件Koopa的设计实验阶段也按此划分SysY第一阶段第二阶段第三阶段SysY到Eeyore的编译器Eeyore到Tigger的编译器Tigger到
6、汇编的编译器Koopa的设计SysY第一阶段第二阶段第三阶段前端的各类细节控制流、函数的翻译构建AST,生成IR几千行代码解析Eeyore寄存器分配(可选)生成IR近千行代码解析Tigger一对一翻译生成汇编几百行代码Koopa的设计第一阶段前端的各类细节控制流、函数的翻译构建AST,生成IR几千行代码第二阶段解析Eeyore寄存器分配(可选)生成IR近千行代码第三阶段解析Tigger一对一翻译生成汇编几百行代码问题#1两种IR,外加汇编同学们要理解三种表示Koopa的设计第一阶段前端的各类细节控制流、函数的翻译构建AST,生成IR几千行代码第二阶段解析