CAS 761: Generative Programming (Fall 2020)

Class: Tuesday 14:30-16:00, Friday 10:30-12:00, MS Teams.

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.

In more detail about the papers:

Papers that will be presented:

  1. A survey of Metaprogramming Languages, Y. Lilis, A. Savidis. Also available under Files on Teams. (section 1-2: Brendan Fallon on Fri. Sep. 18, rest: Rehan Theiveehathasan on Tues. Sep 22).
  2. Overview of generative software development, K. Czarnecki. (Peter Michalski, Fri. Sep. 25).
  3. When and How to Develop Domain-Specific Languages, M. Mernik , J. Heering , A.M. Sloane. (Songyi, Tues. Sep 29)
  4. paper: Typed Tagless Final Interpreters ; the course notes are freely downloadable. By Oleg Kiselyov. (Yu-Shiuan, Sections 1-2 on Fri. Oct. 2, Jason, Section 3 on Fri. Oct 9th)
  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). (Xin, Tues. Oct. 6th)
  6. RASCAL: a Domain Specific Language for Source Code Analysis and Manipulation, P. Klint, T. van der Storm, J.J. Vinju. (Naveen, Fri. Oct. 16th)
  7. Software Development by Refinement, Dusko Pavlovic and Douglas R. Smith. Here's a direct link to a PDF if the other one doesn't work. (Jacques, Tues. Oct. 20th)
  8. Spiral, M. PĆ¼schel, F. Franchetti, Y. Voronenko. (Rehan, Fri. Oct. 23rd)
  9. Jetbrains' MPS by a whole team at jetbrains.com. (Naveen, Tues Oct. 27th)
  10. Lessons learned from developing mbeddr: a case study in language engineering with MPS Markus Voelter, Bend Kolb, Tamas Szabo, Daniel Ratiu, Arie van Deursen. (Brendan, Fri. Oct. 30th)
  11. What is generic programming? by G. Dos Reis and J. Jaarvi. (Jason, Tues Nov. 3rd)
  12. Design Patterns as Higher-Order Datatype-Generic Programs, J. Gibbons. (Xin, Fri. Nov. 6th)
  13. Program Synthesis as a generative method E. Butler, K. Siu, A. Zook (Peter, Tues. Nov. 10th)
  14. Lightweight Modular Staging, Tiark Rompf and Martin Odersky. (Sharon, Fri. Nov. 13th)
  15. Adding Uncertainty and Units to Quantity Types in Software Models T. Mayerhofer, M. Wimmer, A. Vallecillo (Brendan, Tues. Nov. 17th)
  16. Tutorial on Online Partial Evaluation" W. R. Cook, R. Laemmel. These notes are useful for a bit more context. (Rehan, Fri. Nov. 20th)
  17. Staging for Generic Programming in Space and Time G. Ofenbeck, T. Rompf, M. Pueschel (Peter, Tues. Nov. 24th)
  18. Answer Set Programming for Procedural Content Generation: A Design Space Approach A.M.Smith, M. Mateas (Xin, Fri. Nov. 27th)
  19. OTT - code, we will read the ICFP version of Ott: Effective Tool Support for the Working Semanticist, Peter Sewell, Francesco Zappa Nardelli, Scott Owens, Gilles Peskine, Thomas Ridge, Susmit Sarkar, Rok Strnisa, as the journal version is 52 pages! (Naveen, Tues. Dec 1rst)
  20. Parsing and Reflective Printing, Bidirectionally Z. Zhu, Y. Zhang, H-S Ko, P. Martins, J. Saraiva, Z. Hu (Jason, Fri. Dec. 4th)
  21. Partially static data as free extension of algebras (short paper) (PEPM paper; there is a longer version at ICFP) J. Yallop, T. von Glehn, O. Kammar (Sharon, Tues., Dec. 8th)

Papers that may be picked from:

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.