Custom Delta Language (.decore)

A custom delta language is the result of binding the Common Base Delta Language to a particular delta dialect specified in the Delta Dialect Language (.decoredialect). The supplied information is composed dynamically so that merely code for the interpreter needs to be generated in order to create a custom delta language. On a technical level, the binding is performed by supplying the URI of the source language (and, thus, the delta dialect registered for it so it exists) in the header of a .decore file.

SFTDeltaExampleScreenshot

Using the custom delta language, delta modules may be specified that target artifacts of the source language in order to make them variability-aware. For this purpose, the previously specified delta operations may be applied to elements referenced in required models or elements newly created by calling dynamically created constructors. Furthermore, a delta module may declare other delta modules as being required to ensure that they are applied previously to the delta module’s execution (e.g., to ensure an element was created before it is modified). This mechanism fosters reuse as transformation steps similar in multiple delta modules may be outsourced into individual reusable deltas. However, it may have as a consequence that not all deltas create (syntactically or semantically) valid variants of the modified artifact. Due to this reason, a delta module can be declared as being abstract, which signals DeltaEcore that this particular delta module may not be the last in variant derivation process or be used standalone. The variant derviation view of DeltaEcore may then be used to load an arbitrary number of compatible (non-abstract) delta modules. The list of delta modules is then completed to include those delta modules referenced as being required but that have not been specified explicitly. These deltas are then sorted to form an application sequence satisfying both the order imposed by the requires relation as well as that specified by the user during delta module selection. After executing this sequence of delta modules and the respective delta operations, the targeted artifact is transformed to the requested variant and saved in the specified location.