CAS 761: Generative Programming
Class: Tuesday 1:00-2:30, Thursday 3:00-4: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 for this year, and leader:
-
Overview of generative software development, K. Czarnecki.
(Dan)
- A gentle introduction to multi-stage programming, W. Taha
(Geneva)
- When and How to Develop Domain-Specific Languages, M. Mernik , J. Heering , A.M. Sloane
(Salman)
- 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.
(Curtis)
- Mechanizing the Development of Software, D. Smith (Dan)
-
Tecton: A Framework for Specifying and Verifying Generic System Components,
D. Kapur, D.R. Musser. (Geneva)
- Declaratively Programming the Mobile Web with Mobl, Zef Hemel, Eelco Visser.
(Salman)
- Spiral, M. Püschel, F. Franchetti, Y. Voronenko.
(Curtis).
- DSL implementation in MetaOCaml, Template Haskell and C++,
Czarnecki, K., J. O'Donnell, J. Striegnitz, and W. Taha.
(Dan)
- Multi-stage programming with Functors and Monads: eliminating abstraction overhead from generic code, J.Carette and O. Kiselyov. (Geneva for first 1/2, then Curtis.
- OMeta: an Object-Oriented Language for Pattern Matching, A. Warth and I. Piumarta.
(Salman)
- Lightweight Modular Staging, Tiark Rompf and Martin Odersky. (Dan).
- Engineering Definitional Interpreters, Jan Midtgaard, Norman Ramsey, Bradford
Larsen. (Geneva).
- First-class Runtime Generation of High-performance Types using Exotypes, Zachary DeVito, Daniel Ritchie, Matt Fisher, Alex Aiken, Pat Hanrahan. (Curtis).
- Design of Concept Libraries for C++ A. Sutton and B. Stroustrup. (Salman)
- Design Patterns as Higher-Order Datatype-Generic Programs, J. Gibbons. (Dan)
Here are some of the papers which were used in 2012 (apart from those above):
-
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 (only accessible at McMaster); the
course notes are freely
downloadable. By Oleg Kiselyov.
- Finally tagless, partially evaluation: tagless staged interpreters for simpler typed languages, J. Carette, O. Kiselyov and C-c. Shan
-
Program Generation, Termination and Binding-time Analysis N.D. Jones
and A.J. Glenstrup.
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.
Here are some additional papers in the area. Some will make the
reading list, but not all.
- 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.
- What is generic programming? by G. Dos Reis and J. Jaarvi.
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.
Probably need to add some papers on FFTW, ATLAS, SPIRAL, etc. And some
recent ones using Scala for DSLs.