Language-oriented programming (LOP) advocates a way of creating software systems that starts from the development of a domain-specific language (DSL). The DSL is geared towards solving computational problems in a particular domain. Developers then use the DSL to express configurations, rules, algorithms or knowledge for this particular domain at higher levels of abstraction than those achievable with a general-purpose programming language. Achieving the vision of LOP requires methods to ease the creation and the reuse of DSLs. One of the most likely technologies to achieve the vision of LOP are the projectional language workbenches because of the flexibility they add in DSL notation and DSL modularity. Modularity, in particular, is a key factor in easing the creation and reuse of DSLs. We have previously designed a new method and associated meta-tools, called MetaMod, for the creation of modular and reusable DSLs. The goal in this article is to demonstrate what the advantages of MetaMod are in terms of creating modular and reusable DSLs compared to the state-of-the-art projectional language workbench Jetbrains MPS. To this end, we took a comprehensive expression language, the iets3 expression DSL written in Jetbrains MPS, and redefined a fragment of it in MetaMod; we use part of this reimplemented expression language as a running example in the article. This allowed us to make a better comparison with creating DSLs in MPS. Moreover, in the process, we also highlighted the main features of MetaMod concerning modularity and reuse. As a result of the comparison we underline the main advantage that MetaMod brings in the implementation of modular and reusable DSLs, that is, the possibility to create smaller, more conceptually cohesive DSLs. This makes DSLs more fit for reuse. Furthermore, we present an extensive overview of related work regarding features of language tools for creating modular and reusable DSLs.
- Ddomain-specific languages
- Expression language
- Language workbenches
- Language-oriented programming
- Model-driven engineering