DECEMBER 2005 | M. Mernik, J. Heering, A.M. Sloane
The article discusses domain-specific languages (DSLs), which are tailored to specific application domains and offer greater expressiveness and ease of use compared to general-purpose programming languages (GPLs). DSL development is challenging, requiring both domain knowledge and language development expertise. Despite their benefits, many DSLs never progress beyond the application library stage due to the difficulty of development and limited literature on DSL development methodologies. The article identifies patterns in the decision, analysis, design, and implementation phases of DSL development, which improve and extend earlier work on DSL design patterns. It also discusses domain analysis tools and language development systems that can help speed up DSL development. Open problems in DSL development are also highlighted.
DSLs can be executable or non-executable, with executable DSLs offering advantages in analysis, verification, optimization, and transformation. Non-executable DSLs, such as domain-specific data structure representations, can still benefit from tool support. DSLs enable reuse of software artifacts, including language grammars, source code, software designs, and domain abstractions. They are also useful for formal specification of software schemas and for enabling reuse of software architectures.
The article outlines the scope of DSL development, emphasizing the need for careful consideration of factors such as domain and language development expertise, the size of the user community, and the need for training materials, language support, standardization, and maintenance. It discusses various implementation approaches, including interpretation, compilation, embedding, and COTS-based approaches, and compares them in terms of benefits and drawbacks. The article also compares DSL patterns with other classifications and highlights the importance of formal approaches to DSL design and implementation. Finally, it discusses the role of language development systems and toolkits in supporting DSL development, which can automate much of the work involved in language processor construction.The article discusses domain-specific languages (DSLs), which are tailored to specific application domains and offer greater expressiveness and ease of use compared to general-purpose programming languages (GPLs). DSL development is challenging, requiring both domain knowledge and language development expertise. Despite their benefits, many DSLs never progress beyond the application library stage due to the difficulty of development and limited literature on DSL development methodologies. The article identifies patterns in the decision, analysis, design, and implementation phases of DSL development, which improve and extend earlier work on DSL design patterns. It also discusses domain analysis tools and language development systems that can help speed up DSL development. Open problems in DSL development are also highlighted.
DSLs can be executable or non-executable, with executable DSLs offering advantages in analysis, verification, optimization, and transformation. Non-executable DSLs, such as domain-specific data structure representations, can still benefit from tool support. DSLs enable reuse of software artifacts, including language grammars, source code, software designs, and domain abstractions. They are also useful for formal specification of software schemas and for enabling reuse of software architectures.
The article outlines the scope of DSL development, emphasizing the need for careful consideration of factors such as domain and language development expertise, the size of the user community, and the need for training materials, language support, standardization, and maintenance. It discusses various implementation approaches, including interpretation, compilation, embedding, and COTS-based approaches, and compares them in terms of benefits and drawbacks. The article also compares DSL patterns with other classifications and highlights the importance of formal approaches to DSL design and implementation. Finally, it discusses the role of language development systems and toolkits in supporting DSL development, which can automate much of the work involved in language processor construction.