Introduction
DEMRAL is a Domain Engineering method for developing algorithmic libraries. The characteristics are:
- Main concepts are captured as ADTs and algorithms that operate on the ADTs
- The ADTs often have container-like properties
- There is usually a well developed underlying mathematical theory
- The ADTs and the algorithms usually come in large varieties.
Outline of DEMRAL
1. Domain Analysis
1.1 Domain Definition
1.1.1 Goal and Stakeholder Analysis
1.1.2 Domain Scoping and Context Analysis
1.1.2.1 Analysis of application areas and existing systems
1.1.2.2 Identification of domain features
1.1.2.3 identification of relationships to other domains
1.2 Domain Modeling
1.2.1 Identification of key concepts
1.2.2 Feature modeling of the key concepts
2. Domain Design
2.1 Identification of the overall implementation architecture.
2.2 Identification and specification of domain-specific languages.
3. Domain Implementation
Domain Analysis
Domain Definition
The first activity is the identification of goals and stakeholders. The complexity of this activity depends on the size and the context of the project.
The next activity is to determine the scope and characterize the contents of the domain by defining its domain features. The results of the analysis of the application areas are summarized in a domain feature diagram.
It is essential to establish a domain dictionary and a register of sources of domain knowledge. As the analysis progresses, both the dictionary and the register need to be updated.
Finally, we analyze related domains such as analogy or support domains,.
Domain Modeling
Identification of Key Concepts
Feature Modeling of the Key Concepts
Domain Design
Domain Design Activities
Identify packages
Identify User DSLs
- Configuration DSLs: Used to configure ADTs and algorithms
- Expression DSLs: Used for writing expressions involving ADTs and operations on them.
Identify Interactions Between DSLs
Scope DSLs
Specify DSLs
Configuration DSLs
Expresion DSLs
Domain Implementation
ADTs, operations and algorithms can be implemented using parameterized functions, parameterized classes and mixin layers (i.e the GenVoca model).
The implementation of configuration generators and expression optimizations require static metaprogramming capabilities (e.g template metaprogramming ).
Domain-specific syntax extensions require proprocessors, custom compilers or extendible compilers.