When and how to develop domain-specific languages

Domain-specific languages (DSLs) are languages tailored to a specific application domain. They offer substantial gains in expressiveness and ease of use compared with general-purpose programming languages in their domain of application. DSL development is hard, requiring both domain knowledge and language development expertise. Few people have both. Not surprisingly, the decision to develop a DSL is often postponed indefinitely, if considered at all, and most DSLs never get beyond the application library stage.Although many articles have been written on the development of particular DSLs, there is very limited literature on DSL development methodologies and many questions remain regarding when and how to develop a DSL. To aid the DSL developer, we identify patterns in the decision, analysis, design, and implementation phases of DSL development. Our patterns improve and extend earlier work on DSL design patterns. We also discuss domain analysis tools and language development systems that may help to speed up DSL development. Finally, we present a number of open problems.

[1]  Viljem Zumer,et al.  Multiple Attribute Grammar Inheritance , 2000, Informatica.

[2]  Jack Dongarra,et al.  Special Issue on Program Generation, Optimization, and Platform Adaptation , 2005, Proc. IEEE.

[3]  Krzysztof Czarnecki,et al.  Generative Programming: Methods, Techniques, and Applications , 2002, ICSR.

[4]  John W. Backus,et al.  The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference , 1959, IFIP Congress.

[5]  John Aycock,et al.  The Design and Implementation of SPARK, a Toolkit for Implementing Domain-Specific Languages , 2002 .

[6]  S. Krishnan,et al.  2 XLANG : Web Services for Business Process Design , 2002 .

[7]  David A Chappell Understanding ActiveX and OLE , 1996 .

[8]  Charles Consel,et al.  Safe and efficient active network programming , 1998, Proceedings Seventeenth IEEE Symposium on Reliable Distributed Systems (Cat. No.98CB36281).

[9]  James R. Larus,et al.  Facile: a language and compiler for high-performance processor simulators , 2001, PLDI '01.

[10]  Charles H. Kriebel,et al.  Review of "Programming Languages: History and Fundamentals, by (Miss) Jean E. Sammet." Prentice-Hall, Inc. (1969) , 1969, DATB.

[11]  Kenneth Slonneger,et al.  Formal syntax and semantics of programming languages - a laboratory based approach , 1995 .

[12]  Eelco Visser,et al.  Program Transformation with Stratego/XT: Rules, Strategies, Tools, and Systems in Stratego/XT 0.9 , 2003, Domain-Specific Program Generation.

[13]  J. Davenport Editor , 1960 .

[14]  MernikMarjan,et al.  When and how to develop domain-specific languages , 2005 .

[15]  Merijn de Jonge Source Tree Composition , 2002, ICSR.

[16]  Anthony Finkelstein,et al.  Towards an aspect weaving BPEL engine , 2004 .

[17]  Calvin Lin,et al.  An annotation language for optimizing software libraries , 1999, DSL '99.

[18]  Alfonso Pierantonio,et al.  Tool Support for Language Design and Prototyping with Montages , 1999, CC.

[19]  Charles Consel,et al.  Architecture Software Using: A Methodology for Language Development , 1998, PLILP/ALP.

[20]  Conal Elliott,et al.  An Embedded Modeling Language Approach to Interactive 3D and Multimedia Animation , 1999, IEEE Trans. Software Eng..

[21]  Ted J. Biggerstaff,et al.  A perspective of generative reuse , 1998, Ann. Softw. Eng..

[22]  Don S. Batory,et al.  Reengineering a complex application using a scalable data structure compiler , 1994, SIGSOFT '94.

[23]  Peter Sestoft,et al.  Partial evaluation and automatic program generation , 1993, Prentice Hall international series in computer science.

[24]  Ted J. Biggerstaff,et al.  Software reusability: vol. 1, concepts and models , 1989 .

[25]  Valdis Berzins,et al.  The Realizable Benefits of a Language Prototyping Language , 1988, IEEE Trans. Software Eng..

[26]  Jon Louis Bentley,et al.  Programming pearls: little languages , 1986, CACM.

[27]  Shigeru Chiba,et al.  A metaobject protocol for C++ , 1995, OOPSLA.

[28]  Holger M. Kienle,et al.  smgn: Rapid Prototyping of Small Domain-Specific Languages , 2002 .

[29]  Michael R. Levy Web programming in guide , 1998 .

[30]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[31]  Nils Klarlund,et al.  A Domain-Specific Language for Regular Sets of Strings and Trees , 1997, IEEE Trans. Software Eng..

[32]  Viljem Zumer,et al.  Design and implementation of simple object description language , 2001, SAC.

[33]  Jarle Aaram,et al.  Fourth Generation Languages , 1988, Computer-Aided Production Management.

[34]  Uwe Kastens,et al.  Configuring component-based specifications for domain-specific languages , 2001, Proceedings of the 34th Annual Hawaii International Conference on System Sciences.

[35]  William M. Waite,et al.  Maptool - Supporting Modular Syntax Development , 1996, CC.

[36]  Paul Klint,et al.  Semantics of programming languages: a tool-oriented approach , 1999, SIGP.

[37]  David A. Padua,et al.  SPL: a language and compiler for DSP algorithms , 2001, PLDI '01.

[38]  Christopher W. Pidgeon,et al.  DMS®: Program Transformations for Practical Scalable Software Evolution , 2002, IWPSE '02.

[39]  Bonnie A. Nardi,et al.  A Small Matter of Programming: Perspectives on End User Computing , 1993 .

[40]  Marco Antoniotti,et al.  SHIFT and SMART-AHS: A Language for Hybrid System Engineering Modeling and Simulation , 1997, DSL.

[41]  Matthias Felleisen,et al.  Fostering Little Languages , 2004 .

[42]  Viljem Zumer,et al.  Implementation of multiple attribute grammar inheritance in the tool LISA , 1999, SIGP.

[43]  João Saraiva,et al.  Embedding domain specific languages in the attribute grammar formalism , 2003, 36th Annual Hawaii International Conference on System Sciences, 2003. Proceedings of the.

[44]  Uwe Kastens,et al.  Compositional design and implementation of domain-specific languages , 1998, Systems Implementation 2000.

[45]  Lloyd H. Nakatani Jargons and Infocentrism , 2007 .

[46]  Robert van Engelen,et al.  ATMOL: A Domain-Specific Language for Atmospheric Modeling , 2001 .

[47]  Holger M. Kienle,et al.  : Rapid Prototyping of Small Domain-Specific Languages , 2002 .

[48]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming, 2nd Edition , 2002, Addison-Wesley component software series.

[49]  Katsuhiko Gondow,et al.  Towards ANSI C Program Slicing using XML , 2002, Electron. Notes Theor. Comput. Sci..

[50]  Peter J. Ashenden,et al.  The Designer's Guide to VHDL , 1995 .

[51]  Todd L. Veldhuizen,et al.  Using C++ template metaprograms , 1996 .

[52]  Keith H. Bennett,et al.  Software maintenance and evolution: a roadmap , 2000, ICSE '00.

[53]  Yannis Smaragdakis,et al.  JTS: tools for implementing domain-specific languages , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[54]  Yannis Smaragdakis,et al.  DiSTiL: A Transformation Library for Data Structures , 1997, DSL.

[55]  Didier Parigot,et al.  SmartTools: a Generator of Interactive Environment Tools , 2001, Electron. Notes Theor. Comput. Sci..

[56]  Claus Brabrand,et al.  The metafront System: Extensible Parsing and Transformation , 2003, LDTA@ETAPS.

[57]  Danny Soroker,et al.  Extension mechanisms in Montana , 1997, Proceedings of the Eighth Israeli Conference on Computer Systems and Software Engineering.

[58]  Robert D. Tennent,et al.  Language design methods based on semantic principles , 1977, Acta Informatica.

[59]  Giuseppe De Giacomo History of Programming Languages , 2006 .

[60]  James R. Cordy,et al.  The TXL Programming Language , 1995 .

[61]  Kyo Chul Kang,et al.  Feature-Oriented Domain Analysis (FODA) Feasibility Study , 1990 .

[62]  Thomas Ball,et al.  Mawl: A Domain-Specific Language for Form-Based Services , 1999, IEEE Trans. Software Eng..

[63]  David Chappell,et al.  Understanding ActiveX and OLE: a guide for developers and managers , 1996 .

[64]  Joe Leben,et al.  4GL: fourth-generation languages; vol. II: representative 4GLs , 1986 .

[65]  Todd L. Veldhuizen,et al.  Expression templates , 1996 .

[66]  Kevin A. Schneider,et al.  AUI: a programming language for developing plastic interactive software , 2002, Proceedings of the 35th Annual Hawaii International Conference on System Sciences.

[67]  David S. Wile,et al.  Lessons learned from real DSL experiments , 2003, 36th Annual Hawaii International Conference on System Sciences, 2003. Proceedings of the.

[68]  Samuel N. Kamin Research on Domain-specific Embedded Languages and Program Generators , 1997, US-Brazil Joint Workshops on the Formal Foundations of Software Systems.

[69]  Anindya Basu,et al.  A Language-Based Approach to Protocol Construction , 1998 .

[70]  Charles W. Krueger,et al.  Software reuse , 1992, CSUR.

[71]  Xiang Yu,et al.  ESP: a language for programmable devices , 2001, PLDI '01.

[72]  共立出版株式会社 コンピュータ・サイエンス : ACM computing surveys , 1978 .

[73]  Michael Halvorson Microsoft Visual Basic .Net Step by Step , 2002 .

[74]  James R. Cordy,et al.  TXL - A Language for Programming Language Tools and Applications , 2004, LDTA@ETAPS.

[75]  David M. Weiss,et al.  Software Product Line Engineering , 2005, SEKE.

[76]  Pablo E. Martínez López,et al.  HyCom: a domain specific language for hypermedia application development , 2001, Proceedings of the 34th Annual Hawaii International Conference on System Sciences.

[77]  Stephen Gilmore,et al.  Language Constructs for Describing Features , 2001, Springer London.

[78]  John Launchbury,et al.  On embedding a microarchitectural design language within Haskell , 1999, ICFP '99.

[79]  I.D. Baxter,et al.  DMS/spl reg/: program transformations for practical scalable software evolution , 2004, Proceedings. 26th International Conference on Software Engineering.

[80]  Martin Odersky,et al.  Domain-Specific Program Generation , 2004, Lecture Notes in Computer Science.

[81]  Paul Klint,et al.  The Syntax Definition Formalism SDF , 2007 .

[82]  Mark Simos,et al.  Weaving the model web: a multi-modeling approach to concepts and features in domain engineering , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[83]  Krzysztof Czarnecki,et al.  Generative Programming , 2001, ECOOP Workshops.

[84]  Michel Augeraud,et al.  BDL: A Specialized Language for Per-Object Reactive Control , 1999, IEEE Trans. Software Eng..

[85]  J. Buffenberger,et al.  A language for software subsystem composition , 2001 .

[86]  Anne Rogers,et al.  Hancock: a language for processing very large-scale data , 1999, DSL '99.

[87]  Emin Gün Sirer,et al.  Using production grammars in software testing , 1999, DSL '99.

[88]  Jason Hickey,et al.  Phobos: a front-end approach to extensible compilers , 2003, 36th Annual Hawaii International Conference on System Sciences, 2003. Proceedings of the.

[89]  Arie van Deursen,et al.  Domain-specific languages: an annotated bibliography , 2000, SIGP.

[90]  Andrew W. Appel,et al.  The Zephyr Abstract Syntax Description Language , 1997, DSL.

[91]  James M. Neighbors,et al.  The Draco Approach to Constructing Software from Reusable Components , 1984, IEEE Transactions on Software Engineering.

[92]  Calvin Lin,et al.  Broadway: A Compiler for Exploiting the Domain-Specific Semantics of Software Libraries , 2005, Proceedings of the IEEE.

[93]  Anthony M. Sloane,et al.  Post-design domain-specific language embedding: a case study in the software engineering domain , 2002, Proceedings of the 35th Annual Hawaii International Conference on System Sciences.

[94]  Will Tracz,et al.  Software development using domain-specific software architectures: CDRl A011—a curriculum module in the SEI style , 1995, SOEN.

[95]  David M. Weiss,et al.  Software Product-Line Engineering: A Family-Based Software Development Process , 1999 .

[96]  Thomas J. Bergin,et al.  History of programming languages---II , 1996 .

[97]  David S. Wile,et al.  Supporting the DSL Spectrum , 2001 .

[98]  Daniel Hoffman,et al.  Commonality and Variability in Software Engineering , 1998, IEEE Softw..

[99]  Anthony M. Sloane,et al.  Eli: a complete, flexible compiler construction system , 1992, CACM.

[100]  Luca Cardelli,et al.  Service Combinators for Web Computing , 1999, DSL.

[101]  Sibylle Schupp,et al.  User-Extensible Simplification - Type-Based Optimizer Generators , 2001, CC.

[102]  Rubén Prieto-Díaz,et al.  Software reusability , 1993 .

[103]  Eelco Visser,et al.  Concrete syntax for objects: domain-specific language embedding and assimilation without restrictions , 2004, OOPSLA '04.

[104]  Arie van Deursen,et al.  REPORT RAPPORT , 1997 .

[105]  David S. Wile Lessons learned from real DSL experiments , 2004, Sci. Comput. Program..

[106]  L. Stein,et al.  OWL Web Ontology Language - Reference , 2004 .

[107]  Krzysztof Czarnecki,et al.  Generative programming - methods, tools and applications , 2000 .

[108]  James Martin,et al.  Fourth generation languages , 1985 .

[109]  Paul Hudak,et al.  Building domain-specific embedded languages , 1996, CSUR.

[110]  Jean E. Sammet,et al.  Programming languages - history and fundamentals , 1969, Prentice-Hall series in automatic computation.

[111]  Magne Haveraaen,et al.  Domain-Specific Optimisation with User-Defined Rules in CodeBoost , 2003, Electron. Notes Theor. Comput. Sci..

[112]  Daniel G. Bobrow,et al.  Book review: The Art of the MetaObject Protocol By Gregor Kiczales, Jim des Rivieres, Daniel G. and Bobrow(MIT Press, 1991) , 1991, SGAR.

[113]  Richard L. Wexelblat History of programming languages I , 1978 .

[114]  Roger F. Crew ASTLOG: A Language for Examining Abstract Syntax Trees , 1997, DSL.

[115]  Stephen Gilmore,et al.  Language constructs for describing features : proceedings of the FIREworks workshop , 2001 .

[116]  Tim Sheard,et al.  A software engineering experiment in software component generation , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[117]  Michael Denny Ontology Building: A Survey of Editing Tools , 2002 .

[118]  Ted J. Biggerstaff,et al.  Panel: Linking doamin analysis and domain implementation , 1998 .

[119]  Simon Peyton Jones,et al.  Playing by the rules: rewriting as a practical optimisation technique in GHC , 2001 .

[120]  Gabor Karsai,et al.  An examination of DSLs for concisely representing model traversals and transformations , 2003, 36th Annual Hawaii International Conference on System Sciences, 2003. Proceedings of the.

[121]  Frederick P. Brooks Keynote address: language design as design , 1996 .

[122]  J. Craig Cleaveland,et al.  Building application generators , 1988, IEEE Software.

[123]  Sjouke Mauw,et al.  Language-driven system design , 2002, Proceedings of the 35th Annual Hawaii International Conference on System Sciences.

[124]  Jim Buffenbarger,et al.  A language for software subsystem composition , 2001, Proceedings of the 34th Annual Hawaii International Conference on System Sciences.

[125]  Arie van Deursen,et al.  Domain-specific language design requires feature descriptions , 2002 .

[126]  Lars S. Nyland,et al.  KHEPERA: A System for Rapid Implementation of Domain Specific Languages , 1997, DSL.

[127]  Matthias Felleisen,et al.  Building Little Languages With Macros , 2004 .

[128]  Samuel N. Kamin,et al.  A Special-Purpose Language for Picture-Drawing , 1997, DSL.

[129]  Giancarlo Guizzardi,et al.  An ontological approach to domain engineering , 2002, SEKE '02.

[130]  James Jennings,et al.  Verischemelog: Verilog embedded in Scheme , 1999, DSL '99.

[131]  Charles Consel,et al.  Domain-Specific Languages: From Design to Implementation Application to Video Device Drivers Generation , 1999, IEEE Trans. Software Eng..

[132]  D. W. Barron,et al.  The World of Scripting Languages , 2000 .

[133]  John John Gough,et al.  Compiling for the .NET Common Language Runtime , 2001 .

[134]  Faizan Javed,et al.  Extracting grammar from programs: evolutionary approach , 2005, SIGP.

[135]  Alfonso Pierantonio,et al.  Formal aspects of and development environments for Montages , 1997 .

[136]  Didier Parigot Towards domain-driven development: the smartTools software factory , 2004, OOPSLA '04.

[137]  Douglas T. Ross,et al.  Origins of the APT language for automatically programmed tools , 1978, SIGP.

[138]  Diomidis Spinellis,et al.  Notable design patterns for domain-specific languages , 2001, J. Syst. Softw..

[139]  Paul Hudak,et al.  Modular domain specific languages and tools , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[140]  Joseph Gil,et al.  JAMOOS: A domain-specific language for language processing , 2001 .

[141]  Didier Parigot,et al.  SmartTools: a Generator of Interactive Environment Tools , 2001, LDTA@ETAPS.

[142]  Arie van Deursen,et al.  Isolating idiomatic crosscutting concerns , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[143]  Eelco Visser,et al.  Generation of formatters for context-free languages , 1996, TSEM.

[144]  James R. Larus,et al.  Teapot: A Domain-Specific Language for Writing Cache Coherence Protocols , 1999, IEEE Trans. Software Eng..

[145]  Claus Brabrand,et al.  Growing languages with metamorphic syntax macros , 2000, PEPM '02.

[146]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[147]  Lothar Thiele,et al.  Integrating Domain Specific Language Design in the Software Life Cycle , 1998, FM-Trends.

[148]  W. Frakes Overview of Panel: Linking Domain Analysis and Domain Implementation , 1998 .

[149]  TraczWill,et al.  Software development using domain-specific software architectures , 1995 .

[150]  Margus Veanes,et al.  An Abstract Communication Model , 2002 .

[151]  Rubén Prieto-Díaz,et al.  DARE: Domain analysis and reuse environment , 1998, Ann. Softw. Eng..

[152]  Jack Greenfield,et al.  Software factories: assembling applications with patterns, models, frameworks and tools , 2004, OOPSLA '03.

[153]  Kresimir Fertalj,et al.  Source code generator based on a proprietary specification language , 2002, Proceedings of the 35th Annual Hawaii International Conference on System Sciences.

[154]  Arie van Deursen,et al.  The Asf+Sdf Meta-Environment: a Component-Based Language Development Environment , 2001, LDTA@ETAPS.

[155]  Stefano Crespi-Reghizzi,et al.  The use of grammatical inference for designing programming languages , 1973, Commun. ACM.

[156]  Jan Bosch,et al.  Domain-Specific Languages for a Changing World , 2007 .

[157]  Greg J. Badros JavaML: a markup language for Java source code , 2000, Comput. Networks.