Course Schedule (Tentative)
| Lecture | Date | Topic | Readings | Notes |
|---|---|---|---|---|
|
||||
| 1 | 1/22 | Functional Programming: A Taste of Haskell |
RWH 3-4 | Haskell Warmup |
| 2 | 1/24 | (C) Specifying Valid Programs: Language Syntax and Grammar |
PFPL 1, 4.1 | HW1 Out |
| 3 | 1/29 | Functions and Recursion | RWH 2, 4 | |
| 4 | 1/31 | (C) Specifying Program Behavior: Evaluation and Operational Semantics |
PFPL 5.1-3, 7.1 | |
| 5 | 2/5 | Types in Haskell | RWH 3 | |
| 6 | 2/7 | (C) Specifying Well-Behaved Programs: Type Systems |
PFPL 4.2-3, 9.1, 10.1, 11.1 | HW1 Due HW2 Out |
| 7 | 2/12 | Polymorphism and Type Classes | RWH 6 | |
| 8 | 2/14 | A Common Pattern: Monads | RWH 14 | |
| 9 | 2/19 | Monads in Action: Programming with Side-Effects |
RWH 7 | |
| 10 | 2/21 | Monads in Action: Declarative Parsing |
RWH 10, 16 | HW2 Due HW3 Out |
| 11 | 2/26 | (C) More Types | ||
| 12 | 2/28 | Quickcheck: Property-Based Testing | HW3a Due | |
| 13 | 3/5 | |||
|
||||
| 14 | 3/7 | Imperative Programming: A Taste of Rust |
TRPL 1-2 | Rust Warmup |
| 15 | 3/12 | Rust Basics | TRPL 3, 5, 6 | HW3b Due HW4 Out |
| 16 | 3/14 | (C) Modeling an Imperative Language | ||
| 3/19 | ||||
| 3/21 | ||||
| 17 | 3/26 | Memory Management and Ownership | TRPL 4.1 | |
| 18 | 3/28 | References and Borrowing | TRPL 4.2 | HW4 Due HW5 Out |
| 19 | 4/2 | Lifetimes, Generics, and Traits | TRPL 8, 9, 10, 19.2 | |
| 20 | 4/4 | More Traits: Closures and Iterators | TRPL 13.1-2 | |
| 21 | 4/9 | Smart Pointers | TRPL 15.1-4 | |
| 22 | 4/11 | (C) Parallelism | ||
| 23 | 4/16 | (C) Concurrency | HW5 Due HW6 Out |
|
| 24 | 4/18 | Concurrency in Rust | TRPL 16 | |
| 25 | 4/23 | More Concurrency in Rust | TRPL 16 | |
| 26 | 4/26 | (C) Modeling Concurrency | ||
| 27 | 4/30 | Unsafe Rust Guest Lecture by Mark Mansi |
Nomicon | |
| 28 | 5/2 | Perspectives on Programming Languages | HW6 Due | |
| 5/9 |