Calendar
Week 1
- Mon Jan 20
- No class, MLK day
- Wed Jan 22
- Introduction
- Mandatory reading: syllabus and PA1 specification
Optional reading: Spolsky’s The Perils of Java Schools
Week 2
- Mon Jan 27
- PA1c1 due
- Mon Jan 27
- Functional Programming (1)
- Mandatory reading: Backus’ Speedcoding and the COOL Reference Manual
Optional reading: Kingsbury’s Reversing the technical interview
- Wed Jan 29
- Func. Prog. (2) and Intro to COOL
- Mandatory reading: CD 7.2.4: The ML Type System and the COOL Reference Manual (yes, again. It’s really important!)
Optional reading: CD 10.6: Theoretical Foundations of Functional Languages
- Thu Jan 30
- PA1c2 due
Week 3
- Mon Feb 3
- PA1 (full) due
- Mon Feb 3
- Compiler Structure
- Mandatory reading: Engineering a Compiler (EaC), Chapter 1
Optional readings: Clark’s Removing Left Recursion and Wegner’s Programming Languages: The First 25 Years
- Wed Feb 5
- Scoping and Types
- Mandatory reading: EaC 4.1 and 4.2
Optional reading: Dolan’s Counterexamples in Type Systems and Cardelli’s Type Systems
- Fri Feb 7
- PA2c1 due
Week 4
- Mon Feb 10
- Typechecking and Static Semantics
- Mandatory reading: EaC 4.3
Optional reading: Chapter 30 (“Type Inference”) of Krishnamurthi’s Programming Languages: Application and Interpretation (pages 289-299 in the linked PDF)
- Wed Feb 12
- More Static Semantics
- Mandatory reading: EaC 4.4
Optional reading: Hoare’s Proof of a Program: FIND and/or Dijkstra’s Guarded Commands, Nondeterminacy, and Formal Derivation of Programs
Week 5
- Mon Feb 17
- Cool Typechecking and Runtime Organization
- Mandatory reading: EaC 4.5 and 4.6
Optional reading: Thompson’s Reflections on Trusting Trust
- Wed Feb 19
- Operational Semantics
- Mandatory reading: Chapter 2 through 2.3.3 in Grant, Palmer, and Smith’s Principles of Programming Languages (warning: this is a long reading!)
Optional reading: Hoare’s Hints on Programming Language Design
Week 6
- Mon Feb 24
- PA2c2 due
- Mon Feb 24
- Operational Semantics (Part 2)
- Mandatory reading: Ernst’s Notes on Program Analysis, Chapter 2 through 2.12
Optional reading: EaC chapter 9 (alternative treatment to Ernst of much of the same material. I prefer Ernst, but the EaC treatment is good, too. If you’re struggling with Ernst, you should definitely read this.)
- Wed Feb 26
- Abstract Interpretation (1)
- Mandatory reading: Ernst’s Notes on Program Analysis, 2.13 through 2.20
Optional reading: Cousot and Cousot’s Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints (note that this is an old, tough to read paper. [Ernst] 2.22 has some notes to help you make sense of the paper.)
Week 7
- Mon Mar 3
- PA2 (full) due
- Mon Mar 3
- Abstract Interpretation (2)
- Mandatory reading: none; make sure you’ve done the readings from last week
- Wed Mar 5
- Intermediate Representations
- Mandatory reading: EaC 5
- Fri Mar 7
- PA3c1 due
Week 8
- Mon Mar 10
- x86-64 Assembly
- Mandatory reading: EaC 6 through 6.4
- Wed Mar 12
- Code Generation (1)
- Mandatory reading: EaC 7 through 7.4
- Fri Mar 14
- PA3c2 due
Week 9
- Mon Mar 17
- No Class (Spring Break)
- Wed Mar 19
- No Class (Spring Break)
Week 10
- Mon Mar 24
- Code Generation (2)
- Mandatory reading: EaC 7.5 through end of 7
Optional reading: McCarthy and Painter’s Correctness of a Compiler for Arithmetic Expressions
- Wed Mar 26
- Mid-term Exam (in-class)
- see the exams page for more information
Week 11
- Mon Mar 31
- Local and Peephole Optimizations
- Mandatory reading: EaC 8 through 8.4
Optional reading: Necula’s Translation Validation for an Optimizing Compiler
- Wed Apr 2
- Regional Optimizations
- Mandatory reading: EaC 8.5 and 11.5
Optional reading: Willsey et al.’s egg: Fast and Extensible Equality Saturation
- Wed Apr 2
- PA3c3 due
Week 12
- Mon Apr 7
- Global Optimizations
- Mandatory reading: EaC 8.6 through end of 8
Optional reading: Kildall’s A Unified Approach to Global Program Optimization
- Wed Apr 9
- Dead Code Elimination
- Mandatory reading: EaC 10.1 and 10.2
Week 13
- Mon Apr 14
- PA3 (full) due
- Mon Apr 14
- Compiler Backend
- Mandatory reading: EaC 13 through 13.3
- Wed Apr 16
- Register Allocation
- Mandatory reading: EaC 13.4 through end of 13
Week 14
- Mon Apr 21
- Linking, Loading, and Shared Libraries
- Mandatory reading: CD 3.8 and 14.7
Optional reading: Davis’ Software Usability II (a description of how software engineering (and shared libaries, called “DSO”s) played out as Silicon Graphics was developing the IRIX Operating System for the SGI Indy workstation)
- Wed Apr 23
- Automatic Memory Management
- Mandatory reading: EaC 6.6.2
Optional reading: Bacon et al.’s A Unified Theory of Garbage Collection
Week 15
- Mon Apr 28
- PA4c1 due
- Mon Apr 28
- Pluggable Type Systems
- Mandatory reading: The Checker Framework manual, chapters 1, 2, and 3 (except 2.2.2, which you can skip).
Optional reading: Kellogg et al.’s Lightweight Verification of Array Indexing and Banerjee et al.’s NullAway: Practical Type-Based Null Safety for Java
- Wed Apr 30
- Erfan Arvan guest lecture on Exceptions
- Mandatory reading: The Java Language Specification’s section on Exceptions
Optional reading: Exceptions from Bloch’s Effective Java, or Chapter 14 of Pierce’s Types and Programming Languages.
Week 16
- Mon May 5
- Wrapup
- Mandatory reading: TBD
- Wed May 7
- No Class (Friday classes meet today)
Exam Week
- May 15
- Final Exam (in-person, CULM LECT 1 2:30-5pm)
- May 15
- PA4 (full) due