Instructor
comar@umich.edu
12:00-1:30pm, TTh
Fall 2020
Students will gain a modern understanding of programming language design and implementation. The emphasis will be on building up from mathematical first principles and on understanding programming languages simultaneously as formal structures and as human-computer interfaces.
The purpose of this course 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.
See the syllabus for all of the details.
Day | # | Lecture Topic | Deadline | Readings |
---|---|---|---|---|
Tue 1 Sep | 1 | Course Overview | RWO Guided Tour (through Records and Variants) | |
Thu 3 Sep | 2 | Programming with Mathematical Expressions | ||
Tue 8 Sep | 3 | Recursive Datatypes and Recursion Schemes | A1 and Survey 1 out | Optional: Cornell CS 3110 Notes Ch. 4 and RWO Lists and Patterns (through Tail Recursion) |
Thu 10 Sep | 4 | Equational and Inductive Reasoning | Princeton COS 326 Notes on Reasoning About Programs | |
Tue 15 Sep | 5 | Syntax | A1 and Survey 1 due, A2 out | |
Thu 17 Sep | 6 | Semantics | ||
Tue 22 Sep | 7 | Types | A2 due, A3 out | |
Thu 24 Sep | 8 | Variables and Functions | ||
Tue 29 Sep | 9 | Products | A3 due, A4 out | |
Thu 1 Oct | 10 | Sums | ||
Tue 6 Oct | 11 | Recursive Types | A4 due, A5 out | |
Thu 8 Oct | 12 | Parametric Polymorphism | ||
Tue 13 Oct | 13 | Constructive Logic (Proofs are Programs) | A5 due | Optional: Propositions as Types by Philip Wadler |
Thu 15 Oct | 14 | Midterm (during lecture) | ||
Tue 20 Oct | 15 | Dynamic Classification, Gradual Typing, and Typed Holes | A6 out | Optional: What is Gradual Typing by Jeremy Siek |
Thu 22 Oct | 16 | Side Effects, Mutation, and Loops | Optional: TAPL Ch. 13 | |
Tue 27 Oct | 17 | Encapsulated Commands (e.g. Haskell's IO types) | Optional: Introduction to IO (Haskell Wiki) | |
Thu 29 Oct | 18 | Imperative Program Verification | A6 due, A7 out | Optional: CMU 17-654: Hoare Logic: Proving Programs Correct Optional: Washington CSE 331: Reasoning About Code (Hoare Logic) |
Tue 3 Nov | No class - Election Day! | Michigan Voter Information Center | ||
Thu 5 Nov | 19 | Imperative Program Verification II | Mid-Semester Survey out | |
Tue 10 Nov | 20 | Ownership and Borrowing in Rust I | Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership | |
Thu 12 Nov | 21 | Ownership and Borrowing in Rust II | A7 due, Mid-Semester Survey due, A8 out | |
Tue 17 Nov | 22 | Parallelism and Cost Semantics I | Optional: PFPL Ch. 37-38 | |
Thu 19 Nov | 23 | Parallelism and Cost Semantics II | ||
Tue 24 Nov | No class - Thanksgiving Break | A8 due | ||
Thu 26 Nov | ||||
Tue 1 Dec | 24 | Concurrent Interaction | Optional: PFPL Ch. 39 | |
Thu 3 Dec | 25 | Distributed Concurrency and Modularity | A9 out | Optional: PFPL Ch. 40 |
Tue 8 Dec | 26 | Special Topics: Macro Systems | Optional: Macros - Rust Book | |
Fri 11 Dec | Review Session (5pm ET) | A9 due, End-of-semester Survey released | ||
Tue 15 Dec | Final Exam (8:00-10:00am ET) | |||
Wed 16 Dec | End-of-semester Survey due (midnight) |
GSI
hkpotter@umich.edu
TBD
IA
yunsoo@umich.edu
TBD
IA
zhiyipan@umich.edu
TBD
IA
reddyvis@umich.edu
TBD
Grader
sayghosh@umich.edu