CVS difference for ais/ai-00147.txt
--- ais/ai-00147.txt 1998/09/30 00:17:26 1.1
+++ ais/ai-00147.txt 1998/10/01 00:24:26 1.2
@@ -1,4 +1,4 @@
-!standard 07.06 (21) 98-03-21 AI95-00147/03
+!standard 07.06 (21) 98-09-29 AI95-00147/04
!class binding interpretation 96-06-06
!status work item 98-04-01
!status ARG Approved (with changes) 10-1-2 95-11-01
@@ -9,7 +9,7 @@
!subject Optimization of Controlled Types
7.6(18-21) does not apply to limited controlled types. Thus, the
Initialize and Finalize calls will happen as described in other
@@ -18,16 +18,22 @@
For non-limited controlled types, the implementation permission of
RM-7.6(18-21) is extended as follows:
-Implicit Adjust and Finalize calls on objects of non-limited
-controlled types can be omitted as long as it is guaranteed that
- a) assuming no side-effects of these calls other than on the value
- of the object, the external effect of any program execution
- would remain unaffected, and
+An implementation is permitted to omit implicit Adjust and Finalize calls
+and associated assignment operations on an object of non-limited controlled
+ a) any change to the value of the object performed by these calls or
+ assignment operations do not affect the external effect of any
+ program execution, and
b) any execution of the program that executes an Initialize or Adjust
- call on an object will also execute a Finalize call on the object
+ call on an object will also later execute a Finalize call on the object
and will always do so prior to assigning a new value to the object.
+This permission applies even if the implicit calls produce side-effects
+on other objects.
-The last sentence of 7.6(21) is deleted.
+The last sentence of 7.6(21) is amended to include the omission of the
+finalization of the anonymous object (along with the adjustment) and to
+exclude the optimization when there are any access values designating
+the anonymous object as a whole.
@@ -116,7 +122,7 @@
Finalize operation. Is this intended ? [No]
For limited controlled types, the canonical semantics apply.
@@ -135,19 +141,20 @@
operations on it by assigning the value directly from its source to
the final destination and adjusting it.
-The last sentence of 7.6(21) describes an incorrect semantics and should
+The last sentence of 7.6(21) omits an important additional constraint:
+In order for the adjustment to be omitted, it must also be guaranteed
+that there are no access values designating the anonymous object as a whole.
+7.6(18-21) need to be carefully rephrased to encompass the permissions
+stated in the !summary.
-7.6(18-21) need to be carefully rephrased to encompass these permissions.
+The last sentence of 7.6(21) needs to be amended as stated in the
-The last sentence of 7.6(21) should be deleted.
The above examples show that the implicit calls can create a non-trivial
overhead on the execution even when the existing Implementation Permission
of RM-7.6. is applied. It is therefore worthwhile to consider extending the
@@ -290,14 +297,15 @@
optimization by its externally visible effects.
Finally, the !question raises an issue with the last sentence of
-7.6(21), which indeed is wrong. Even with the interpretation that,
-along with the omission of the re-adjustment, the temporary object is
-then not finalized either, this permission would fail in the case
-where the object itself were referenced by one of its subcomponents or
-by other objects reachable via subcomponents and properly modified by
-the Adjust call to refer to the object in question (e.g., as a means
-to track all objects of a certain type).
-The sentence should therefore be deleted.
+7.6(21), which indeed is seriously incomplete. The sentence needs to
+be interpreted to mean that, along with the omission of the
+re-adjustment, the temporary object is not finalized either. Also,
+this permission causes a major problem in the case where the object
+itself is referenced by one of its subcomponents or by other objects
+reachable via subcomponents and properly modified by the Adjust call
+to refer to the object in question (e.g., as a means to track all
+objects of a certain type). The sentence therefore needs to be
+amended to exclude the optimization in this case.
Questions? Ask the ACAA Technical Agent