CVS difference for ais/ai-00147.txt

Differences between 1.1 and version 1.2
Log of other versions for file 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 @@
 !difficulty Hard
 !subject Optimization of Controlled Types
 
-!summary 98-03-21
+!summary 98-09-29
 
 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
+types if
+  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.
 
 
 !question 98-03-21
@@ -116,7 +122,7 @@
 Finalize operation. Is this intended ? [No]
 
 
-!recommendation 98-03-21
+!recommendation 98-09-29
 
 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
-be deleted.
+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.
 
+!wording 98-09-29
 
-!wording 96-06-06
+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
+!summary.
 
-The last sentence of 7.6(21) should be deleted.
+!discussion 98-09-29
 
-
-!discussion 98-03-21
-
 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.
 
 
 !appendix 96-09-04

Questions? Ask the ACAA Technical Agent