1 | Module | Lecture # | Date | Lecture title | Topics | Resources |
---|---|---|---|---|---|---|
2 | Introduction to Plait and Functional Programming | 1 | Monday Jan 8 | Introduction and course overview | - Why programming languages? - A first look at Racket/Plait | https://docs.racket-lang.org/plait/Tutorial.html Sections 1.1 -- 1.5 |
3 | 2 | Wednesday Jan 10 | Programming in Racket and Plait | - Solving problems functionally and recursively - How to write tests in Plait - How Plait's type system works | https://docs.racket-lang.org/plait/Tutorial.html Sections 1.1 -- 1.8 | |
4 | Monday Jan 15 | No Class --- Martin Luther King Jr. Day | ||||
5 | Wednesday Jan 17 | No Class --- Steven Traveling for POPL | ||||
6 | Building a SMoL Interpreter | 3 | Monday Jan 22 | Abstract Syntax & evaluation | - Abstract syntax trees - A simple calculator language - Interpreting a language by hand - Implementing and testing the evaluator | PLAI pg. 17 -- 37 See https://www.plai.org/3/2/PLAI%20Version%203.2.2%20printing.pdf |
7 | 4 | Wednesday Jan 24 | Conditionals | - Parsing and s-expressions - Extending the syntax with `if` - Design space of `if` - Adding Booleans, the `Value` type | PLAI pg. 37 -- 47 | |
8 | 5 | Monday Jan 29 | Conditionals and local binding | - Finish up discussion of conditionals - The `let` syntax - Scope - An evaluator for `let` | PLAI pg. 37 -- 57 | |
9 | 6 | Wednesday Jan 31 | Lambda calculus I | - Syntax for functions - Adding functions to the `Value` type - Evaluating functions - Substitution | PLAI pg. 58 -- 69 | |
10 | 7 | Monday Feb 5 | Lambda calculus II | - Implementing an interpreter with environments - Church encoding & church-turing thesis | PLAI pg. 58 -- 69 | |
11 | 8 | Wednesday Feb 7 | State | - A simple language with state - Design space of state - Consequences of state | No PLAI reading | |
12 | 9 | Monday Feb 12 | Introduction to types | - What are types? - A simple type checker - How to read and write typing judgments | PLAI pg. 109 -- 122 | |
13 | Types | 10 | Wednesday Feb 14 | The Simply Typed Lambda Calculus I | - The typing rule for functions - A type checker for the STLC - Typechecking omega | PLAI pg. 123 -- 132 |
14 | Monday Feb 19 | No Class -- President's Day | ||||
15 | 11 | Wednesday Feb 21 | The Simply Typed Lambda Calculus II | - Typechecking recursion - Syntactic sugar - Typechecking mutable references | ||
16 | 12 | Monday Feb 26 | Algebraic datatypes and pairs | - Typechecking algebraic datatypes and pairs - Implementing algebraic datatypes | PLAI pg. 150 -- 153 | |
17 | 13 | Wednesday Feb 28 | Sum types | |||
18 | Monday Mar 4 | No Class -- Spring Break | ||||
19 | Wednesday Mar 6 | No Class -- Spring Break | ||||
20 | 14 | Monday Mar 11 | OCaml for Plait Programmers I | - Basics of programming in OCaml - Implementing an interpreter for the lambda calculus in OCaml | http://wide.land/basics/intro.html http://wide.land/data/intro.html https://try.ocamlpro.com/ | |
21 | 15 | Wednesday Mar 13 | OCaml for Plait Programmers II | |||
22 | 16 | Monday Mar 18 | Dynamic memory safety | |||
23 | 17 | Wednesday Mar 20 | Static memory safety | |||
24 | Paradigms | 18 | Monday Mar 25 | A taste of Rust | https://doc.rust-lang.org/book/ https://play.rust-lang.org | |
25 | 19 | Wednesday Mar 27 | Garbage collection | |||
26 | 20 | Monday Apr 1 | Continuation passing interpreters I | Essentials of Programming Languages 3rd Edition Ch. 5 | ||
27 | 21 | Wednesday Apr 3 | Continuation passing interpreters II | Essentials of Programming Languages 3rd Edition Ch. 5 | ||
28 | 22 | Monday Apr 8 | Continuation passing style I | Essentials of Programming Languages 3rd Edition Ch. 6 | ||
29 | 23 | Wednesday Apr 10 | Continuation passing interpreters II | Essentials of Programming Languages 3rd Edition Ch. 6 | ||
30 | Monday Apr 15 | No Class -- Patriot's day | ||||
31 | 24 | Wednesday Apr 17 | Conclusion |