高级编译器:自学版在线课程
Hacker News 摘要原标题:Advanced Compilers: The Self-Guided Online Course
CS 6120 是康奈尔大学计算机科学系开设的一门博士级课程,由 Adrian Sampson 教授授课,专注于编程语言的实现。这门自学版在线课程向所有人开放,涵盖了编译器领域的广泛主题,既包括中间表示、数据流分析和经典优化等通用内容,也涉及并行化、即时编译(JIT)和垃圾回收等具有研究导向的前沿课题。
课程的学习方式由论文阅读和开源编程任务组成。学生将使用 LLVM 以及一种专门为本课程设计的教育用中间表示(IR)——Bril。网页中列出的教学大纲相当于一个可以获得“想象中学分”的自学计划。
课程结构与学习方式
课程按照线性的时间线排列,将视频学习、笔记阅读与论文研读交替进行。
• 教学形式:每个课程单元都配有视频讲座和书面笔记。
• 实践任务:部分单元包含实现任务,这些任务都是开放式的,旨在通过将抽象概念转化为实际代码来巩固理解。
• 与校内版的区别:自学版本不设任务截止日期,无法参与 Zulip 上的内部讨论,也没有期末项目。校内版的期末项目是具体的研究,而自学版的期末目标被幽默地设定为“通过编译器的魔力改变世界”。
• 开源贡献:整个课程是开源的并托管在 GitHub 上,欢迎用户反馈问题或提交错误。
详细课程大纲
第 1 单元:欢迎与概览
介绍课程目标。推荐阅读关于系统实验评估的论文,探讨为什么有时候即使没有明显的错误也会产生错误的数据,并学习 SIGPLAN 的经验评估指南。
第 2 单元:程序表示
讨论如何表示程序代码。重点是开始接触并学习使用 Bril。
第 3 单元:局部分析与优化
学习在基础块内部进行的分析。涵盖简单的死代码消除和局部数值编号(Local Value Numbering)。
第 4 单元:数据流
深入研究数据流分析框架,并包含一个具体的实现任务。
第 5 单元:全局分析
探讨全局范围内的分析与优化。推荐阅读关于高效路径剖析(Path Profiling)的经典论文。
第 6 单元:静态单赋值(SSA)
学习编译器中至关重要的 SSA 形式。推荐阅读关于使用 Alive 框架进行可证明正确的窥孔优化的论文。
第 7 单元:LLVM
介绍工业级编译器框架 LLVM,学习如何编写一个 LLVM 传递(Pass)。
第 8 单元:循环优化
专门探讨针对循环结构的各种优化技术。
第 9 单元:过程间分析
研究跨函数边界的分析方法。推荐阅读关于基于类型的别名分析(Type-Based Alias Analysis)的论文。
第 10 单元:别名分析
探讨指针和内存引用如何指向同一位置。同时开始涉及内存管理,阅读关于垃圾回收(GC)的统一理论以及快速保守垃圾回收的相关研究。
第 11 单元:内存管理
继续深入内存管理主题。推荐阅读关于 SELF 语言的高效实现以及针对动态语言的基于追踪的即时编译类型特化技术。
第 12 单元:动态编译器
研究即时编译器。内容涵盖通过投机进行追踪。推荐阅读关于超级优化器(Superoptimizer)的研究,以及用于低功耗空间架构的合成辅助编译器 Chlorophyll。
第 13 单元:并发与并行
探讨多线程与并行执行。阅读材料包括探讨为什么线程不能作为库来实现的著名观点、利用多媒体指令集实现超字级并行,以及用于确定性并行 Java 的类型与效果系统。此外还涉及编译器形式化验证,重点阅读关于 CompCert 这一现实编译器的验证工作。
第 14 单元:快速编译器
探讨如何提高编译器自身的运行效率。
原文:https://www.cs.cornell.edu/courses/cs6120/2025fa/self-guided/