Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
ATL/VM Comparison
The objective of this page is to gather a list of features that are implemented differently in the three ATL Virtual Machines (VMs). Note that the recommended VM is EMFVM. RegularVM should only be used when EMFVM does not do what you want (increasingly rare). EMFTVM should only be used when you need the new experimental research features.
This table does not contain all features that are working similarly on all VMs.
Feature | RegularVM | EMFVM | EMFTVM | Proposed difference resolution |
---|---|---|---|---|
supercall | yes | no | yes | fix EMFVM |
superget (e.g. "super.attribute") | no | no | yes | EMFTVM improvement (i.e., no modification of older VMs) |
attribute helper on OclUndefined | no | yes | yes | |
debugger | yes | partially (does not stop on errors, variable inspection may not always work, especially stack in disassembly mode) | yes, but without stack inspection | |
.debug(<no argument>) | no | yes | yes (commit) | EMFVM & EMFTVM improvement (i.e., no modification on Regular VM) |
OCL collections | yes, eager | yes, eager | yes, lazy | if laziness is never problematic then EMFTVM improvement (i.e., no modification on older VMs) else make it configurable |
Rule inheritance | yes, single | yes, single | yes, multiple (via "-- @extends") | EMFTVM improvement (i.e., no modification on older VMs), consider ATL syntax extension |
Method dispatch | virtual | virtual | multiple virtual | EMFTVM improvement (i.e., no modification on older VMs) |
Closures | no | no | yes (but ATL syntax does not support defining Lambda parameters) | EMFTVM improvement (i.e., no modification on older VMs), consider ATL syntax extension |
Helper on Collection context | ? | ? | yes, with element type erasure | EMFTVM improvement (i.e., no modification on older VMs) |
Refining mode | In-place | In-place | In-place, without explicit "drop" | |
self instead of thisModule in context-less helpers and rules | yes | yes | no | report error for EMFTVM and deprecated for other VMs (see corresponding discussion on m2m-atl-dev) |
Assignment/binding semantics | SET semantics for single-valued properties, ADD semantics for collection properties | SET semantics for single-valued properties, ADD semantics for collection properties | SET semantics for all properties (by design; EMFTVM has separate ADD/REMOVE instructions) | |
Entrypoint rule support | yes | yes | no | Add entrypoint rule support to EMFTVM |
Output model navigation | Forbidden, but not enforced at runtime | Forbidden, but not enforced at runtime | Forbidden, and enforced at runtime | EMFTVM improvement |
Automatic type conversion during assignment/binding | Yes: collection boxing/unboxing | Yes: collection boxing/unboxing | No (types must match exactly) | |
Module naming | Doesn't matter | Doesn't matter | Module name must match file name | EMFTVM improvement |
"uses" clause | Ignored | Ignored | Missing imports cause a load-time error | EMFTVM improvement |
Type references | Ignored | Ignored | Checked: missing types (e.g. metaclasses) cause a load-time error | EMFTVM improvement |
"foreach - distinct" | yes | yes | no | report error for EMFTVM and deprecated for other VMs |
The following table lists the status of the ATL non-regression tests for each VM:
Test | RegularVM | EMFVM | EMFTVM | Comment | Proposed difference resolution |
---|---|---|---|---|---|
291626 | FAIL | FAIL | FAIL | Releng issue | |
Ant2Maven/Ant2Maven | PASS | PASS | FAIL | "foreach - distinct" not supported on EMFTVM | |
Ant2Maven/Maven2XML | PASS | PASS | FAIL | depends on Ant2Maven | |
Ant2Maven/XML2Ant | PASS | PASS | FAIL | depends on Ant2Maven | |
AssertionModification | FAIL | FAIL | PASS | Releng issue | |
AssignementTest/DeclarativeTest | PASS | PASS | FAIL | EMFTVM assumes SET semantics for all properties, not ADD for collections | |
AssignementTest/ImperativeTest | PASS | PASS | FAIL | EMFTVM assumes SET semantics for all properties, not ADD for collections | |
AssignementTest/RefiningTest | PASS | PASS | FAIL | EMFTVM assumes SET semantics for all properties, not ADD for collections | |
atl2010/CreateManyTraceElements | FAIL | PASS | FAIL | Refining trace mode not supported | |
atl2010/RemoveClass2010 | FAIL | PASS | FAIL | Refining trace mode not supported | |
atl2010/RemoveClassAndCreate2010 | FAIL | PASS | FAIL | Refining trace mode not supported | |
atl2010/RemoveClassAndMoveProperty2010 | FAIL | PASS | FAIL | Refining trace mode not supported | |
atl2010/RemoveClassAndMovePropertyRB2010 | FAIL | PASS | FAIL | Refining trace mode not supported | |
atl2010/RemoveProperty2010 | FAIL | PASS | FAIL | Refining trace mode not supported | |
ATL2Problem | PASS | PASS | PASS | ||
BibTeX2DocBook | PASS | PASS | FAIL | Cannot assign single Book instance to multi-valued field DocBook::books | |
Book2Publication/Book2Publication | PASS | PASS | PASS | ||
Book2Publication/XML2Book | PASS | PASS | PASS | ||
Class2Relational/Class2Relational | PASS | PASS | PASS | ||
Class2Relational/Ecore2Class | PASS | PASS | PASS | ||
DSLBridge/MetamodelBridge/DSL2EMF/DSL2KM3 | PASS | PASS | FAIL | Assigning a Sequence of Sequences to a Collection property | |
DSLBridge/MetamodelBridge/DSL2EMF/XML2DSL | PASS | PASS | FAIL | Assigning a Sequence of Sequences to a Collection property | |
DSLBridge/MetamodelBridge/EMF2DSL/DSL2XML | PASS | PASS | FAIL | Assigning a single value to a Collection property | |
DSLBridge/MetamodelBridge/EMF2DSL/KM32DSL | PASS | PASS | FAIL | Use of "self" in helper without context declaration | |
DSLBridge/ModelBridge/DSLModel2KM2 | PASS | PASS | FAIL | foreach - distinct not supported on EMFTVM | |
DSLBridge/ModelBridge/KM32ATL_KM22MM | PASS | PASS | FAIL | Assigning a single value to a Collection property | |
DSLBridge/ModelBridge/XML2DSLModel | PASS | PASS | FAIL | foreach - distinct not supported | |
Enumerations/Ecore | FAIL | FAIL | FAIL | Releng issue | |
Enumerations/UML | FAIL | FAIL | FAIL | Releng issue | |
Families2Persons | PASS | PASS | PASS | ||
FlattenTest | FAIL | FAIL | FAIL | Releng issue | |
InterModelReferences | FAIL | FAIL | FAIL | Releng issue | |
IteratorsTests | FAIL | FAIL | FAIL | Releng issue | |
MultipleOutputs/MultipleOutputs_V0 | FAIL | FAIL | PASS | Releng issue | |
MultipleOutputs/MultipleOutputs_V1 | FAIL | FAIL | PASS | Releng issue | |
OverflowOperandStack | FAIL | FAIL | PASS | ||
Relational2UML | FAIL | FAIL | FAIL | Releng issue | |
ReverseBindings/NonRefiningMode | FAIL | FAIL | FAIL | Misconfigured test | |
ReverseBindings/NonRefiningMode | FAIL | FAIL | FAIL | Misconfigured test | |
RSM2TPC | FAIL | FAIL | FAIL | Long execution time | |
Sildex2Sam | PASS | PASS | FAIL | Invalid rule inheritance + invalid module name + invalid metaclass reference "SAM!IPort" | |
SpreadSheetML2PerformanceUMLStateChart/SpreadsheetMLSimplified2Trace | FAIL | FAIL | FAIL | Releng issue | |
SpreadSheetML2PerformanceUMLStateChart/Trace2PerformanceMetrics | FAIL | FAIL | FAIL | Releng issue | |
SpreadSheetML2PerformanceUMLStateChart/UMLStateChart2PerformanceAnnotatedUMLStateChart | FAIL | FAIL | FAIL | Releng issue | |
UML2Relational | FAIL | FAIL | FAIL | Releng issue | |
UniqueLazyRule | PASS | PASS | PASS |