Instructor
comar@umich.edu
4:30-6:00pm, MW
Winter 2021
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 mathematical first principles while considering human factors in language design, language prototyping, and techniques for reasoning 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 20 Jan | 1 | Course Overview + | Required: RWO Guided Tour (through Records and Variants) | |
Mon 25 Jan | 2 | Programming with Mathematical Expressions | ||
Tue 26 Jan | A1 and Survey 1 out | |||
Wed 27 Jan | 3 | Recursive Datatypes and Recursion Schemes | Optional: Cornell CS 3110 Notes Ch. 4 and RWO Lists and Patterns (through Tail Recursion) | |
Mon 1 Feb | 4 | Equational and Inductive Reasoning | Required: Princeton COS 326 Notes on Reasoning About Programs | |
Wed 3 Feb | 5 | Syntax | ||
Thu 4 Feb | A1 and Survey 1 due, A2 out | |||
Mon 8 Feb | 6 | Semantics | ||
Wed 10 Feb | 7 | Types | ||
Thu 11 Feb | A2 due, A3 out | |||
Mon 15 Feb | 8 | Variables and Functions | ||
Wed 17 Feb | 9 | Products | ||
Thu 18 Feb | A3 due, A4 out | |||
Mon 22 Feb | 10 | Sums and Recursive Expressions | ||
Wed 24 Feb | No class - Wellness Break | |||
Fri 26 Feb | A4 due, A5 out | |||
Mon 1 Mar | 11 | Recursive Types | ||
Wed 3 Mar | 12 | Parametric Polymorphism and Modules | ||
Thu 4 Mar | A5 due | |||
Mon 8 Mar | 13 | Constructive Logic (Proofs are Programs) | Optional: Propositions as Types by Philip Wadler | |
Wed 10 Mar | 14 | Midterm (during lecture) | ||
Mon 15 Mar | 15 | Dynamic Classification, Gradual Typing, and Typed Holes | A6 out, Mid-Semester Survey out | Optional: What is Gradual Typing by Jeremy Siek |
Wed 17 Mar | 16 | Side Effects, Mutation, and Loops | Optional: TAPL Ch. 13 | |
Mon 22 Mar | 17 | Encapsulated Commands (e.g. Haskell's IO types) | Optional: Introduction to IO (Haskell Wiki) | |
Wed 24 Mar | 18 | Imperative Program Verification | Optional: CMU 17-654: Hoare Logic: Proving Programs Correct Optional: Washington CSE 331: Reasoning About Code (Hoare Logic) |
|
Thu 25 Mar | A6 due, Mid-Semester Survey due, A7 out | |||
Mon 29 Mar | 19 | Imperative Program Verification II | ||
Wed 31 Mar | 20 | Ownership and Borrowing in Rust I | Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership | |
Mon 5 Apr | 21 | Ownership and Borrowing in Rust II | ||
Tue 6 Apr | A7 due, Mid-Semester Survey due, A8 out | |||
Wed 7 Apr | 22 | Parallelism and Cost Semantics I | Optional: PFPL Ch. 37-38 | |
Mon 12 Apr | 23 | Parallelism and Cost Semantics II | ||
Tue 13 Apr | A8 due, A9 out | |||
Wed 14 Apr | 24 | Concurrent Interaction | Optional: PFPL Ch. 39 | |
Mon 19 Apr | 25 | Distributed Computation | Optional: PFPL Ch. 40 | |
Tue 20 Apr | A9 due, End-of-semester Survey released | |||
Wed 21 Apr | 26 | Special Topics: Macro Systems | Optional: Macros - Rust Book | |
Thu 22 Apr | Final Review Session (10am ET) | |||
Fri 23 Apr | Final Exam (1:30-3:30pm ET) | |||
Mon 26 Apr | End-of-semester Survey due (midnight) |
IA
yunsoo@umich.edu
10:30-11:30am, F
IA
zhiyipan@umich.edu
IA
anandrav@umich.edu
1:30-2:30pm, F
IA
kevechen@umich.edu
9:30-10:30am, F
Grader
bjrey@umich.edu
Grader
ranadeep@umich.edu