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

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

--- ai12s/ai12-0235-1.txt	2018/01/18 20:36:47	1.2
+++ ai12s/ai12-0235-1.txt	2018/10/17 22:46:37	1.3
@@ -1,43 +1,49 @@
-!standard 13.11(5)                                  17-06-09  AI12-0235-1/01
-!standard 13.11.4(3/3)
+!standard 13.11(5)                                  18-10-17  AI12-0235-1/02
 !class Amendment 17-06-09
 !status work item 17-06-09
 !status received 17-06-09
 !priority Low
 !difficulty Easy
-!subject Root_Storage_Pool should be pure 
+!subject System.Storage_Pools should be pure
 !summary
 
+System.Storage_Pools is declared pure, rather than merely preelaborated.
+
 !problem
 
-It is not possible to define a pool/subpool in a Pure package as
-Root_Storage_Pool is preelaborated. This prevents defining a shared pool
-type for use in the distributed program. (Note that, due to the prohibition
-on variables in distributed packages, a pool cannot itself be shared across
-partitions). 
+It is not possible to define a storage pool in a Pure package as
+System.Storage_Pools is preelaborated rather than pure. This prevents
+defining a shared pool type for use in the distributed program. (Note
+that, due to the prohibition on variables in distributed packages, a
+pool cannot itself be shared across partitions).
 
 !proposal
 
 (See Summary.)
 
 !wording
-
-In 13.11(5) and 13.11.4(3/3), change Preelaborate to Pure.
 
-[Question: Do we still need the pragma Preelaborable_Initialization in 13.11(6/2)?]
+In 13.11(5), change Preelaborate to Pure.
 
 !discussion
 
-When Ada 95 was designed, neither Ada.Finalization nor System was declared
-Pure, so it would have been impossible to declare either of these packages
+When Ada 95 was designed, neither Ada.Finalization nor System was
+declared Pure, so it would have been impossible to declare this package
 Pure then. Nor were access types allowed.
 
 Thus, there is no obvious reason (other than possibly breaking existing
-implementations) that these packages cannot be Pure.
+implementations) that System.Storage_Pools cannot be Pure.  We
+considered also making the Storage_Pools.Subpools package pure, but felt
+there was less benefit there, and more likelihood of affecting existing
+implementations.
+
+Note that we do *not* remove the aspect "with
+Preelaborable_Initialization" in 13.11(6/2), as the default
+initialization might still call a pure, but non-static function, which
+is not permitted during initialization of a preelaborated package.
 
-OTOH, this seems to promise distribution that isn't actually possible. And
-the argument above could be applied to almost any package -- but forcing all
-language-defined packages to be Pure would make them almost unmaintainable.
+Note that being declared pure seems to promise distribution that isn't
+actually possible, though we clarify that in the !problem of the AI.
 
 !ASIS
 
@@ -108,7 +114,7 @@
     ...
 
 But this latter would be wildly incompatible, as all existing overridings of
-Allocate/Deallocate would have to be changed to be Nonblocking. (One cannot 
+Allocate/Deallocate would have to be changed to be Nonblocking. (One cannot
 override a Nonblocking => True subprogram with a Nonblocking => False, lest a
 dispatching call violate the declaration's promise.) You actually need to
 explicitly declare:
@@ -124,5 +130,13 @@
 I believe there is a similar issue for Global (or will be when it is finished),
 since it defaults to Global => null for pure units and thus the root primitive
 operations.
+
+***************************************************************
+
+From: Tucker Taft
+Sent: Wednesday, October 17, 2018  2:07 PM
+
+Here is an update to AI12-0235, making System.Storage_Pools pure.  I left put
+Subpools, due to some concerns with implementation impact.
 
 ***************************************************************

Questions? Ask the ACAA Technical Agent