Object-oriented analysis and design with applications (2nd ed.)
Object-oriented analysis and design with applications (2nd ed.)
Concepts of programming languages (3rd ed.)
Concepts of programming languages (3rd ed.)
Multi-paradigm design for C++
Programming pearls: little languages
Communications of the ACM
Generative programming: methods, tools, and applications
Generative programming: methods, tools, and applications
Domain-specific languages: an annotated bibliography
ACM SIGPLAN Notices
The next 700 programming languages
Communications of the ACM
Notable design patterns for domain-specific languages
Journal of Systems and Software
A Standard Problem for Evaluating Product-Line Methodologies
GCSE '01 Proceedings of the Third International Conference on Generative and Component-Based Software Engineering
Compiler Construction, An Advanced Course, 2nd ed.
Proceedings of the 25th International Conference on Software Engineering
Modular Domain Specific Languages and Tools
ICSR '98 Proceedings of the 5th International Conference on Software Reuse
When and how to develop domain-specific languages
ACM Computing Surveys (CSUR)
Two Application languages in software production
VHLLS'94 Proceedings of the USENIX 1994 Very High Level Languages Symposium Proceedings on USENIX 1994 Very High Level Languages Symposium Proceedings
Staging telephony service creation: a language approach
Proceedings of the 1st international conference on Principles, systems and applications of IP telecommunications
Dynamically linked domain-specific extensions for advice languages
Proceedings of the 2008 AOSD workshop on Domain-specific aspect languages
The ruby programming language
DLS '08 Proceedings of the 2008 symposium on Dynamic languages
Programming in Scala: A Comprehensive Step-by-step Guide
Programming in Scala: A Comprehensive Step-by-step Guide
A little language for surveys: constructing an internal DSL in Ruby
Proceedings of the 46th Annual Southeast Regional Conference on XX
Programming Ruby 1.9: The Pragmatic Programmers' Guide
Programming Ruby 1.9: The Pragmatic Programmers' Guide
Programming in Python 3: A Complete Introduction to the Python Language
Programming in Python 3: A Complete Introduction to the Python Language
IEEE Transactions on Software Engineering
Squeak by Example
Metaprogramming Ruby
A pattern language for metadata-based frameworks
Proceedings of the 16th Conference on Pattern Languages of Programs
Patterns for consistent software documentation
Proceedings of the 16th Conference on Pattern Languages of Programs
ScalaQL: language-integrated database queries for scala
SLE'09 Proceedings of the Second international conference on Software Language Engineering
Learning python, fourth edition
Learning python, fourth edition
Hi-index | 0.00 |
Some programming languages, especially dynamic programming languages, offer suitable mechanisms for the construction of internal domain-specific languages (DSL). Internal DSLs inherit the facilities of their host language such as the availability of libraries, frameworks, tool support, and other DSLs. When developing an internal DSL, there are two challenges. First, to cope with the host language's syntactic and semantic restrictions. Careful and thoughtful extensions and modifications of the host language are crucial to overcome these restrictions without reverting to poor language design. Second, to support several design principles that are genuine for a DSL. Although there is an extensive body of knowledge about DSL design principles and desirable quality properties, it remains difficult to apply them, or to reason about whether a particular DSL exhibits specific desirable principles. Our objective is to put the two perspectives together. We research the most important design principles of a DSL and show how different patterns can be used to support these principles. This allows us to produce an extensive pattern catalog which is the foundation of principled approach for designing internal DSLs. The patterns can be used to assess the design quality of a DSL and structure its implementation. In particular, we show a complex DSL example illustrating each principle and the corresponding patterns. While we stick to Ruby for the explanation and application of the patterns, we also name known uses in Python, Scala, and Smalltalk. Patterns are explained with their context, problem, forces, solution, and consequences. We also explain the patterns with the classical structure of intent, motivation, forces, implementation and their consequences. Finally we reflect upon the pattern utilization by discussing their strengths and weaknesses.