| Date | Description |
|---|---|
| March 28 |
Welcome to 341! Course mechanics; Trefoil v1 use and implementation Whiteboards Video Demo code |
| March 30 |
OCaml intro: top-level variables, functions, recursion Demo code Video |
| April 1 |
More OCaml intro: let expressions, lists, tuples, and options Video Demo code |
| April 4 |
OCaml wrapup; flat syntax versus nested syntax; syntax as trees Whiteboards Video Demo code |
| April 6 |
ASTs; the dynamic environment; evaluation; careful description of OCaml; S-expresions; tokenization; two-stage parsing Whiteboards Video |
| April 8 |
Using Trefoil v2: old ideas in new clothes; Implementing Trefoil v2: ASTs in Java; careful description of Trefoil v2; implementing the dynamic envornment Whiteboards Video Demo code |
| April 11 |
Trefoil v2: phases of errors, let expressions, untyped pairs, functions; OCaml: records Whiteboards Video Demo code |
| April 13 |
Trefoil: test bindings, implementing functions; OCaml: variants Video Demo code |
| April 15 |
Trefoil: implementing recursive functions; OCaml: pattern matching Whiteboards Video |
| April 18 |
OCaml: more pattern matching and nested patterns Video Demo code slash notes |
| April 20 |
OCaml: Tail recursion Video Demo code |
| April 22 |
OCaml: tuple patterns in function arguments, exceptions; Trefoil: intro to structs Video Demo code |
| April 25 |
Trefoil: structs for variant types, careful description of structs, cond expressions; OCaml: ASTs, dynamic environments, association lists Video Demo code |
| April 27 |
Careful description of Trefoil v3 pattern matching Video Demo code |
| April 29 |
OCaml: first-class functions: higher-order, polymorphic, and anonymous Video Demo code |
| May 2 |
Unit, if-without-else, ignore, structural equality; anonymous functions, returning functions, our own higher-order functions Video Demo code |
| May 4 |
Lexical scope and closures Video Demo code |
| May 6 |
Closure idioms Video Demo code |
| May 9 |
OCaml: More closure idioms; Mutation Video Demo code |
| May 11 |
Trefoil: first-class functions; thunks and streams Video Demo code(also we updated the lecture 19 code with more explanation) |
| May 13 |
Trefoil: more streams; understanding streams via closure semantics Video Demo code |
| May 16 |
Trefoil: Side effects, References, and Promises Video Demo code |
| May 18 |
Trefoil: Two new ways to extend the language: by "expanding in the parser" and by representing Trefoil programs as data in Trefoil Video Demo code |
| May 20 |
Macros Whiteboards Video Demo code |
| May 23 |
Objects, pure OO Whiteboards Video Demo code (same link as last time, we just added a bit to the bottom) |
| May 25 |
The 341 2x2 matrix; Static vs Dynamic typing Whiteboards Video |
| May 27 | Dynamic dispatch precisely; Implementing objects |
| June 1 | TBD |
| June 3 | Victory lap |