High-level list of subjects
- Syntax, Grammars, Simple Parsing
- Semantics, Evaluation
- Bindings, Substitution
- First Class Functions, Environments, Closures
- Dynamic vs Lexical Scope
- Meta-circular Interpreters
- The Fixpoint Combinator, Lambda Calculus, Church Encoding
- Recursive Scope, Cyclic Values, Boxes and Mutation
- Implementing Variable Mutation, State and Environments
- Simple Compilation
- Lazy Evaluation, Call by Need and by Name, Side Effects in a Lazy Language
- Designing DSLs, Syntax Transformations: Macros
- Macros in Racket, Implementing Languages in Racket
- Types and Type Systems, Soundness, Polymorphism
- Continuations, Continuation Passing Style, Continuation in Racket
Detailed list
This is an approximate list of topics for each class that we will cover. The dates are not specific since the pace will vary, but each item roughly corresponds to to one 1.5h lecture, so expect to cover about two bullets every week:
- Introduction to PL and to Racket
- Grammars, BNF, Typed Racket, Simple Parsing, The AE Language
- Semantics: Implementing an Evaluator for AE, Intro to Typed Racket
- The need For Bindings, Bindings & Substitution, The WAE Language, Formal Specs
- Lazy vs Eager, de Bruijn Indexes, First Class Functions, Implementing FLANG
- More on Implementing First-Class Functions, Racket Functions:
lambda
- “Point-Free” Programming, Substitution Caches, Dynamic vs Lexical Scope
- Implementing Lexical Scope: Closures and Environments, More Closures
- Types of Evaluators, Feature Embedding, Recursion without the Magic, the Y Combinator
- The Property of Y, Typing Y, Minimal Language: Lambda Calculus
- Lambda Calculus cont., Alternative Encoding
- Recursive Binder:
letrec
, Implementing Recursion usingletrec
, Boxes and Mutation rec
Using a Cyclic Structure, Variable Mutation, State and Environments, Implementing Objects- Toy, “Compilation” and Partial Evaluation
- Compilation contd, Lazy evaluation in Racket
- Lazy Programming, Call by Need vs by Name
- Implementing Laziness, Sloth, Implementing Call by Need, Side Effects in a Lazy Language
- Designing DSLs
- Syntax Transformations: Macros, Macro Problems, Racket Macros, Implementing Laziness in Racket
- Recursive Macros, Low Level Macros
- Types, What are Types?, The Picky Language, Typing Control
- Implementing Picky, Recursion, Data
- Type Soundness, Polymorphism
- Web Programming, Introduction to Continuations, Transforming Code
- Automatic Continuation Converter, Continuations as a Language Feature
- Continuation in Racket, Implementing New Features with Continuations