teaching
CMSC 305
Design of Programming Languages (F2020)
overview | logistics | schedule | assignments | presentations | resourcesTentative Schedule (changes frequently)
| week | date | topics | readings | work assigned | language presentation |
| 1 | 8/31/2020 | History of Lisp; introduction; metaprograms | syllabus; LISP 1.5 Programmer's Manual pg 1--14 | (hello 'scheme) | |
| 9/02/2020 | expressions | sicp 1.1 | substitution model | scheme* | |
| 9/04/2020 | recursion; grammars | sicp 1.2 | lab 0: generating expressions | ||
| 2 | 9/7/2020 | higher order functions | sicp 1.3 | compose/curry/tap | fortran/cobol |
| 9/09/2020 | closures | lua 6; "Taste of Functional Programming" (lua 9.4); "An Experiment in Software Prototyping Productivity" Sec. 6.1; Evolution of Lua | lua* | ||
| 9/11/2020 | functional geometry | sicp 2.2.4; pict | lab 1: functional geometry | IPL/Piet | |
| 3 | 9/14/2020 | lists | sicp 2–2.1.3; 2.2–2.2.3 | map/reduce | algol/apl |
| 9/16/2020 | symbolic data | 2.3.1 | sym-diff | perl/awk | |
| 9/18/2020 | prefix evaluation | sicp 2.1.1 & 2.3.2 | lab 2: auto-diff | ||
| 4 | 9/21/2020 | environments | sicp 3.1 & 3.2 | basic/logo | |
| 9/23/2020 | mutable data structures | sicp 3--3.3.3 | assoc/tables | simula/smalltalk | |
| 9/25/2020 | lexing; postfix | sicp 2.4 & 2.5 | lab 3: postfix interpreter | forth* | |
| 5 | 9/28/2020 | eval/apply | sicp 4.1.1–4.1.3 | scheme in scheme | pascal/ada |
| 9/30/2020 | environments | sicp 4.1.3–4.1.6 | GP/sql | ||
| 10/02/2020 | scheme interpreter | "(How to Write a (Lisp) Interpreter (in Python))" by Norvig | lab 4: scheming | python* | |
| 6 | 10/05/2020 | lambda calculus | "A small (yet Turing-equivalent) language" by Might; eopl 1 | matlab/postscript/mathematica | |
| 10/07/2020 | macros; church encoding | "Church Encoding in Scheme" by Might; dybvig 3.1; Making Data Out Of Functions" from "JavaScript Allongé" by Braithwaite | 10/09/2020 | Exam 1 | |
| 7 | 10/12/2020 | representation; environments | eopl 2 | C++/bash | |
| 10/14/2020 | LET expressions | eopl 3–3.2 | sml/ocaml | ||
| 10/16/2020 | scanning & parsing | eopl appendix B | lab 5: json | tcl/ruby | |
| 8 | 10/19/2020 | scanning | CI 1–4 | eiffel/hypertalk | |
| 10/21/2020 | AST; visitor pattern | CI 5 | C#/F# | ||
| 10/23/2020 | parsing | CI 6 & "Top Down Operator Precedence" by Crockford | lab 5b: json II | javascript* | |
| 9 | 10/26/2020 | statements | CI 7 & 8 | project | erlang/coq |
| 10/28/2020 | control flow & functions | CI 9–11 | go/r | ||
| 10/30/2020 | "Built to Last" by Mar Hicks | lab 6: jLisp 1 | scala/dart | ||
| 10 | 11/02/2020 | PROCedures; scope | eopl 3.3–3.7 | agda/factor | |
| 11/04/2020 | streams | sicp 3.5 | idris/julia | ||
| 11/06/2020 | lab 7: jLisp 2 | kotlin/rust | |||
| 11 | 11/09/2020 | state | eopl 4–4.4 | clojure/nim | |
| 11/11/2020 | call by name, need & reference | eopl 4.5 | haskell/D | ||
| 11/13/2020 | laziness | sicp 4.2; laziness | |||
| 12 | 11/16/2020 | nondeterminism | sicp 4.3 | elixir; web assembly | |
| 11/18/2020 | logic programming | sicp 4.4 | Exam 2 | prolog/befunge | |
| 11/20/2020 | A unified approach to solving seven programming problems by Byrd et al.; Norvig on Unification | lab 8: logic programming | minikanren | ||
| 13 | 11/23/2020 | THANKSGIVING | |||
| 11/25/2020 | |||||
| 11/27/2020 | |||||
| 14 | 11/30/2020 | trampolining | eopl 5–5.3 | befunge/swift | |
| 12/02/2020 | exceptions & threads | eopl 5.4–5.5 | terra/hallide | ||
| 12/04/2020 | continuations | "Continuations by Example" by Might; | lab 9: continuations | php | |
| 15 | 12/07/2020 | content-addressed code | SPECIAL VISITOR | unison | |
| 12/09/2020 | ADVISING DAY | ||||
| 12/11/2020 | PROJECT DAY | ||||
| 16 | 12/14/2020 | COMPLETION WEEK | |||
| 12/16/2020 | |||||
| 12/18/2020 | Final Project Presentations | ||||