-
Key: QVT12-12
-
Legacy Issue Number: 18572
-
Status: closed
-
Source: Model Driven Solutions ( Dr. Edward Willink)
-
Summary:
Clause 7.7 mandates fixed-point semantics for in-place transformations.
Please ask my bank to use a repeat-until-no-change in-place transformation for my next pay cheque:
new-balance = old-balance + deposit.
More seriously, the repeat is at the relation level, so if there are multiple applicable relations, the in-place result is specified to experience multiple updates in an indeterminate order. If relation A and then relation B are repeated to exhaustion, is relation A repeated again to accommodate relation B's changes?
Start again. QVTr and QVTc are declarative, therefore they express a single complex truth about the final outputs with respect to the original inputs. There are no observable intermediate steps. It is the responsibility of the transformation engine to ensure that the multiple actual output changes are observed as a single atomic transaction. In particular for in-place transformations, the engine must ensure that no input value is accessed after it is updated for output.
In regard to fixed-point semantics, repetition can only be determinate if it is the entire tranformation that is repeated, and whether to do so would seem to be a legitimate execution option. Therefore QVT should either not specify repetition at all, leaving it to the invoking engine, or specify it as an invocation option for a RelationCallExp.
If an in-place transformation does perform fixed-point repetition at the transformation level, it would seem that the whole repetition should still be a single atomic transaction so that outputs are never observable in an inconsistent partially transformed state between iterations. The engine must therefore iterate over candidate outputs rather than actual outputs.
-
Reported: QVT 1.1 — Thu, 21 Mar 2013 04:00 GMT
-
Disposition: Resolved — QVT 1.2
-
Disposition Summary:
Fixed point semantics can be achieved by a has-it-changed loop.
-
Updated: Fri, 6 Mar 2015 20:58 GMT