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

Differences between 1.3 and version 1.4
Log of other versions for file ai12s/ai12-0235-1.txt

--- ai12s/ai12-0235-1.txt	2018/10/17 22:46:37	1.3
+++ ai12s/ai12-0235-1.txt	2018/10/17 22:53:09	1.4
@@ -1,4 +1,4 @@
-!standard 13.11(5)                                  18-10-17  AI12-0235-1/02
+!standard 13.11(5)                                  18-10-18  AI12-0235-1/03
 !class Amendment 17-06-09
 !status work item 17-06-09
 !status received 17-06-09
@@ -23,8 +23,13 @@
 
 !wording
 
-In 13.11(5), change Preelaborate to Pure.
+Replace 13.11(5) with:
 
+with Ada.Finalization;
+with System.Storage_Elements;
+package System.Storage_Pools
+   with Pure, Nonblocking => False is
+
 !discussion
 
 When Ada 95 was designed, neither Ada.Finalization nor System was
@@ -42,6 +47,15 @@
 initialization might still call a pure, but non-static function, which
 is not permitted during initialization of a preelaborated package.
 
+This package is Nonblocking => False, as it declares abstract operations that
+are intended to be overridden. Such operations inherit nonblocking from their
+ancestor operations, and thus would be incompatible with existing code if set
+to True (that would prevent the use of potentially blocking operations like
+I/O, delays, and entry calls in these routines, all of which are allowed in
+Ada 95, Ada 2005, and Ada 2012). We didn't have to say that for a preelaborable
+package, as that is the default, but we do have to say it for a Pure package,
+which defaults to nonblocking.
+
 Note that being declared pure seems to promise distribution that isn't
 actually possible, though we clarify that in the !problem of the AI.
 
@@ -138,5 +152,43 @@
 
 Here is an update to AI12-0235, making System.Storage_Pools pure.  I left put
 Subpools, due to some concerns with implementation impact.
+
+***************************************************************
+
+From: Randy Brukardt
+Sent: Wednesday, October 17, 2018  5:48 PM
+
+Thanks. You didn't address the "note for the author of AI12-0235-1" (see my
+e-mail of November 30th, 2017 in the !appendix).
+
+Specifically, A pure package has a default of Nonblocking => True, while a
+preelaborable package has a default of Nonblocking => False. It would be
+incompatible for the operations declared in this package (or any existing
+package which is a root type) to be Nonblocking => True, as that would force all
+overridings to be Nonblocking => True (which of course would make delays, entry
+calls, and the like illegal in those overridings). [Important point: remember
+the reverse isn't true, so an overrider can and should declare their routines
+Nonblocking => True if that's possible.]
+
+So the existing paragraph:
+
+with Ada.Finalization;
+with System.Storage_Elements;
+package System.Storage_Pools is
+    pragma Preelaborate(System.Storage_Pools);
+
+should be replaced by:
+
+with Ada.Finalization;
+with System.Storage_Elements;
+package System.Storage_Pools
+   with Pure, Nonblocking => False is
+
+to be compatible and consistent with other similar units (like
+Ada.Finalization).
+
+I've made an update of the AI with this correction.
+
+P.S. Recall that I got John's blessing to use the aspect form in Ada 2020.
 
 ***************************************************************

Questions? Ask the ACAA Technical Agent