1. Introduction to DSLs

"A domain-specific language (DSL) is a programming language or executable specification language that offers, through appropriate notations and abstractions, expressive power focused on, and usually restricted to, a particular problem domain.", at "Domain-Specific Languages: An Annotated Bibliography" Arie van Deursen - Paul Klint - Joost Visser

In all branches of science and engineering one can distinguish between approaches that are generic and those that are specific. A generic approach provides a general solution for many problems in a certain area, but such a solution may be suboptimal. A specific approach provides a much better solution for a smaller set of problems. One of the incarnations of this dichotomy in computer science is the topic of this annotated bibliography: domain-specific languages versus generic programming languages.

Of course, this is not a new topic. The older programming languages (Cobol, Fortran, Lisp) all came into existence as dedicated languages for solving problems in a certain area (respectively business processing, numeric computation and symbolic processing). Gradually they have evolved into general purpose languages and over and over again the need for more specialized language support to solve problems in well-defined application domains has resurfaced. Over time, the following solutions have been tried:

Subroutine libraries contain subroutines that perform related tasks in well-defined domains like, for instance, differential equations, graphics, user-interfaces and databases. The subroutine library is the classical method for packaging reusable domain-knowledge.
Object-oriented frameworks and component frameworks continue the idea of subroutine libraries. Classical libraries have a flat structure, and the application invokes the library. In object-oriented frameworks it is often the case that the framework is in control, and invokes methods provided by the application-specific code [42,32].
A domain-specific language (DSL) is a small, usually declarative, language that offers expressive power focused on a particular problem domain. In many cases, DSL programs are translated to calls to a common subroutine library and the DSL can be viewed as a means to hide the details of that library.

Although many domain-specific languages have been designed and used over the years, the systematic study of domain-specific languages has only started more recently. This bibliography has grown out of our own research needs to make an inventory of the field and provides references to research that deals with the following topics: terminology (Section 2), risks and opportunities (Section 3), example DSLs (Section 4), DSL design methodology (Section 5), and DSL implementation strategies (Section 6). The papers listed are annotated with summaries, which in turn are cross-referenced to related papers.