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 |