Cornell CS 6120: Advanced Compilers 自学课程
康奈尔大学已将其博士级别的编程语言实现课程 CS 6120: Advanced Compilers 作为自学在线课程开放。 该课程由 Adrian Sampson 教授,为独立学习者提供了一条全面的路径,以掌握通用的编译器主题和面向研究的实现技术。
课程概览与学习目标
CS 6120 旨在教授编程语言的实现,重点关注基础编译器理论和高级研究课题。 该课程体系结构由一系列线性时间轴的课程组成,结合了视频讲座、书面笔记和学术论文。
核心编译器主题
该课程涵盖了编译器构建的“经典”支柱,包括:
- Intermediate Representations (IR): 程序如何在内部表示以进行分析和优化。
- Data Flow Analysis: 追踪程序中数据的值和状态的技术。
- Global and Local Analysis: 在基本块和函数级别优化代码的方法。
- Static Single Assignment (SSA): 简化许多编译器优化的关键形式。
- Loop Optimization: 提高执行循环效率的策略。
- Interprocedural Analysis: 分析跨越函数边界的程序行为。
- Alias Analysis: 确定不同的指针是否指向同一个内存位置。
高级与面向研究的主题
除了标准优化之外,该课程还深入探讨了现代运行时和执行环境:
- Just-In-Time (JIT) Compilation: 动态编译器的机制以及通过推测进行的追踪。
- Memory Management: 深入探讨垃圾回收 (GC) 和动态类型语言的实现。
- Concurrency and Parallelism: 探索编译器如何处理多线程执行和超词级并行。
- Fast Compilers: 减少编译器自身运行所需时间的技术。
实际实现与工具
学习过程基于“开源黑客任务 (open-source hacking tasks)”,旨在将抽象概念转化为功能代码。 该课程在这些实现任务中使用了两种主要工具:
- LLVM: 行业标准的编译器基础设施。
- Bril: 一种专门为本课程设计的教育用中间表示,旨在简化学习过程。
课程结构
自学版本的课程遵循与大学版本相同的学术严谨性,但移除了正式的约束。 学生可以忽略截止日期,并被鼓励完成开放式的实现任务以巩固理解。
课程分解
| Lesson | Topic | Key Focus Areas |
|---|---|---|
| 1 | Welcome & Overview | 经验性评估与正确性介绍 |
| 2 | Representing Programs | Bril 与程序表示介绍 |
| 3 | Local Analysis & Optimization | 死代码消除与局部值编号 |
| 4 | Data Flow | 数据流分析与实现任务 |
| 5 | Global Analysis | 全局优化与路径分析 |
| 6 | Static Single Assignment | SSA 形式与窥孔优化 |
| 7 | LLVM | 编写 LLVM passes |
| 8 | Loop Optimization | 提高循环效率 |
| 9 | Interprocedural Analysis | 基于类型的别名分析 |
| 10 | Alias Analysis | 别名分析与垃圾回收理论 |
| 11 | Memory Management | GC 实现与 JIT 类型特化 |
| 12 | Dynamic Compilers | 追踪、推测与超优化器 |
| 13 | Concurrency & Parallelism | 线程、并行与形式化验证 |
| 14 | Fast Compilers | 优化编译器自身的性能 |
虽然大学版本以正式的课程项目结束,但自学版本鼓励学习者将知识应用于现实世界的编译器项目。