Instructor
comar@umich.edu
Winter 2024
Programming languages are rich mathematical structures and powerful user interfaces. This course covers the design and use of modern programming languages. We will build up systematically from formal first principles while considering human factors in language design, language prototyping, and techniques for reasoning precisely about program behavior throughout the course.
The goal is to change the way you think about programming and programming language design in ways that will remain relevant across the many technology hype cycles that you will encounter over the course of your careers.
Day | # | Lecture Topic | Deadline | Readings |
---|---|---|---|---|
Wed 10 Jan | 1 | Course Overview | ||
Mon 15 Jan | No Lecture (MLK Day) | |||
Wed 17 Jan | 2 | Programming with Mathematical Expressions |
|
Optional: Cornell CS 3110 Notes, Ch. 2-3 (except 3.1.3) |
Mon 22 Jan | 3 | Recursive Datatypes and Recursion Schemes | Optional: Cornell CS 3110 Notes, Ch. 4 | |
Tue 23 Jan |
|
|||
Wed 24 Jan | 4 | Equational and Inductive Reasoning | Optional: Princeton COS 326 Notes on Reasoning: Basics, Lists | |
Mon 29 Jan | 5 | Syntax | ||
Wed 31 Jan | 6 | Semantics | ||
Fri 2 Feb |
|
|||
Mon 5 Feb | 7 | Variables and Types | ||
Wed 7 Feb | 8 | Functions (the Lambda Calculus) | ||
Fri 9 Feb |
|
|||
Mon 12 Feb | 9 | Products and Isomorphisms | ||
Wed 14 Feb | 10 | Sums | ||
Fri 16 Feb |
|
|||
Mon 19 Feb | 11 | Recursive Expressions | ||
Wed 21 Feb | 12 | Recursive Types | ||
Fri 23 Feb |
|
|||
Sat 24 Feb | Spring Break | |||
Mon 4 Mar | 13 | Universal Types (Parametric Polymorphism) | ||
Wed 6 Mar | 14 | Constructive Logic (Proofs are Programs) | Optional: Propositions as Types by Philip Wadler | |
Fri 8 Mar |
|
|||
Mon 11 Mar | Midterm Exam (in class) | |||
Wed 13 Mar | 15 | Dynamic Classification, Gradual Typing, and Typed Holes |
|
Optional: What is Gradual Typing by Jeremy Siek |
Fri 15 Mar |
|
|||
Mon 18 Mar | 16 | Imperative Programming I - Side Effects | Optional: TAPL Ch. 13 | |
Wed 20 Mar | 17 | Imperative Programming II - Mutable Data Structures 😱 |
|
|
Fri 22 Mar |
|
|||
Mon 25 Mar | 18 | Imperative Program Analysis I | Optional: CMU
17-654: Hoare Logic:
Proving Programs Correct Optional: Washington CSE 331: Reasoning About Code (Hoare Logic) |
|
Wed 27 Mar | 19 | Imperative Program Analysis II | ||
Mon 1 Apr | 20 | Memory Management + Ownership in Rust | Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership | |
Wed 3 Apr | 21 | Borrowing in Rust | ||
Fri 5 Apr |
|
|||
Mon 8 Apr | Lecture Canceled | |||
Wed 10 Apr | 22 | Parallelism and Cost Semantics I | Optional: PFPL Ch. 37-38 | |
Mon 15 Apr | 23 | Parallelism and Cost Semantics II | ||
Wed 17 Apr | 24 | Concurrent Interaction | Optional: PFPL Ch. 39 | |
Fri 19 Apr |
|
|||
Mon 22 Apr | 25 | Distributed Computation and Module Systems | Optional: PFPL Ch. 40 | |
Fri 26 Apr |
|
|||
Tue 30 Apr | Final Exam (10:30am-12:30pm) (Location: GGBL 1571, i.e. the lecture room) | |||
Wed 1 May |
|
GSI
dmoo@umich.edu
IA
zzhaoe@umich.edu
Grader
weixiao@umich.edu
Grader
cactus@umich.edu