On modularity and performances of external domain-specific language implementations
Modularité et performances des langages dédiés externes
Résumé
Model-Driven Engineering (MDE) aims at supporting Domain Experts when developing complex systems, by separating concerns through the use of models. Models are representations of specific aspects of a system and are defined using relevant abstractions. Such abstractions are defined using Domain-Specific Languages (DSLs). DSLs are created with specialized Integrated Development Environment (IDE), called language workbenches. Language workbenches assist the engineering of languages by offering useful language abstractions. First, these abstractions have the benefit of providing the relevant level of abstraction for the specification of languages. Second, they address the concerns inherent to software development, such as modularity or testability. However, the benefits of these abstractions can be lost when translated to language service implementations (e.g., editors, interpreters, debuggers). This has many drawbacks, especially in terms of reusability and performance. Domain Experts are subject to these limitations and are forced to reason in terms of the low-level intricacies of language services implementation. These problems can be alleviated by exploiting the information provided by the abstractions available in the DSL specifications. To do so, we propose two new implementation patterns supporting reuse and performances, and a systematic translation of language specifications to these patterns. The first implementation pattern tackles language reuse and is called REVISITOR. The REVISITOR pattern allows the safe and modular reuse of languages, both syntactically and semantically, while relying solely on mainstream object-oriented programming concepts. The second implementation pattern addresses language performances. Language performances are improved by introducing language-specific optimizations. These optimizations are automatically introduced without being intrusive of the usual language development methods. We seamlessly implement our approaches on top of the Eclipse IDE ecosystem by using two metalanguages: Ecore and ALE. Ecore supports the specification of abstract syntaxes in the form of metamodels. Ecore is provided by the de facto industrial standard Eclipse Modeling Framework (EMF). ALE supports the modular specification of language semantics on top of Ecore metamodels. We provide two compilers for these metalanguages. They support respectively the compilation of language specifications to the REVISITOR pattern and the automatic introduction of performance-specific optimizations in DSL interpreter implementations. We evaluate the benefits of our approaches by implementing a varied selection of heterogeneous DSLs. Our contributions make possible the implementation of reusable or efficient DSLs for Domain Experts — while currently separated, future work aims to integrate them. In practice, our approach is both non-intrusive of the usual methodology of language engineering and based on automated code generation. Consequently, our approach is directly applicable to industrial contexts and can be integrated with legacy DSLs artifacts.
L’Ingénierie Dirigée par les Modèles (IDM) a pour but d’assister les experts métiers dans le développement de systèmes complexes, en séparant les préoccupations par l’utilisation de modèles. Les modèles sont des représentations d’aspects spécifiques des systèmes et sont définis à l’aide d’abstractions dédiées. Ces abstractions sont définies avec des langages dédiés. Ces langages dédiés sont créés à l’aide d’Environnements de Développement Intégré (EDI) spécialisés, appelés language workbenches. Les language workbenches aident à l’ingénierie de langages dédiés en proposant des abstractions utiles. Premièrement, ces abstractions sont dédiées à la définition des différents aspects des langages. Ensuite, elles répondent aux préoccupations inhérentes au développement de logiciels tels que la modularité ou la testabilité. Cependant, les bénéfices de telles abstractions peuvent être perdues quand traduites vers des implémentations de services de langages (p. ex. éditeurs, interpréteurs, débogueurs...). Cela entraîne de nombreux inconvénients, en particulier concernant la réutilisabilité et les performances. Les experts métiers sont confrontés à ces limitations et sont forcés de raisonner à travers les détails d’implémentations complexes des implémentations des services de langages. Ces problèmes peuvent être atténués en exploitant les informations fournies par les abstractions de langages dédiés. Pour ce faire, nous proposons deux patrons d’implémentation qui supportent la réutilisation et les performances. Ainsi qu’une traduction systématique depuis les spécifications de langages vers ces patrons. Le premier patron d’implémentation s’attaque à la réutilisation de langages et s’appelle REVISITOR. Le REVISITOR permet la réutilisation sûre et modulaire de langages, à la fois syntaxiquement et sémantiquement, tout en s’appuyant uniquement sur des concepts courants de programmation orientée objet. Le second patron d’implémentation adresse la performance des langages. Celles-ci sont améliorées par l’introduction d’optimisations spécifiques au langage. Ces optimisations sont introduites automatiquement, sans être intrusif de la manière usuelle de définir les langages. Nous intégrons de manière transparent notre approche dans l’écosystème de l’EDI Eclipse. Pour ce faire, nous utilisons deux métalangages : Ecore et ALE. Ecore supporte la spécification de syntaxes abstraites sous la forme de méta-modèles. Ecore est fourni dans le cadriciel EMF, standard du monde industriel. ALE supporte la spécification modulaire de sémantiques de langages par-dessus les méta-modèles Ecore. Nous fournissons deux compilateurs pour ces langages. Ils autorisent respectivement la compilation des spécifications de langages vers le patron REVISITOR ou l’introduction automatique d’optimisation de performance dans les implémentations des interpréteurs. Nous évaluons les bénéfices de ces approches par l’implémentation d’une sélection variée et hétérogène de langages dédiés.Nos contributions rendent possible l’implémentation de langages dédiés réutilisable et efficaces (bien qu’actuellement séparées, nous travaillons à leur intégration) pour les experts métiers. En pratique, notre approche est à la fois non-intrusive de l’ingénierie des langages et basée sur une génération systématique des implémentations. Par conséquent, notre approche est directement applicable dans un contexte industriel et peut être intégrée avec des artefacts de langages dédiés existants.
Origine | Version validée par le jury (STAR) |
---|
Loading...