Readings
The following books, papers, and documentation sections cover many of the ideas from this course. Those listed in bold are the most relevant, while the others offer more advanced techniques and applications.
1 On the big idea
"A Programmable Programming Language" https://cacm.acm.org/research/a-programmable-programming-language/
"When and How to Develop Domain-Specific Languages" https://dl.acm.org/doi/pdf/10.1145/1118890.1118892
2 On embedded DSLs
The academic literature on embedded domain specific langauges mostly employs Haskell. We will apply some of these ideas in Racket in the early part of the course.
"Modular Domain Specific Languages and Tools" https://staff.um.edu.mt/afra1/seminar/ModularDSL.pdf
"Folding Domain-Specific Languages: Deep and Shallow Embeddings" https://www.cs.ox.ac.uk/jeremy.gibbons/publications/embedding.pdf
"Higher-Order Functions for Parsing" https://nottingham-repository.worktribe.com/preview/1024973/parsing.pdf
"Modeling Interactive 3D and Multimedia Animation with an Embedded Language" https://www.usenix.org/legacy/publications/library/proceedings/dsl97/full_papers/elliott/elliott.pdf
"Domain Specific Embedded Compilers" https://dl.acm.org/doi/pdf/10.1145/331960.331977
"Polymorphic Embedding of DSLs" https://dl.acm.org/doi/pdf/10.1145/1449913.1449935
3 On writing Scheme and Racket macros
"Programming Languages: Application and Interpretation V3", the "Syntactic Sugar" section https://www.plai.org/3/2/PLAI%20Version%203.2.2%20electronic.pdf
The Racket documentation, ’Macros’ section https://docs.racket-lang.org/guide/macros.html
"Fear of Macros" https://www.greghendershott.com/fear-of-macros/
- "The Scheme Programming Language" chapters on macros:
"Macros and Languages in Racket, V2" https://rmculpepper.github.io/malr/v2/
2019 Racket Summer School lecture notes https://school.racket-lang.org/2019/plan/index.html
4 On building DSLs with macros
The syntax-spec documentation and tutorials https://docs.racket-lang.org/syntax-spec-v2/index.html
"Herbarium Racketensis: A Stroll through the Woods" http://users.eecs.northwestern.edu/~sfq833/resources/papers/herbarium_racketensis_2017.pdf
"Super 8 Languages for Making Movies (Functional Pearl)" https://www.khoury.northeastern.edu/home/stchang/pubs/acm-icfp17.pdf
"Compiled, Extensible, Multi-language DSLs" https://dl.acm.org/doi/10.1145/3674627
"Beautiful Racket" https://beautifulracket.com/
"The Anatomy of a Loop" https://www.khoury.northeastern.edu/home/shivers/papers/loop.pdf
5 On the more technical aspects of Racket’s macro system
"Languages as Libraries" https://www2.ccs.neu.edu/racket/pubs/pldi11-thacff.pdf
"Composable and Compilable Macros" https://www-old.cs.utah.edu/plt/publications/macromod.pdf
"Binding as Sets of Scopes" https://users.cs.utah.edu/plt/scope-sets/
"Fortifying Macros" https://www2.ccs.neu.edu/racket/pubs/c-jfp12.pdf
"Macros that Work Together" https://www-old.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf