Model-driven development is a pragmatic approach to software development that embraces domain-specific languages (DSLs), where models correspond to DSL programs. A distinguishing feature of model-driven development is that clients of a model can select from an open set of alternative semantics of the model by applying different model transformation. However, in existing model-driven frameworks, dependencies between models, model transformations, and generated code artifacts are either implicit or globally declared in build scripts, which impedes modular reasoning, separate compilation, and scalability in general.
We propose the design of a module system that incorporates models and model transformations as modules. A programmer can apply transformations in import statements, thus declaring a dependency on the generated artifact. Our design enables modular reasoning and separate compilation by preventing hidden dependencies, and it supports mixing modeling artifacts with code artifacts as well as higher-order transformations. We have formalized our design and the aforementioned properties and have validated it by an implementation and case studies that show that our module system supports common applications of model-driven development.
Get the code
The source code of the implementation and of the case studies is available at github:
Get in touch, discuss, or simply stay up-to-date by joining the SugarJ Google group.