Domain-Specific Language Design
Domain Specific Languages are languages with high expressivity for a specific, narrow problem domain.
They are a powerful tool for software engineering, because they can be tailor-made for a specific
class of problems. However, because of the large degree of freedom in designing DSLs, and because they are supposed to cover the right domain, completely, and at the right abstraction level, DSL design is also hard. In this tutorial I present a framework for describing, characterizing and guiding the design of external domain specific languages. I identify eight design dimensions that span the space within which DSLs are designed: expressivity, coverage, semantics, separation of concerns, completeness, reusable paradigms, language modularization and syntax. I illustrate design alternatives along each of these dimensions with examples from four case studies and discuss the drivers that lead to particular design decisions. The case studies are: a component architecture DSL, a DSL for describing refrigerator cooling algorithms, a pension plan specification language and a suite of domain-specific extensions to C. The tutorial will be slides, demos, and (hopefully a lot of) discussion.