CVS difference for 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