Domain-Specific Languages: An Annotated Bibliography

Arie van Deursen, Paul Klint, Joost Visser. Domain-Specific Languages: An Annotated Bibliography. SIGPLAN Notices, 35(6):26-36, 2000. [doi]

Review: Domain-Specific Languages: An Annotated Bibliography

Posted by Ricky T. Lindeman on 30/06/2010 15:08, last updated on 30/06/2010 16:29 (Public)

“Domain-Specific Languages: An Annotated Bibliography”

Title: Domain-Specific Languages: An Annotated Bibliography

Authors: Deursen, Arie van and Klint, Paul and Visser, Joost

Review and Summary

Deursen et al. mention that the concepts of domain specific languages is old but systematic study of them has started just recently. Therefore they will dis- cuss the following topics: terminology, risks and opportunities, example DSL’s, design methodology and DSL implementation strategies. Their bibliography contains a selection of over 75 key publications in the field of DSL’s, all having an expected major importance in the DSL field for several years despite current ongoing research.

In section 2, “Terminology”, the authors propose the following definition for DSL’s: “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.” They mention that the term “problem domain” is vague and do not define this term any further but instead refer to a list of example DSL’s in section 4, Ex- ample DSL’s. The term “problem domain” or the reason of the vagueness could be further explained, by mentioning the problems encountered with finding the correct scope of the problem domain or with extracting the domain knowledge.

In the following section, “Risks and Opportunities”, the benefits and disad- vantages of using a DSL are motivated, however not all reasons are motivated with references. For example, the costs of education for DSL users is considered a disadvantage, however, this is not motivated with a reference to a case-study. The section ends with references to other comparisons of software approaches, a costs and benefits analysis from the software maintenance perspective and a comparison of approaches based on software reuse.

Section 4, “Example DSL’s”, lists the best-known DSL’s such as PIC, LEX, YACC as described by Bentley [1], and others such as SQL, BNF and HTML. The section ends with a grouping of DSL’s for a certain domain in several domain area’s.

In section 5, “DSL Design Methodology”, the DSL development process is discussed. The process is divided in a total of 7 steps, based on Cleaveland [2] and a previous paper of Deursen et al. [3], and is divided in 3 groups: Analysis, Implementation, and Use. The given process is not complete:

  • Mernik et al. suggest adding an extra step even before the analysis called the decision phase, in which the economic viability is researched [4].
  • Mernik et al. also add an extra design step between the analysis and implementation phase. In this design step the DSL is designed. This design is often based on an existing language or a new language is created from scratch [4].
  • Visser proposes an extra step at the end of the process called the mainte- nance phase, because DSL’s are often subject to change [5]. This section also discusses steps 1 to 4, which are used to gather all required knowledge from the application domain. Several domain analysis methodologies are mentioned which can be used to extract the knowledge. An interesting side note is that the authors view a DSL as the final and most mature phase of the evolution of an object-orientated application framework. Reverse engineering techniques may thus also come into play when extracting knowledge from legacy systems.

In the following section, “DSL Implementation”, steps 5 and 6 of the previ- ous mentioned development process are clarified. Two different implementation approaches are identified:

  • Interpretation or compilation approach
  • Language extension approach The authors do not mention (or the terms were not introduced before the time of writing) that these two approaches create DSL languages that are also known as external DSL’s and internal (or embedded) DSL’s, respectively. Also the base language that is extended is also known as the host language, because it hosts the DSL. Furthermore , Deursen et al. mention three ways to reuse the implementation of the base language when implementing a language extension:
  • Embedded languages/domain-specific libraries

  • Preprocessing or macro processing
  • Extensible compiler/interpreter.

Again, Mernik et al. note that language specialization, the opposite of extension, is also a viable option. In this case the base language is restricted to a small subset of features. The section ends with another implementation technique: Use a DSL to define aspects in aspect oriented programming. This technique however easily fits into the language extension category.


The bibliography provides a good overview of the most important information in the DSL field, although it is sometimes incomplete because of the ongoing re- search as mentioned by the authors in the introduction. Furthermore, the paper is largely theoretical, lacking examples, case studies or guides on how to create DSL’s. Still, this bibliography can be used as a comprehensive introduction to DSL’s, especially due to the references annotated with a summary.


[1] Jon Bentley. Programming pearls: little languages. 29:711–721, 1986.

[2] J. Craig Cleaveland. Building application generators. IEEE Softw., 5(4):25– 33, 1988.

[3] Arie van Deursen and Paul Klint. Little languages: little maintenance? Journal of Software Maintenance, 10(2):75–92, 1998.

[4] Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Comput. Surv., 37(4):316–344, 2005.

[5] Eelco Visser. Webdsl: A case study in domain-specific language engineer- ing. In Ralf Lmmel, Joost Visser, and Joo Saraiva, editors, Generative and Transformational Techniques in Software Engineering II, International Summer School, GTTSE 2007, Braga, Portugal, July 2-7, 2007. Revised Papers, volume 5235 of Lecture Notes in Computer Science, pages 291– 373. Springer, 2007.