CVS difference for ai12s/ai12-0374-1.txt

Differences between 1.1 and version 1.2
Log of other versions for file ai12s/ai12-0374-1.txt

--- ai12s/ai12-0374-1.txt	2020/03/23 03:16:43	1.1
+++ ai12s/ai12-0374-1.txt	2020/05/02 03:43:14	1.2
@@ -1,4 +1,4 @@
-!standard 9.5(24/5)                                   20-03-22  AI12-0374-1/01
+!standard 9.5(24/5)                                   20-04-29  AI12-0374-1/02
 !standard 9.5(27/5)
 !standard 9.5(36/5)
 !standard 9.5(47/5)
@@ -43,13 +43,13 @@
 declarations. Something similar should be done for Nonblocking for
 generic units.
 
-(2) Stream attributes internally make dispatching calls on the
-stream read/write routines, which can be user written. In general for a 
-subprogram that internally makes dispatching calls, we probably need a way to
-specify its Nonblocking aspect in terms of the Nonblocking aspects of the
-dispatching calls performed on a given classwide object, in combination
+(2) Stream attributes internally make dispatching calls on the stream 
+read/write routines, which can be user written. In general for a 
+subprogram that internally makes dispatching calls, we probably need a way to
+specify its Nonblocking aspect in terms of the Nonblocking aspects of the
+dispatching calls performed on a given classwide object, in combination
 with the nonblocking of the subprogram as a whole.
-
+
 (3) A predicate expression can potentially block. However, there is currently 
 no way to indicate that the predicate of a type has blocking behavior. This
 means that a nonblocking type used in a supposedly nonblocking
@@ -79,21 +79,23 @@
    always be nonblocking, Nonblocking can be specified on the formal parameters.
 
 (2) 
-Add after 9.5(49/5):
-
-  For a prefix X denoting an object of a class-wide type T'Class,
-  the following attribute is defined:
-
-  X'Nonblocking(dispatching_operation_list)
-
-    X'Nonblocking(list) represents the AND of the Nonblocking aspect of
-    the first subtype of the tagged type T1 identified by the tag of X,
-    and the Nonblocking aspects of the dispatching operations of T1
-    corresponding to the specified dispatching operations of T (or all
-    dispatching operations of T if the list is the reserved word ALL).
-    If a /dispatching_/selector_name within the list denotes multiple
-    dispatching operations of T, the Nonblocking aspects of all of the
-    corresponding dispatching operations of T1 are ANDed together.
+Add after 9.5(49/5):
+
+  For a prefix X denoting an object of a class-wide type T'Class,
+  the following attribute is defined:
+
+  X'Nonblocking(dispatching_operation_list)
+
+    X'Nonblocking(list) represents the AND of the Nonblocking aspect of
+    the tagged type T1 identified by the tag of X, and the Nonblocking
+    aspects of the dispatching operations of T1 corresponding to the
+    specified dispatching operations of T (or all dispatching operations
+    of T if the list is the reserved word ALL). If a
+    /dispatching_/selector_name within the list denotes multiple
+    dispatching operations of T, the Nonblocking aspects of all of the
+    corresponding dispatching operations of T1 are ANDed together.
+
+[Editor's note: This also reflects a minor change for (3).]
 
 (3)
 Modify 9.5(24/5):
@@ -132,22 +134,6 @@
      [S'Nonblocking represents the nonblocking expression of S;
      evaluation of S'Nonblocking evaluates that expression.]
 
-Add after 9.5(49/5):
-
-  For a prefix X denoting an object of a class-wide type T'Class,
-  the following attribute is defined:
-
-  X'Nonblocking(dispatching_operation_list)
-
-    X'Nonblocking(list) represents the AND of the Nonblocking aspect of
-    the tagged type T1 identified by the tag of X, and the Nonblocking
-    aspects of the dispatching operations of T1 corresponding to the
-    specified dispatching operations of T (or all dispatching operations
-    of T if the list is the reserved word ALL). If a
-    /dispatching_/selector_name within the list denotes multiple
-    dispatching operations of T, the Nonblocking aspects of all of the
-    corresponding dispatching operations of T1 are ANDed together.
-
 Add after 9.5(65/5):
 
   For a subtype for which aspect Nonblocking is True, any predicate
@@ -201,20 +187,20 @@
 
 If the generic unit allows blocking (implicitly or explicitly), the nonblocking
 of the formals do not matter. This is the default for library units, as any 
-other setting would be incompatible.
+other setting would be very incompatible.
 
 This definition has the pleasant effect of by default allowing the use of the 
 formal entities within the generic unit regardless of their nonblocking state.
 The assume-the-worst rules only come into play when the default nonblocking
 expression is replaced by a more restrictive expression. 
 
-(2) For a subprogram that internally performs dispatching calls on an object
-of whose tag is determined at the call site, it is essentially
+(2) For a subprogram that internally performs dispatching calls on an object
+of whose tag is determined at the call site, it is essentially
 impossible to describe the Nonblocking behavior independently of that 
 caller-determined tag. Therefore, we propose to allow a subprogram to indicate 
 what dispatching operations it performs on a given object known to the caller, 
 and then have the caller determine what are the implications with respect to 
-Nonblocking.
+Nonblocking.
 
 (3) In this AI we define 'Nonblocking as attributes on subtypes rather than
 types, and we allow specifying the corresponding aspects. The alternative of 
@@ -270,13 +256,12 @@
 
 !ASIS
 
-[Not sure. It seems like some new capabilities might be needed,
-but I didn't check - Editor.]
+No ASIS change needed.
 
 !ACATS test
 
-ACATS B- and C-Tests are needed to check that the new capabilities are
-supported.
+ACATS B- and C-Tests are needed to check that the new rules and capabilities
+are supported.
 
 
 !appendix

Questions? Ask the ACAA Technical Agent