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)”,旨在将抽象概念转化为功能代码。 该课程在这些实现任务中使用了两种主要工具:

  1. LLVM: 行业标准的编译器基础设施。
  2. 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 优化编译器自身的性能

虽然大学版本以正式的课程项目结束,但自学版本鼓励学习者将知识应用于现实世界的编译器项目。

Sources