Copy-Paste-Adapt seems to be the most commonly used method to implement similar solutions or variants of a system (to simplify matters, the term ‘software family’ is used when talking about similar solutions or a set of variants, a single member of a software family is referred to as variant or instance). But the disadvantage of this method is that every task, e.g. correction, change, enhancement, has to be repeated for every variant which is error-prone and time consuming as well as expensive.
Using generators and domain specific languages (DSLs) avoids the above mentioned problems.
I would rather write programs
to help me write programs
than write programs.
However, most generator technologies require quite experienced developers. Often developers do not accept generators because the generated code is hard to read and maintain. Business-specific programming guidelines are rarely fulfilled by generators.
Developing a DSL is often regarded as a simple finger exercise. If the DSL has to be extendable, the task gets a bit more tricky. But as soon as a DSL and a generator have to fit to each other, their development transmutes from a simple finger exercise to a time consuming challenge for an experienced developer. Everyone who is going to use the new language first has to spend some time to learn it. Depending on the language’s complexity this familiarisation process can require quite a high effort.
Not until generator and DSL are completely developed, a testable system is available. This means (conceptual) errors will be found at a very late point of the developing process which in the worst case results in an expensive correction. In addition, the long development phase and the late availability of a testable system impede the usage of generators and DSLs in combination with agile methods.
Due to this reasons many companies avoid the usage of generators and DSLs and use Copy-Paste-Adapt instead.
When developing HyperSenses, we aimed to overcome the above mentioned weaknesses of the development of generators and DSLs. In concrete, the target was to develop a generator technology
To achieve these targets, HyperSenses introduces the concept of model-driven meta-development, (MD)² in short. While other approaches use generators and DSLs for model driven development and generative programming of applications we consistently apply model driven development and generative programming to develop generators and DSLs.
White Paper - HyperSenses
White Paper about HyperSenses: HyperSenses simplifies the development of generators and DSLs and supports their stepwise and distributed development. First results are obtained, testable and reproducible within hours or a few days instead of weeks as usual. Therefore HyperSenses enables the development of generators and DSLs for agile methods.