teaching
CMSC 305
Design of Programming Languages
overview | logistics | schedule | assignments | presentations | resourcesTentative Schedule (changes frequently)
week | date | topics | readings | work assigned | language presentation |
1 | 9/03/2019 | History of Lisp; introduction; metaprograms | syllabus; LISP 1.5 Programmer's Manual pg 1--14 | (hello 'scheme) | |
9/05/2019 | expressions | sicp 1.1 | prefix | scheme* | |
9/06/2019 | recursion | sicp 1.2 | lab 0: generating expressions | ||
2 | 9/10/2019 | higher order functions | sicp 1.3 | compose/curry/tap | fortran/cobol |
9/12/2019 | closures | lua 6; "Taste of Functional Programming" (lua 9.4); "An Experiment in Software Prototyping Productivity" Sec. 6.1; Evolution of Lua | lua* | ||
9/13/2019 | functional geometry | sicp 2.2.4; pict | lab 1: functional geometry | IPL/Piet | |
3 | 9/17/2019 | lists | sicp 2–2.1.3; 2.2–2.2.3 | map/reduce | algol/apl |
9/19/2019 | environments | sicp 3.1–3.2 | assoc/tables | simula/smalltalk | |
9/20/2019 | lexing; postfix | sicp 3.3 | lab 2: postfix interpreter | forth* | |
4 | 9/24/2019 | symbolic data | 2.3.1 | sym-diff | snobol/awk |
9/26/2019 | differentation | sicp 2.1.1 & 2.3.2 | basic/logo | ||
9/27/2019 | lab 3: auto-diff | ||||
5 | 10/01/2019 | eval/apply | sicp 4.1.1–4.1.3 | scheme in scheme | pascal/ada |
10/03/2019 | environments | sicp 4.1.3–4.1.6 | intercal/sql | ||
10/04/2019 | scheme interpreter | "(How to Write a (Lisp) Interpreter (in Python))" by Norvig | lab 4: scheming | python* | |
6 | 10/08/2019 | lambda calculus | "A small (yet Turing-equivalent) language" by Might; eopl 1 | matlab/postscript | |
10/10/2019 | macros; church encoding | dybvig 3.1 & "Church Encoding in Scheme" by Might; Making Data Out Of Functions" from "JavaScript Allongé" by Braithwaite | javascript* | 10/11/2019 | Exam 1 |
7 | 10/15/2019 | Fall Break | |||
10/17/2019 | representation | eopl 2.1–2.3 | C++/bash | ||
10/18/2019 | define-datatype | eopl 2.4–2.5 | objective-c/hypertalk | ||
8 | 10/22/2019 | expressions | eopl 3.1–3.2 | sml/ocaml | |
10/24/2019 | procedures | eopl 3.3–3.5 | erlang/coq | ||
10/25/2019 | scanning & parsing | eopl appendix B | lab 5: json | tcl/ruby | |
9 | 10/29/2019 | state (explicit ref) | eopl 4.1–4.2 | perl/mathematica | |
10/31/2019 | implicit ref | eopl 4.3–4.4 | R/GP | ||
11/01/2019 | pratt parsing | "Top Down Operator Precedence" by Crockford; "Lexical Analysis in Racket" by Might | lab 5b: json II | C#/F# | |
10 | 11/05/2019 | streams | sicp 3.5 | ||
11/07/2019 | laziness; call by name, need & reference | eopl 4.5; sicp 4.2 | project proposal | haskell/D | |
11/08/2019 | lab 6: lazy lab | scala/dart | |||
11 | 11/12/2019 | ||||
11/14/2019 | nondeterminism | sicp 4.3 | agda/factor | ||
11/15/2019 | continuations | "Continuations by Example" by Might; eopl 5.1 | lab 7: continuations | kotlin/rust | |
12 | 11/19/2019 | trampolining | eopl 5.2–5.3 | clojure/nim | |
11/21/2019 | exceptions | eopl 5.4 | go/groovy | ||
11/22/2019 | threads | sicp 3.4; eopl 5.5 | unlambda/swift | ||
13 | 11/26/2019 | Exam 2 | |||
11/28/2019 | THANKSGIVING | ||||
11/29/2019 | |||||
14 | 12/03/2019 | logic programming | sicp 4–4.4.1 | prolog/befunge | |
12/05/2019 | unification | sicp 4.4.2–4.4.3; Norvig on Unification | elixir/web assembly | ||
12/06/2019 | A unified approach to solving seven programming problems" by Byrd et al. | lab 8: logic programming | minikanren | ||
15 | 12/10/2019 | types | eopl 7.1–7.3; typed racket | purescript/typescript | |
12/12/2019 | eopl 7.4; | idris/julia | |||
12/13/2019 | project | terra/hallide | |||
16 | 12/17/2019 | Final Project Presentations | |||
12/19/2019 | |||||
12/20/2019 |