Whole Platform
Tesi di Dottorato di:
RICCARDO SOLMI
Università degli Studi di Bologna
Facoltà di scienze matematiche, fisiche e naturali
Corso di Dottorato in Informatica
Relatore:
Prof. ANDREA ASPERTI
Summary
• What is it and motivations
• Description of the Whole Platform
– Development Environment – Languages
– Frameworks
• Design patterns introduced
• Two use cases
– Language definition – Generator development
• Related works and Conclusions
What is the Whole Platform
• A model driven technology for engineering the production of software
• A development environment for developing new languages and tools
• A metaprogramming tool for writing model to
model generators
Motivations
• To support evolution and extension of languages
– Examples: Java 5, AspectJ
• To allow the use of multiple languages together
– Usual for XML based languages
– New research languages: Comega, Xj
– Metaprogramming with embedded languages
• To integrate languages in development environments
– Examples: C++, Cobol
• To give a linguistic alternative to the libraries
• To replace text driven with model driven generators
Whole Platform
• A software platform including:
– Whole IDE: a visual programming environment supporting rich graphical editing of model driven languages.
– Whole Languages: a family of languages including popular languages and some new metamodeling languages
– Whole Generative System: a set of frameworks providing the infrastructure for implementing model driven languages and for giving them a translational semantics
Whole IDE Architecture
Whole IDE (screenshots)
Whole Languages Architecture
Whole Languages
• Languages can include:
– General Purpose Languages (GPL)
• examples: Java, Scheme, XML
– Domain Specific Languages (DSL)
• examples: BNF, UML
– Set of constructs; examples: declarations, control flow, math, aspects, metaprogramming
– Composed languages; example: Java + metaprogramming
• A standard set of languages is provided
– Metamodeling DSL: Mbed, Models, Editors, Languages, Operations
– Popular languages: Java, XML, Text, BNF
• New languages can be added and composed
Model
Whole Generative System (frameworks)
Traversal Framework Editing Framework
Java Model
Generation Framework Persistence Framework
Notification Framework Modeling Framework
JDT Model
JavaJava
Java JavaJavaJava DB
Whole Generative System
Implementation vs. Design complexity
Whole* Mbed Java XML tot
Java Lines of Code
(LoC) 8356 11973 13060 2947 36336
Java LoC written by hand 8356 1592 601 102 10551
Metamodels LoC 0 78 490 118 686
Number of Packages 23 16 24 13 76
Number of Interfaces 36 14 30 9 89
Number of Classes 267 167 451 154 1039
Number of Methods 2286 1519 5152 1472 10429
Number of Attributes 402 132 333 123 990
Design complexity exceeds implementation complexity and requires new design patterns
Whole*: includes Whole IDE plugins and Whole Generative System frameworks
Design Patterns introduced/enhanced
• Compound Model – a model able to embed other model fragments
• Resolver Object – a surrogate for an object having a fixed interface and an underspecified implementation
• Model Context – encapsulates the model for its
lifetime and hides all details concerned with creation, assembling and traversing
• Intensional Behavior – traces the model history and
allows for intensional query, navigation and execution
Design Patterns introduced/enhanced
• Staged Visitor Combinators – A Visitor
Pattern supporting staging, compound models and composable traversal strategies
• Visitable Marker Interface – To minimize implementation constraints while maximizing behavior accessible without casting.
• Streaming builders – A Builder Pattern
supporting stream based behavior.
Compound Model Pattern
Resolver Object Pattern Structure
Model Context Pattern Structure
Visitable Marker Interface Pattern Structure
Use case: language definition
1. Define the model and an editor notation for the language
• Using for instance the metamodeling language Mbed DSL
2. Generate all the code for editing and manipulating the language (model)
• 100% of Java code generated
• The result is a standard Eclipse Platform Plugin
1. Model & Editor definition
2. Code generation
Modeling Framework
Mbed
JavaJava Java
Persistence Framework Editing Framework
JavaJava
Java Controller and view classes
Model and Factories
classes Java
Traversal Framework
JavaJava Java
Visitors and visitor
combinator
Notification Framework
JavaJava Java
Model specific event handler classes
Persistence and metaprogramming visitor classes
Use case: writing a generator
• Choose (or define) an host (generator) language and one or more target languages
– The metaprogramming support is added to each Whole Language by the generative frameworks
• All languages can be used as target languages
• All executable languages can be used as host languages
• Using the Whole IDE editor all the code generator
can be written
Embedding and Metaprogramming
Java
EBNF
Java
(meta)
Java
Metaprogramming facilities
• Grant well-formed output of target fragments
– If the host language is typed then grant that the output program is well-formed
• The target is a model and the generator can query and manipulate the part already generated
• The target model manipulation has learning behavior
– Hide distinction between adding and traversing
Text based alternative: Velocity
• Host Language:
fixed (poor)
• Target language:
any (text)
• Host only editing support
Text based alternative: XSLT
• Host Language:
fixed (poor)
• Target language:
any (text/xml)
• Host only editing support
Model based alternative: MetaAspectJ
• Host Language:
Java
• Target language:
AspectJ (model)
• No editing support
Proposed solution: Whole
• Host Language:
any (model)
• Target language:
any (model)
• Full editing support
Related works
• OMG specifications: Model Driven Architecture (MDA)
– Modeling (MOF), notation (UML), persistence (XMI) – TODO: Query, View and Transformations (QVT)
• Eclipse proposals: Model Driven Development,
Language Development Toolkit and Graphical Modeling Framework
– Modeling (EMF), notation (GEF based), persistence (XMI)
– Metamodels textual notation (Emfatic), transformations (MTF)
Related works (cont.)
• Vendor technology previews
– Software Factories (Microsoft)
– Meta-Programming System (JetBrains)
– Intentional Programming (Intentional Software)
– HyperSenses (Delta Software)
Conclusions
• Unique features of the Whole Platform
– A streaming API for building and persisting models – Model driven metaprogramming with concrete syntax – Composable families of traversals, iterators, adapters – Intensional execution of behavior
• All frameworks have been tested with real languages
• New DSL languages for modeling and editing
– 100% of a language implementation is generated – Generated code quality: same as hand written