CAS 761: Generative Programming
Class: Monday, Friday 1:00-2:30, ITB 222.
The course will cover, through discussion and readings of important
papers in the area, the related topics of generative programming,
Domain Specific Languages, generic programming and
program families. 60% of the mark will be given for leading class
discussion of each assigned paper, and 40% on a small project.
Papers which have been presented:
-
Overview of generative software development, K. Czarnecki.
(presented by Yasmine - Sep. 10)
- A gentle introduction to multi-stage programming, W. Taha
(presented by Musa - Sep. 14)
- When and How to Develop Domain-Specific Languages, M. Mernik , J. Heering , A.M. Sloane.
(presented by Gabe - Sep. 17)
- Spiral, M. Püschel, F. Franchetti, Y. Voronenko.
(presented by Noel - Sep. 21)
- Lightweight Modular Staging, Tiark Rompf and Martin Odersky. (presented by Tanya - Sep. 24
- Spoofax,
by Lennart C.L. Kats, Eelco Visser.
link to PDF.
(presented by Lei - Sep. 28)
- Jetbrains' MPS by a whole
team at jetbrains.com (more resources to come).
(presented by Qirui - Oct. 1)
-
Tecton: A Framework for Specifying and Verifying Generic System Components,
D. Kapur, D.R. Musser.
(presented by Olu - Oct. 5
- Procedural generation in games:
read Automatic level generation for platform videogames using genetic algorithms
by Mourato, Prospero, Birra
[local copy], as well as
Rhythm-based level generation for 2D platformers by Smith, Treanor, Whitehead, and Mateas
[local copy].
Those papers are just 8 pages each, with many illustrations, so not so long.
If your knowledge of games and procedural generation is such that the
material doesn't seem to make much sense on its own, then read
Understanding procedural content generation: a design-centric analysis of the role of PCG in games
by Smith [local copy]; this paper does not have to read (and thus not in scope of the
summary, but feel free to refer to it if it helps).
(presented by Sasha - Oct. 15)
- A software engineering experiment in software component generation, R. Kieburtz, L. McKinney, J. Bell, J. Hook, A. Kotov, J. Lewis, D. Olive, T. Sheard, I. Smith, L. Walton.
(presented by Vajiheh - Oct. 19)
- Declaratively Programming the Mobile Web with Mobl, Zef Hemel, Eelco Visser.
(presented by Brooks - Oct. 22)
- Mechanizing the Development of Software, D. Smith
(Yasmine - Oct. 26)
- Finally tagless, partially evaluation: tagless staged interpreters for simpler typed languages, J. Carette, O. Kiselyov and C-c. Shan
(Noel and Gabe, Oct. 29 and Nov. 2)
- Design Patterns as Higher-Order Datatype-Generic Programs, J. Gibbons.
(Musa, Nov. 5th)
Papers that will be presented (i.e. claimed/assigned):
- What is generic programming? by G. Dos Reis and J. Jaarvi.
(Brooks, Nov. 9th)
- Partially static data as free extension of algebras (ICFP 2018 paper)
J. Yallop, T. von Glehn, O. Kammar
(Tanya, Nov. 12th)
- DSL implementation in MetaOCaml, Template Haskell and C++,
Czarnecki, K., J. O'Donnell, J. Striegnitz, and W. Taha.
(Wayne, Nov. 19th)
- Parsing and Reflective Printing, Bidirectionally
Z. Zhu, Y. Zhang, H-S Ko, P. Martins, J. Saraiva, Z. Hu
(Lai, Nov. 23rd)
- Program Synthesis as a generative method
E. Butler, K. Siu, A. Zook
(Sasha, Nov. 26th)
- Adding Uncertainty and Units to Quantity Types in Software Models
T. Mayerhofer, M. Wimmer, A. Vallecillo
(Vajiheh, Nov. 30th)
- Staging for Generic Programming in Space and Time
G. Ofenbeck, T. Rompf, M. Pueschel
(Olu, Dec. 3rd)
Further papers to choose from:
- Multi-stage programming with Functors and Monads: eliminating abstraction overhead from generic code, J.Carette and O. Kiselyov.
- OMeta: an Object-Oriented Language for Pattern Matching, A. Warth and I. Piumarta.
- Engineering Definitional Interpreters, Jan Midtgaard, Norman Ramsey, Bradford
Larsen.
- First-class Runtime Generation of High-performance Types using Exotypes, Zachary DeVito, Daniel Ritchie, Matt Fisher, Alex Aiken, Pat Hanrahan.
- Design of Concept Libraries for C++ A. Sutton and B. Stroustrup.
-
An Extended Comparative Study of Language Support for Generic Programming,
R. Garcia, J. Jaarvi, J. Siek, A. Lumsdaine, J. Willcock.
- paper: Typed Tagless Final Interpreters ; the
course notes are freely
downloadable. By Oleg Kiselyov.
-
Program Generation, Termination and Binding-time Analysis N.D. Jones
and A.J. Glenstrup.
- A Language for Generic Programming in the Large, J. Siek and A. Lumsdaine.
- Compiling for Run-time Code Generation F. Smith, D. Grossman,
G. Morrisett, L. Hornof and T. Jim.
- Extensible Object Models, I. Piumarta, A. Warth.
- Open, Reusable Object Models, I. Piumarta and A. Warth
- RASCAL: a Domain Specific Language for Source Code Analysis and Manipulation,
P. Klint, T. van der Storm, J.J. Vinju.
- Evaluating and comparing language workbenches (official version), by lots and lots of people.
(local copy).
Note that some of the links above are to the author's private copy of the
paper, and may not represent the final typesetting of the article by the
publisher. Links to the published version will be added too, as time
permits.
Also useful is this glossary
of terminology around generative programming. Further references can be
found on the web page
for a fall 2002 grad course by W. Taha.