Difference between revisions of "MMT/QVT Declarative (QVTd)"
(→Currently working on) |
(→History) |
||
(14 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
* Parsers for QVTc and QVTr | * Parsers for QVTc and QVTr | ||
* Meta-models for QVTc and QVTr | * Meta-models for QVTc and QVTr | ||
+ | * Debugger for QVTi | ||
(The EMOF-based implementations of the QVT models are the source of the normative models in | (The EMOF-based implementations of the QVT models are the source of the normative models in | ||
− | [http://www.omg.org/cgi-bin/doc?ptc/ | + | [http://www.omg.org/cgi-bin/doc?ptc/2014-03-34 ptc/2014-03-34] for OMG QVT 1.2.) |
QVT Declarative will provide | QVT Declarative will provide | ||
* a dedicated perspective | * a dedicated perspective | ||
− | * an execution environment for QVTc and | + | * an execution environment for QVTc and QVTr |
− | * an integrated debugger for QVTc and | + | * an integrated debugger for QVTc and QVTr |
+ | |||
+ | ==Documentation== | ||
+ | |||
+ | [[QVTd/New_and_Noteworthy | New and Noteworthy]] | ||
+ | * [[QVTd/Articles|Articles and Presentations]] | ||
==Specification== | ==Specification== | ||
− | The base working document of this component is the OMG specification | + | The base working document of this component is the OMG QVT 1.2 specification ([http://www.omg.org/spec/QVT/1.2/Beta/PDF Meta Object Facility (MOF) 2.0 Query/View/Transformation 1.2 Beta Specification]). |
The QVTd project includes a [[QVT_Specification_Interpretation | special development documentation]] to identify: | The QVTd project includes a [[QVT_Specification_Interpretation | special development documentation]] to identify: | ||
Line 32: | Line 38: | ||
This page is a summary of specification related development choices. Its main purpose is to provide a basis for discussion with the community. | This page is a summary of specification related development choices. Its main purpose is to provide a basis for discussion with the community. | ||
Any feed back is welcome. | Any feed back is welcome. | ||
− | Please use the | + | Please use the [news://news.eclipse.org/eclipse.qvtd QVTd newsgroup] for the questions and the [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=MMT.QVTd Bugzilla] for issues. |
==Status and Roadmap== | ==Status and Roadmap== | ||
Line 46: | Line 52: | ||
|- | |- | ||
|November 2009|| Models upgraded and used as basis for OMG QVT 1.1 models | |November 2009|| Models upgraded and used as basis for OMG QVT 1.1 models | ||
+ | |- | ||
+ | |August 2012|| Work started on QVTr to QVTi chain | ||
+ | |- | ||
+ | |June 2013|| QVTi editing and execution available for Kepler release | ||
+ | |- | ||
+ | |March 2014|| Models upgraded and used as basis for OMG QVT 1.2 models | ||
+ | |- | ||
+ | |June 2014|| QVTi debugging available for Luna release | ||
+ | |- | ||
+ | |June 2016|| Preliminary QVTr/QVTc execution available for Neon release | ||
+ | |- | ||
+ | |June 2017|| Better still preliminary UMLX/QVTr/QVTc execution available for Oxygen release | ||
+ | |- | ||
+ | |June 2018|| Better still preliminary UMLX/QVTr/QVTc execution available for Photon release | ||
+ | |- | ||
+ | |September 2018|| Preliminary relation override support added for 2018-09 release | ||
|} | |} | ||
Line 51: | Line 73: | ||
After an unsuccessful attempt to use ATL tooling to define a QVTr compiler, an execution engine | After an unsuccessful attempt to use ATL tooling to define a QVTr compiler, an execution engine | ||
− | is | + | is under development that uses transformations to support QVTc, QVTr and UMLX. |
The OMG specification provides an almost monolithic QVTr to QVTc transformation written in QVTr. | The OMG specification provides an almost monolithic QVTr to QVTc transformation written in QVTr. | ||
This is difficult to understand, and cannot be used until a QVTr execution engine is available. | This is difficult to understand, and cannot be used until a QVTr execution engine is available. | ||
− | We therefore | + | We therefore transform UMLX to QVTr to QVTc to QVTu to QVTm to QVTs to QVTi to Java using Java transformations. |
− | + | These will be rewritten in UMLX/QVTr to demonstrate/achieve robustness. | |
− | + | ||
More specifically, we recognize that any practical use of a transformation is unidirectional | More specifically, we recognize that any practical use of a transformation is unidirectional | ||
Line 65: | Line 86: | ||
* QVTu language as the unidirectional subset of QVTc | * QVTu language as the unidirectional subset of QVTc | ||
* QVTm as the smallest declarative subset of QVTu that supports practical transformation programming | * QVTm as the smallest declarative subset of QVTu that supports practical transformation programming | ||
− | * | + | * QVTs as a graphical representation suitable for schedule analysis |
+ | * QVTi as an assembler-like with imperative connection semantics suitable for code synthesis. | ||
− | Using these subset languages, we | + | Using these subset languages, we realize QVTc, QVTr and UMLX using the following transformation chains |
− | * QVTi to TxVM using | + | * QVTi to TxVM/Java using Java |
− | * | + | * QVTs to QVTi using Java |
− | * QVTu to QVTm using | + | * QVTm to QVTs using Java |
− | * QVTc to QVTu using | + | * QVTu to QVTm using Java |
− | * QVTr to QVTu using | + | * QVTc to QVTu using Java |
+ | * QVTr to QVTu using Java | ||
+ | * UMLX to QVTr using Java | ||
We anticipate that the QVTm language will provide a suitably simple declarative language | We anticipate that the QVTm language will provide a suitably simple declarative language | ||
Line 93: | Line 117: | ||
[https://bugs.eclipse.org/bugs/show_bug.cgi?id=350917 Bug 350917] discusses extending the OCL evaluator with some | [https://bugs.eclipse.org/bugs/show_bug.cgi?id=350917 Bug 350917] discusses extending the OCL evaluator with some | ||
pattern matching operations to assist in supporting transformations. | pattern matching operations to assist in supporting transformations. | ||
+ | |||
+ | ====In-place and Copy Transformations==== | ||
+ | |||
+ | See [[QVTd In-place and Copy Transformations]] | ||
+ | |||
+ | ====Relation Overriding==== | ||
+ | |||
+ | The lack of adequate OMG specification is solved. There is indeed no QVTc support for overrides. Rather a QVTr2QVTr transformation replaces overrides declarations by when-not-predicates in each formerly overridden relation on each transitively overriding relation. | ||
+ | |||
+ | See [[QVTd Relation Overriding]] for the wroking considerations. | ||
==Team== | ==Team== | ||
− | The QVT Declarative project is developed by E.D.Willink | + | The QVT Declarative project is developed by E.D.Willink |
The current commiters are: | The current commiters are: | ||
− | * | + | * Ed Willink (lead) |
− | + | ||
==Installation== | ==Installation== | ||
Line 106: | Line 139: | ||
==Questions and discussions about QVT Declarative usage== | ==Questions and discussions about QVT Declarative usage== | ||
− | Questions and discussions about the usage of QVT Declarative should take place on the [news://news.eclipse.org/eclipse. | + | Questions and discussions about the usage of QVT Declarative should take place on the [news://news.eclipse.org/eclipse.qvtd eclipse.qvtd] [http://www.eclipse.org/newsgroups/ Eclipse newsgroup]. |
− | [[Category:Modeling]] [[Category:MMT]] | + | [[Category:Modeling]] [[Category:MMT]] [[Category:QVTd]] |
Latest revision as of 04:58, 5 September 2018
Contents
Overview
The QVT Declarative (QVTd) component aims to provide a complete Eclipse based IDE for the Core (QVTc) and Relations (QVTr) Languages defined by the OMG QVT Relations (QVTR) language. This goal includes all development components necessary for development of QVTc and QVTr programs and APIs to facilitate extension and reuse.
The QVTo component provides corresponding facilities for the Procedural Language.
QVT Declarative currently provides:
- Editors for QVTc and QVTr
- Parsers for QVTc and QVTr
- Meta-models for QVTc and QVTr
- Debugger for QVTi
(The EMOF-based implementations of the QVT models are the source of the normative models in ptc/2014-03-34 for OMG QVT 1.2.)
QVT Declarative will provide
- a dedicated perspective
- an execution environment for QVTc and QVTr
- an integrated debugger for QVTc and QVTr
Documentation
Specification
The base working document of this component is the OMG QVT 1.2 specification (Meta Object Facility (MOF) 2.0 Query/View/Transformation 1.2 Beta Specification).
The QVTd project includes a special development documentation to identify:
- specification deviance (and explanations)
- specification interpretation
- specification issues
This page is a summary of specification related development choices. Its main purpose is to provide a basis for discussion with the community. Any feed back is welcome. Please use the QVTd newsgroup for the questions and the Bugzilla for issues.
Status and Roadmap
History
Date | Task |
---|---|
July 2008 | QVT 1.0 models, parsers and editors migrated from GTM/UMLX project |
August 2008 | Editors adapted to use IMP |
November 2009 | Models upgraded and used as basis for OMG QVT 1.1 models |
August 2012 | Work started on QVTr to QVTi chain |
June 2013 | QVTi editing and execution available for Kepler release |
March 2014 | Models upgraded and used as basis for OMG QVT 1.2 models |
June 2014 | QVTi debugging available for Luna release |
June 2016 | Preliminary QVTr/QVTc execution available for Neon release |
June 2017 | Better still preliminary UMLX/QVTr/QVTc execution available for Oxygen release |
June 2018 | Better still preliminary UMLX/QVTr/QVTc execution available for Photon release |
September 2018 | Preliminary relation override support added for 2018-09 release |
Currently working on
After an unsuccessful attempt to use ATL tooling to define a QVTr compiler, an execution engine is under development that uses transformations to support QVTc, QVTr and UMLX.
The OMG specification provides an almost monolithic QVTr to QVTc transformation written in QVTr. This is difficult to understand, and cannot be used until a QVTr execution engine is available.
We therefore transform UMLX to QVTr to QVTc to QVTu to QVTm to QVTs to QVTi to Java using Java transformations. These will be rewritten in UMLX/QVTr to demonstrate/achieve robustness.
More specifically, we recognize that any practical use of a transformation is unidirectional requiring the multi-directional flexibility of QVTr and QVTc to be resolved. We therefore define
- QVTu language as the unidirectional subset of QVTc
- QVTm as the smallest declarative subset of QVTu that supports practical transformation programming
- QVTs as a graphical representation suitable for schedule analysis
- QVTi as an assembler-like with imperative connection semantics suitable for code synthesis.
Using these subset languages, we realize QVTc, QVTr and UMLX using the following transformation chains
- QVTi to TxVM/Java using Java
- QVTs to QVTi using Java
- QVTm to QVTs using Java
- QVTu to QVTm using Java
- QVTc to QVTu using Java
- QVTr to QVTu using Java
- UMLX to QVTr using Java
We anticipate that the QVTm language will provide a suitably simple declarative language that will allow for effective application of transformation composition optimizations. These optimizations will be essential to avoid the costs of naive transformation chains. We hope that other transformation languages will provide conversion to QVTm so that transformations developed in a variety of languages can be composed into an efficient composite transformation and then transformed for efficient execution by a good TxVM.
More details on these languages may be found in MMT/QVT Declarative Languages.
Recent work on improving the efficiency of the Eclipse OCL evaluator and providing a direct OCL to Java code generator demonstrates that the OCL evaluator can be regarded as the core of a TxVM. The M2M/QVTO project already exploits this by extending the interpretation capability and adding a debugger. The same interpretation approach should be possible for at least QVTi, QVTm and QVTu, perhaps for QVTc too. Extension of OCL's direct OCL to Java should eliminate the interpretation overheads. Realisation of transformation composition should eventually allow efficient provision of QVTr to QVTc to QVTu to ... and so enable acceptable performance for all languages.
Bug 350917 discusses extending the OCL evaluator with some pattern matching operations to assist in supporting transformations.
In-place and Copy Transformations
See QVTd In-place and Copy Transformations
Relation Overriding
The lack of adequate OMG specification is solved. There is indeed no QVTc support for overrides. Rather a QVTr2QVTr transformation replaces overrides declarations by when-not-predicates in each formerly overridden relation on each transitively overriding relation.
See QVTd Relation Overriding for the wroking considerations.
Team
The QVT Declarative project is developed by E.D.Willink
The current commiters are:
- Ed Willink (lead)
Installation
A QVTd developement environment may be set up by M2M/QVT Declarative Installation.
Questions and discussions about QVT Declarative usage
Questions and discussions about the usage of QVT Declarative should take place on the eclipse.qvtd Eclipse newsgroup.