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

Differences between 1.7 and version 1.8
Log of other versions for file ai12s/ai12-0317-1.txt

--- ai12s/ai12-0317-1.txt	2019/03/06 02:22:35	1.7
+++ ai12s/ai12-0317-1.txt	2019/03/08 03:14:17	1.8
@@ -1,4 +1,4 @@
-!standard 3.10.2(16.1/5)                                 19-02-26  AI12-0317-1/06
+!standard 3.10.2(16.1/5)                                 19-03-07  AI12-0317-1/07
 !standard 4.3.2(5.1/5)
 !standard 4.3.2(5.2/5)
 !standard 4.3.2(5.3/5)
@@ -10,6 +10,7 @@
 !standard 7.5(2.1/5)
 !class Amendment 19-02-22
 !status Amendment 1-2012 19-02-26
+!status work item 19-03-07
 !status ARG Approved 10-0-0  19-02-26
 !status work item 19-02-22
 !status received 19-02-21
@@ -30,7 +31,7 @@
 
 !proposal
 
-We introduce the term "constituents" to represent the subexpressions
+We introduce the term "operative constituents" to represent the subexpressions
 that represent the "fundamental" computations of a given expression (or
 name), and we introduce the term "newly constructed" to represent
 expressions that create a new object.
@@ -38,11 +39,11 @@
 !wording
 
 [Editor's note: 3.9.2(3) has too many special cases to be shifted over to using
-the "constituents" terminology.]
+the "operative constituents" terminology.]
 
 Modify RM 3.10.2(16.1/5):
 
-  In the above rules, the {constituents of a name or expression (see
+  In the above rules, the {operative constituents of a name or expression (see
   4.4) are considered to be used in a given context if the enclosing name or
   expression is used in that context.} [operand of a view conversion,
   parenthesized expression or qualified_expression is considered to be
@@ -58,7 +59,7 @@
 
   If the type of the ancestor_part is limited and at least one component
   is needed in the record_component_association_list, then the
-  ancestor_part shall not [be: ] {have a constituent expression (see
+  ancestor_part shall not [be: ] {have a operative constituent expression (see
   4.4) that is} a call to a function with an unconstrained result
   subtype{.}[; nor ... 
 
@@ -70,38 +71,38 @@
   [This has been missing from the Standard for 40 years, seems like 
   time to fix it - Editor.]
 
-  Every name or expression comprises one or more /constituent/ names or
-  expressions, only one of which is evaluated as part of evaluating the
-  name or expression (the /evaluated constituent/).  The constituents
-  are determined as follows, according to the form of the expression or
-  name:
+  Every name or expression comprises one or more /operative constituent/ 
+  names or expressions, only one of which is evaluated as part of evaluating 
+  the name or expression (the /evaluated operative constituent/).  The 
+  operative constituents are determined as follows, according to the form of 
+  the expression or name:
 
-    * if the expression is a conditional_expression, the constituents of
-      its dependent_expressions;
+    * if the expression is a conditional_expression, the operative 
+      constituents of its dependent_expressions;
 
     * if the expression (or name) is a parenthesized expression, a
-      qualified_expression, or a view conversion, the constituent(s) of its
-      operand;
+      qualified_expression, or a view conversion, the operative constituent(s)
+      of its operand;
 
-    * if the expression is a declare_expression, the constituent(s) of its
-      body_expression;
+    * if the expression is a declare_expression, the operative constituent(s) 
+      of its body_expression;
 
     * otherwise, the expression (or name) itself.
     
-  In certain contexts, we specify that a constituent shall (or shall
-  not) be /newly constructed/.  This means the constituent shall (or
+  In certain contexts, we specify that an operative constituent shall (or 
+  shall not) be /newly constructed/.  This means the constituent shall (or
   shall not) be an aggregate or a function_call; in either case, a
   raise_expression is permitted.
 
   AARM To Be Honest: If an if_expression does not have an else clause,
-  "True" is a constituent of the expression and it can be the evaluated 
-  constituent.
+  "True" is an operative constituent of the expression and it can be the 
+  evaluated opeerative constituent.
    
 Modify RM 4.5.9(6/5):
 
   A declare_item that is an object_renaming_declaration (see 8.5.1)
-  shall not rename an object of a limited type {if any constituent 
-  of the object_name is a value conversion or is newly constructed
+  shall not rename an object of a limited type {if any operative 
+  constituent of the object_name is a value conversion or is newly constructed
   (see 4.4).} [that is a function_call, aggregate, a parenthesized
   expression, qualified_expression, or type_conversion with an operand
   of one of these, a conditional_expression that has at least one
@@ -117,8 +118,9 @@
   associated with the operand.] For a value conversion, the associated
   object is the anonymous result object if such an object is created
   (see 4.6); otherwise it is the associated object of the operand. {In
-  other cases, the object associated with the evaluated constituent of
-  the name or expression (see 4.4) determines its associated object.} 
+  other cases, the object associated with the evaluated operative 
+  constituent of the name or expression (see 4.4) determines its 
+  associated object.} 
   [For a conditional_expression, this object is the one associated with
   the evaluated dependent_expression. For a declare_expression, this
   object is the one associated with the body_expression.]
@@ -126,8 +128,8 @@
 Modify RM 7.5(2.1/5):
 
   In the following contexts, an expression of a limited type is [not]
-  permitted {only if each of its constituents is /newly constructed/
-  (see 4.4):} [unless it is an aggregate, a function_call, a
+  permitted {only if each of its operative constituents is newly 
+  constructed (see 4.4):} [unless it is an aggregate, a function_call, a
   raise_expression, a parenthesized expression or qualified_expression
   whose operand is permitted by this rule, a conditional_expression all
   of whose dependent_expressions are permitted by this rule, or a
@@ -138,16 +140,20 @@
 
 Introducing new terms means choosing among all the possible English
 words that communicate the appropriate notion, and that don't already
-have uses that conflict. We chose "constituent" and "evaluated
-constituent" after considering various other terms like "component" or
-"part" or "element" all of which have existing uses in Ada, as well as
-other terms which don't quite capture the intent. We chose "newly
-constructed" because it seems to capture the idea, without using the
-term "create" which already has a very technical meaning in Ada.
+have uses that conflict. We originally chose "constituent" after 
+considering various other terms like "component" or "part" or "element" 
+all of which have existing uses in Ada, as well as other terms which 
+don't quite capture the intent. Unfortunately, we failed to notice that 
+the term is already defined in 1.1.4. Luckily, what we want is a subset
+of constituents, so we settled on "operative constituent", which seems
+to imply the "meat of the expression" without implying that the "salad"
+is useless. We chose "newly constructed" because it seems to capture the 
+idea, without using the term "create" which already has a very technical 
+meaning in Ada.
 
 We tried to replace the wording in 3.9.2 about statically and
-dynamically tagged, and tag-indeterminate to use the "constituents"
-terminology, but it just began to get out of hand.
+dynamically tagged, and tag-indeterminate to use the "operative 
+constituents" terminology, but it just began to get out of hand.
 
 !corrigendum 3.10.2(16.1/3)
 
@@ -159,9 +165,9 @@
 considered to be used in a context if the @fa<conditional_expression> itself is
 used in that context.
 @dby
-In the above rules, the constituents of a @fa<name> or @fa<expression> (see
-4.4) are considered to be used in a given context if the enclosing @fa<name> or
-@fa<expression> is used in that context.
+In the above rules, the operative constituents of a @fa<name> or 
+@fa<expression> (see 4.4) are considered to be used in a given context if the 
+enclosing @fa<name> or @fa<expression> is used in that context.
 
 
 !corrigendum 4.3.2(5.1/3)
@@ -173,8 +179,8 @@
 @dby
 If the type of the @fa<ancestor_part> is limited and at least one component is
 needed in the @fa<record_component_association_list>, then the @fa<ancestor_part> shall
-not have a constituent expression (see 4.4) that is a call to a function with an 
-unconstrained result subtype.
+not have an operative constituent expression (see 4.4) that is a call to a function 
+with an unconstrained result subtype.
 
 !corrigendum 4.3.2(5.2/3)
 
@@ -203,25 +209,25 @@
 A @fa<primary> that is an @fa<expression> surrounded by ( and ) is known as a 
 @i<parenthesized expression>.
 
-Every @fa<name> or @fa<expression> comprises one or more @i<constituent> 
+Every @fa<name> or @fa<expression> comprises one or more @i<operative constituent> 
 @fa<name>s or @fa<expression>s, only one of which is evaluated as part of 
-evaluating the @fa<name> or @fa<expression> (the @i<evaluated constituent>). 
-The constituents are determined as follows, according to the form of the 
+evaluating the @fa<name> or @fa<expression> (the @i<evaluated operative constituent>). 
+The operative constituents are determined as follows, according to the form of the 
 @fa<expression> (or @fa<name>):
 
 @xbullet<if the @fa<expression> is a @fa<conditional_expression>, the 
-constituents of its @i<dependent_>@fa<expression>s;>
+operative constituents of its @i<dependent_>@fa<expression>s;>
 
 @xbullet<if the @fa<expression> (or @fa<name>) is a parenthesized 
 expression, a @fa<qualified_expression>, or a view conversion, the 
-constituent(s) of its operand;>
+operative constituent(s) of its operand;>
 
 @xbullet<if the @fa<expression> is a @fa<declare_expression>, the 
-constituent(s) of its @i<body_>@fa<expression>;>
+operative constituent(s) of its @i<body_>@fa<expression>;>
 
 @xbullet<otherwise, the @fa<expression> (or @fa<name>) itself.>
     
-In certain contexts, we specify that a constituent shall (or shall
+In certain contexts, we specify that an operative constituent shall (or shall
 not) be @i<newly constructed>. This means the constituent shall (or
 shall not) be an @fa<aggregate> or a @fa<function_call>; in either case, a
 @fa<raise_expression> is permitted.
@@ -251,7 +257,7 @@
 object. For a value conversion, the associated object is the anonymous result
 object if such an object is created (see 4.6); otherwise it is the
 associated object of the operand. In
-other cases, the object associated with the evaluated constituent of
+other cases, the object associated with the evaluated operative constituent of
 the @fa<name> or @fa<expression> (see 4.4) determines its associated object.
 
 
@@ -267,7 +273,7 @@
 rule:
 @dby
 In the following contexts, an @fa<expression> of a limited type is permitted
-only if each of its constituents is newly constructed (see 4.4): 
+only if each of its operative constituents is newly constructed (see 4.4): 
 
 
 !ASIS
@@ -930,9 +936,292 @@
 
 ****************************************************************
 
+From: Tucker Taft
+Sent: Wednesday, March 6, 2019  6:32 PM
+
+I just bumped into a place in the manual where we already use the term
+"constituent" as a technical term with a meaning other than that 
+proposed recently.  In fact, "constituent" is defined to be essentially 
+any part of a syntactic construct, in RM 1.1.4(17).  
+
+I looked around for other similar terms which are not already used 
+technically in the RM, and came up with "fragment."  Another possibility 
+would be to qualify "constituent" with some additional term, such as "basic 
+constituent."
+
+Any opinions about "fragment" vs. "basic constituent" vs. some third term?
+
+I think I am somewhat favoring "basic constituent" given that they are in 
+fact "constituents" as defined in 1.1.4(17), since they correspond to a part 
+of a larger syntactic construct.  "Fragment" doesn't have any particular 
+intuition to it, whereas "basic constituent" has a bit of an intuitive 
+connection to the proposed purpose.  These are the constituents of a name or 
+expression that represent the "basic," fundamental computations, and are 
+composed via conditional expressions to form the overall name/expression.
+
+****************************************************************
+
+From: Steve Baird
+Sent: Wednesday, March 6, 2019  6:44 PM
+
+> Any opinions about "fragment" vs. "basic constituent" vs. some third term?
+
+I prefer "basic constituent" to "fragment".
+
+Incidentally, another place where this term can be used (you are probably 
+already aware of this) is in the definition of applicable index constraint
+in 4.3.3; something like
+
+    The applicable index constraint of a basic constituent of an
+    expression is the applicable index constraint of the expression.
+
+would be better than the current list of rules.
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Wednesday, March 6, 2019  7:00 PM
+
+> I prefer "basic constituent" to "fragment".
+
+I agree. Especially since I've already put all of the "constituent" wording 
+into the RM (we approved that AI last time).
+
+> Incidentally, another place where this term can be used (you are 
+> probably already aware of this) is in the definition of applicable 
+> index constraint in 4.3.3; something like
+> 
+>     The applicable index constraint of a basic constituent of an
+>     expression is the applicable index constraint of the expression.
+> 
+> would be better than the current list of rules.
+
+Yes, this seems like a good idea as well.
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Wednesday, March 6, 2019  7:08 PM
+
+> Incidentally, another place where this term can be used (you are 
+> probably already aware of this) is in the definition of applicable 
+> index constraint in 4.3.3; something like
+> 
+>   The applicable index constraint of a basic constituent of an
+>   expression is the applicable index constraint of the expression.
+> 
+> would be better than the current list of rules.
+
+No, I hadn't noticed that.  Actually, I don't think it is quite as useful 
+there as you imply.  Most of the rules are specifying how the applicable index 
+constraint is determined.  There are only three constructs, parenthesized 
+expressions, conditional expressions, and declare expressions, that merely
+"pass through" the applicable index constraints.  For those we could perhaps 
+say:
+
+  * For a parenthesized expression, conditional_expression, or declare_expression,
+   the applicable index constraint for each basic constituent is that, if any, 
+   defined for the expression.
+
+But I don't think that actually works, because "basic constituent" will "skip 
+over" qualified expressions, when in fact, the subtype specified in the 
+qualification matters.
+
+****************************************************************
+
+From: Steve Baird
+Sent: Wednesday, March 6, 2019  7:12 PM
+
+Good point.
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Wednesday, March 6, 2019  7:14 PM
+
+> I think I am somewhat favoring "basic constituent" given that they are 
+> in fact "constituents" as defined in 1.1.4(17), since they correspond 
+> to a part of a larger syntactic construct.
+
+However, "construct" is defined as:
+
+A construct is a piece of text (explicit or implicit) that is an instance 
+of a syntactic category defined under "Syntax". 
+
+I think it's arguable whether or not a parenthesized expression is a construct 
+by this definition. There's definitely not any syntactic category defined for 
+it (it's part of something more general). I doubt we've ever cared before (or 
+will again), but that argues (weakly) for a different term.
+
+As a matter of English, I certainly prefer "basic constituent" to "fragment"; 
+the latter has the wrong connotation. I do wonder if "basic" is the right 
+adjective, though. It's more the "important constituent" or "interesting 
+constituent" (being the one on which the rules are enforced, properties 
+determined, and so on).
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Wednesday, March 6, 2019  8:36 PM
+
+> However, "construct" is defined as:
+> 
+> A construct is a piece of text (explicit or implicit) that is an 
+> instance of a syntactic category defined under "Syntax".
+> 
+> I think it's arguable whether or not a parenthesized expression is a 
+> construct by this definition. There's definitely not any syntactic 
+> category defined for it (it's part of something more general). I doubt 
+> we've ever cared before (or will again), but that argues (weakly) for a 
+> different term.
+
+By any reasonable definition, a parenthesized expression is a syntactic 
+construct.  It is just an odd quirk of the Ada grammar that it doesn't have 
+its own rule.  I don't think that quirk argues for or against anything, 
+personally.
+ 
+> As a matter of English, I certainly prefer "basic constituent" to 
+> "fragment"; the latter has the wrong connotation. I do wonder if 
+> "basic" is the right adjective, though. It's more the "important 
+> constituent" or "interesting constituent" (being the one on which the 
+> rules are enforced, properties determined, and so on).
+
+I thought briefly about other terms, but "basic" seemed the simplest and 
+clearest.  I suppose one of us might come up with a better term over the 
+next few days, but failing that, I am at least in these ARG discussions 
+going to start using the term "basic constituent," and hopefully it will 
+be clear what I mean! ;-)
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, March 7, 2019  2:18 PM
+
+> I thought briefly about other terms, but "basic" seemed the simplest 
+> and clearest.  I suppose one of us might come up with a better term 
+> over the next few days, but failing that, I am at least in these ARG 
+> discussions going to start using the term "basic constituent," and 
+> hopefully it will be clear what I mean! ;-)
+
+I suppose given this severe bug (redefining an existing term is pretty bad),
+AI12-0317-1 should be reopened and put back on the agenda.
+
+But the more I think about it, the less I like "basic constituent". This 
+typically is the largest and most complex part of an expression, and I don't 
+see anything "basic" about it. In
+
+     (Foo(A, B, C) + Bar(D, E, F))
+
+the "basic constituent" is:
+
+     Foo(A, B, C) + Bar(D, E, F)
+
+The idea really is that some constituents are insignificant for many (not 
+quite all) rules. Perhaps they are "transparent constituents" or 
+"insignificant constituents". In which case the others are "non-transparent 
+constituents" or "significant constituents".
+
+The thesaurus for "significant" gives the following possible terms (not all 
+serious suggestions):
+
+   "important constituents"
+   "momentous constituents"
+   "earthshaking constituents"
+   "evidential constituents"
+   "fundamental constituents"
+   "profound constituents"
+   "large constituents"
+   "monumental constituents"
+   "noteworthy constituents"
+   "remarkable constituents"
+   "operative constituents"
+   "key constituents"
+   "portentous constituents"
+   "prodigious constituents"
+   "meaningful constituents"
+
+Of these, I'd lean toward "key" or "meaningful". "fundamental" isn't bad 
+either, but a bit long (as is "significant").
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Thursday, March 7, 2019  2:27 PM
+
+I actually like "operative constituents" because it distinguishes itself from
+all the "fruit salad" around conditional expressions, declare expressions, 
+qualified expressions, which don't really produce a final value that is used.
+The "operative constituents" are the "meat" of the expression.
+
+****************************************************************
+
+From: Edmond Schonberg
+Sent: Thursday, March 7, 2019  2:35 PM
+
+> Of these, I'd lean toward "key" or "meaningful". "fundamental" isn't 
+> bad either, but a bit long (as is "significant).
+
+We are trying to capture the notion of a piece of text to which some rules 
+apply. What about "relevant constituent" ?
+
+****************************************************************
+
 From: Steve Baird
-Sent: Friday, March 1, 2019  12:57 PM
+Sent: Thursday, March 7, 2019  2:45 PM
+
+> Of these, I'd lean toward "key" or "meaningful".
+
+I prefer "operative" precisely because it is more vague.
+
+As you noted, we are looking through some constructs and not looking through 
+others; I don't think you will find a nice one-word term that captures the idea, 
+so better to go with a term that doesn't intuitively suggest something that 
+isn't right.
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Thursday, March 7, 2019  4:00 PM
+
+> We are trying to capture the notion of a piece of text to which some rules 
+> apply. What about "relevant constituent" ?
+
+Pretty much everything is "relevant" to something.  We are trying to define a 
+term before we have explained what rules might use the term.  Of the ones 
+mentioned, "operative constituents" seems to imply that the constituents are 
+somehow special, but as Steve says, the term doesn't come with a lot of 
+"baggage" that might interfere with our defining exactly what we want it to 
+mean. 
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, March 7, 2019  4:11 PM
+
+"Operative constituents" is OK with me; I'll update the (previously approved
+but fatally flawed) AI that way for discussion on Monday. At least until I 
+get 3 messages telling me to do something else. ;-)
+
+****************************************************************
+
+From: Bob Duff
+Sent: Thursday, March 7, 2019  5:01 PM
+
+> I actually like "operative constituents" because it distinguishes 
+> itself from all the "fruit salad" around conditional expressions, 
+> declare expressions, qualified expressions, which don't really produce 
+> a final value that is used.  The "operative constituents" are the 
+> "meat" of the expression.
+
+"operative constituents" is OK with me.
+
+I was about to suggest something like "meat of...", but never mind.
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, March 7, 2019  6:02 PM
 
-Looks good to me.
+"ham" vs. "spam"?? :-)
 
 ****************************************************************

Questions? Ask the ACAA Technical Agent