Skip to main content Link Search Menu Expand Document (external link)

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

© 2022-2025 Martin Kellogg, Wes Weimer, Jonathan Bell, Adeel Bhutta and Mitch Wand. Released under the CC BY-SA license