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 | - | Midterm (during lecture) | |||
Mon 15 Mar | 14 | Dynamic Classification, Gradual Typing, and Typed Holes | Optional: What is Gradual Typing by Jeremy Siek | ||
Wed 17 Mar | 15 | Imperative Programming I - Side Effects | A6 out, Mid-Semester Survey out | Optional: TAPL Ch. 13 | |
Mon 22 Mar | 16 | Imperative Programming II - Mutable Data Structures | |||
Wed 24 Mar | 17 | Encapsulated Commands (e.g. Haskell's IO types), Imperative Program Verification I | Optional: Introduction to IO (Haskell Wiki), Optional: CMU 17-654: Hoare Logic: Proving Programs Correct Optional: Washington CSE 331: Reasoning About Code (Hoare Logic) |
||
Fri 25 Mar | A6 due (free late day), Mid-Semester Survey due, A7 out | ||||
Mon 29 Mar | 18 | Imperative Program Verification II | |||
Wed 31 Mar | 19 | Ownership and Borrowing in Rust I | Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership | ||
Mon 5 Apr | 20 | Ownership and Borrowing in Rust II | |||
Tue 6 Apr | A7 due, A8 out | ||||
Wed 7 Apr | 21 | Parallelism and Cost Semantics I | Optional: PFPL Ch. 37-38 | ||
Mon 12 Apr | 22 | Parallelism and Cost Semantics II | |||
Wed 14 Apr | 23 | Concurrent Interaction | A8 due, A9 out | Optional: PFPL Ch. 39 | |
Mon 19 Apr | 24 | Distributed Computation | Optional: PFPL Ch. 40 | ||
Tue 20 Apr | A9 due, End-of-semester Survey released | ||||
Wed 21 Apr | 25 | 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