Multi-level modelling and language engineering has been a research topic for some time. It has its roots in various streams of research.
Object-oriented programming languages: Smalltalk was one of the first programming languages to relax the strict dichotomy of object and class. It treats objects as classes and introduces metaclasses. Furthermore, Smalltalk features a reflexive language architecture, which enables users to navigate to the foundations of a software system. However, a metaclass is defined implicitly with each class and can have one instance only. Therefore, Smalltalk metaclasses are not objects themselves, nor is it possible to define meta-metaclasses. Later, XCore overcame this restriction.
Database design and knowledge management: The semantics of data in a database is typically defined in a schema. To make schema design more powerful and more flexible, various projects aimed at adding further (meta) schemata. ConceptBase (Jarke et al. 1995) made a particularly important contribution to the evolution of multi-level modelling. It enables an arbitrary number of classification levels and allows for deduction. It is based on a Prolog like language. Different from object-oriented programming languages, it allows an object to be an instance of more than one class.
Language-oriented programming: Work in this area is based on three key assumptions. a) The (programming) language is of pivotal relevance for improving productivity of programmers and the quality of software. b) For a language to be productive, it should provide concepts of the domain it is used in. c) Large software projects cover various domains. Therefore, they are in need of more than one domain-specific languages (DSLs). Ward who was one of the pioneers of this field spoke of “a series of language levels” (Ward 1994, p. 152), from more technical to more application-oriented levels. To realize this idea, it was important to provide meta- oder superlanguages (Clark et al. 2008) and corresponding tools, which enable a cost-effective construction of DSL and corresponding compilers as well as the integration of code written in different languages into one system.
Object-oriented modelling languages: While the UML has clearly fostered the dissemination of object-oriented modelling, the language architecture it is based on created various concerns. Atkinson and Kühne motivated their pioneering work on multi-level modelling (Atkinson, Kühne 2001) with shortcomings of the two-level architecture featured by the UML. In particular they emphasized that these shortcomings lead to “accidental complexity” (Atkinson, Kühne 2008) and create a threat to productivity and system integrity. To overcome these problems, they introduced a multi-level modelling language architecture and corresponding tools (refs).
Model-driven software development: Conceptual models support the analysis of requirements and the design of software systems. Model-driven software development aims at transforming conceptual models into code in order to improve productivity and code quality. Since code can be generated for different programming languages and platforms, a model-driven approach also promotes portability and maintainability. Even though conceptual models should widely abstract the particularities of implementation languages and runtime environments away, the specification of appropriate modelling languages needs to account for semantic constraints of implementation languages. Furthermore, maintenance requires methods to support the synchronization of models and code.