THE PROJECT Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos Resultados Preliminares Ander Zubizarreta Arrasate, 30 Enero 2009
la idea Analysis of DSL (Domain Specific Languages) State-of-the-art: problems Concepts: models, metamodels, transformations Tools: commercial & academic
Trabajo realizado Entender conceptos Probar herramientas Hacer pequeños ejemplos
Domain Specific Languages Ideas fundamentales Higher-level abstraction than general purpose languages Closer to the problem domain than to the implementation domain Closer to the domain experts, allowing modelers to perceive themselves as working directly with domain concepts
Mas: Domain rules can be included into the language as constraints, disallowing the specification of illegal or incorrect models Languages for representing different views of a system in terms of models
¿Cuándo usar DSLs? Cuando …
… un lenguaje de modelado de proposito general (e.g. UML ) NO proporciona la expresividad que necesitamos en nuestro dominio
… un lenguaje de programación de proposito general (e.g. C, C++, Java) NO proporciona las abstracciones que necesitamos en nuestro dominio
Terminologia Modelo: “represents a part of the reality called the object system and is expressed in a modeling language. A model provides knowledge for a certain purpose that can be interpreted in terms of the object system”
Metamodelo: A model of models (definición del modelo. Define qué elementos y cómo se utilizaran en el modelo).
Transformación: Transformación Model-to-model, model-to-text RuleSets: Conjunto de reglas que definen la transformación de un modelo a otro, normalmente haciendo un mapping entre los elementos de sus respectivos metamodelos
Templates: Plantillas de texto utilizadas para generar código de los modelos
Conceptos DSLs are defined in terms of Abstract syntax (domain concepts and rules) Concrete syntax (language representation)
Metamodels used to represent the abstract syntax Models “conform to” metamodels A metamodel conforms to its meta-metamodel
Level M2
the MOF MMM
a UML model m
another use of m
an execution X of program P
a particular use of m
another UML model m’
the CWM MM
a Pascal program P
Level M1
Level M0
the UML MM
the SPEM MM
the Pascal grammar
This tower usually ends at level 4
Level M3
EBNF
Metamodels are models, too
Problemas (MUCHOS!) Representacion Definicion de DSL Lenguajes de modelos, metamodelos (e.g. Ecore) Restricciones
Generación de código Transformaciones modelo a modelo modelo a texto
Primitivas de transformacion Model queries RuleSets, Templates, Scripts
Más: debug, model operations (merge), simulación, etc
Escenarios de Aplicación (i) Metamodels
Doc <>
<>
<>
Models
Code
M2M M2T
Tests
Escenarios de Aplicación (ii) UML “típico” Diseñamos un sistema con UML Queremos generar cierto código repetitivo Estructural: estructura de paquetes/clases Comportamiento: diagramas de estados
Limitaciones: Especificar la semantica es complicado Existen ASL (Action Semantic Languages), pero acaban siendo lenguajes de programacion genericos
Escenarios de Aplicación (iii) Nos “inventamos” un DSL Diseñamos una parte del sistema con el DSL Definimos como va a ser el codigo que queremos generar Es decir, tenemos Metamodelo origen (DSL) Metamodelo destino (Codigo)
Solucion Definimos transformaciones (rulesets, templates, etc) Se modelan los conceptos del dominio (no codigo)
Limitaciones: Conocer el dominio es complicado Siempre puede haber algun concepto que se “olvida”
Herramientas: estudio de mercado MetaEdit+ Herramienta para crear lenguajes gráficos de modelado y modelar con ellos. Se puede generar código de los modelos creados.
Eclipse (entorno) EMF (Eclipse Modeling Framework): Plugin de Eclipse con herramientas para trabajar con modelos. Basándose en un metamodelo, permite generar código y crear editores de modelos. Usa el lenguaje de mtamodelado Ecore, pero también permite importar UML y XML Schema.
GEF (Graphical Editing Framework) & GMF (Graphical Modeling Framework) Plugins que permiten crear editores gráficos para modelar
AGE (Agile Generative Environment) Herramienta basada en Ruby y Eclipse, que mediante el lenguaje de trasnformación RubyTL permite definir transformaciones de modelos y generar código
Herramienta MDWorkbench MDWorkbench Basada en EMF (eclipse) forma fácil de ver y editar los MM, modelos y transformaciones Lenguajes propios: MQL para tranformacion entre modelos y TGL para generación de código. Tambien permite incluir código Java en las transformaciones.
Seleccionada por:
Facilidad para navegar entre los elementos del modelo Facilidad para escribir transformaciones Se puede generar documentación en word Abundancia de documentacion
Ejemplos Ejemplos Realizados [M2Model] [M2Text] [M2Text]
UML (SC) to SCXML DSL to C++ SCXML to C++
Ejemplos para hacer [M2Model] [M2Text]
SysML to DSL SPEM to Ant
Ejemplos Realizados (i) [M2Model]
UML to SCXML
Pasos seguidos: 2)Definir modelo 3)Definir las reglas de transformación 4)Aplicar la tranformación al modelo
UML running
[mvOffOn()==TRUE]
Idle tm(10)/doInit(); loadVariables();
M2M
Off
On
doOff()
doOn() [mvOnOff()==TRUE]
SCXML
input
Ruleset
ouotput
Pasos seguidos: 2)Definir modelo 3)Definir las reglas de transformación y plantillas 4)Aplicar la transformación al modelo
Ejemplos Realizados(ii) [M2Text]
DSL to C++
C++
DSL
M2T
in
Rules + Templates
out
Ejemplos Realizados (iii) [M2Text] SCXML to C++
C++
SCXML
M2T
out in
Rules + Templates
Pasos seguidos: 2)Definir modelo 3)Definir las reglas de transformación y templates 4)Aplicar la tranformación al modelo
Ejemplos para hacer [M2Model] SysML to DSL Dibujar modelo en SysML Aplicar transformación a DSL
(2 posib: XMI o AP233)
[M2Text] SPEM to ANT Automatizar el proceso Dibujar el proceso en SPEM Generar ANT que ejecute todo el proceso
M2T build.xml
Demo
Sysdef code generation using MDWorkbench
Ander Zubizarreta
9/1/2009