CS 502: Compiling and Programming Systems

                                   

Reading List


Pattern-matching compilation

When do Match Compilation Heuristics Matter
Tree Pattern Matching for ML

Classic Papers on Scheme Compilation

Rabbit: A Compiler for Scheme
Lambda: The Ultimate Goto
Lambda: The Ultimate Imperative

Continuation-Passing Style

Chapters 8 and 9, Essentials of Programming Languages

Orbit: An Optimizing Compiler for Scheme
Continuation-Passing, Closure-Passing Style
Realistic Compilation by Program Transformation
Essence of Compiling with Continuations
Contification Using Dominators

Type Checking and Inference

Chapter 16, Modern Compiler Implementation in ML

Basic Polymorphic TypeChecking
Simple Imperative Polymorphism

Closure Conversion and Representation

Definitional Interpreters for Higher-Order Programming Languages
Flow-Directed Closure Conversion
Space-Efficient Closure Representations
Defunctionalization at Work

Static Single Assignment

Chapter 19, Compiler Implementation in ML

Efficiently Computing Static Single Assignment Form and the Control Dependence Graph
SSA is Functional Programming
A Correspondence between Continuation-Passing Style and Static Single Assignment Form

Optimizations

Chapter 11,12,13 Advanced Compiler Design and Implementation

Complete Removal of Redundant Expressions

Control- and Data-Flow Analysis

Chapters 10,17, Modern Compiler Implementation in ML
Chapters 7,8, Advanced Compiler Design and Implementation

Control Flow Analysis in Scheme
A Unified Treatment of Flow Analysis in Higher-Order Languages

Points-to Analysis

Analysis of Pointers and Structures
Pointer Analysis: Haven't We Solved the Problem Yet?
Points-to Analysis in Almost Linear Time
Which Pointer Analysis Should I Use?

Register Allocation

Chapter 11, Modern Compiler Implementation in ML
Chapter 16, Advanced Compiler Design and Implementation

Linear Scan Register Allocation

ML Compilers

MLton
TIL: A Type-Directed Optimizing Compiler for ML