AI22-0033-1

!standard 1.3.1(6/5)                                        23-07-10  AI22-0033-1/03

!standard 1.3.3(1/5)

!class presentation 23-03-23

!status Corrigendum 1-2022  23-07-10

!status ARG Approved  9-0-0  23-06-12

!status work item 23-03-23

!status received 23-03-23

!priority Very_Low

!difficulty Easy

!subject Additional terms and definitions

!summary

Define additional terms as needed.

!issue

A number of important terms are missing from the Terms and Definitions sections. We should add more, and possibly reorganize some that we already have.

!recommendation

(See Summary.)

!wording

Add after 1.3.1(6/5):

allocator.  expression that allocates[a] and initializes an object and yields an access value that designates it.

Add after 1.3.1(20/5):

declarative region.  portion of the program that includes the text of a construct together with the text where nested declarations can occur.

Add after 1.3.1(21/5):

denotes.  identifies an object, subprogram, declared entity, or attribute thereof[b].

derivation class.  set of a root type and all types derived from it.

Add after 1.3.1(26/5):

designates.  refers to an object or subprogram via an access value.

Add after 1.3.1(73/5):

statically denotes.  denotes (an attribute of) a declaration directly, or through a renaming.

statically names.  statically denotes an object, or a subcomponent of a statically denoted object where any selectors denote subcomponents that are not discriminant-dependent, and any indexing is statically within static bounds.

Add after 1.3.2(1/5):

homograph.  declaration with the same name and, if overloadable, a type conformant parameter (and result) profile.

overloaded.  property of a declaration whose name is shared with other declarations in the same declarative region.

Add after 1.3.3(1/5):

child unit.  library unit (logically) occurring within the declarative region of another  library unit.

Add after 1.3.3(15/5):

instantiation.  creation of an actual package or subprogram from a (template) generic unit.

Add after 1.3.3(23/5):

operative constituent. one of the expressions within an enclosing expression whose evaluation yields  the value  of that enclosing expression.

Add after 1.3.3(36/5):

subsystem. root library unit, together with its descendants.

[Author’s note: 10.1(4) uses the rather clumsy "children and grandchildren and so on", maybe considering that the term "descendants" is only applicable to types.  But 10.1.1(11 & 12) is quite happy talking about library units having descendants.]

Add before 1.3.5(1/5):

bounded error.  error that causes behavior that is not generally predictable but within specified bounds.

Add after 1.3.5(1/5):

erroneous execution.  unpredictable runtime behavior, without specified bounds, caused by an error that is not generally detectable.

!discussion

We consider the Terms and Definitions section the place to define short, descriptive definitions. The lengthy, formal definitions are placed in the body of the Reference Manual as it would be impossible to meet the rules on writing definitions (see below) for the formal definitions. More on this can be found in the AARM Notes for subclause 1.3.

Terms and Definitions should be defined as required by the JTC1 Directives, Part 2. Some highlights for this purpose:

---

A number of candidate terms were noted during the FDIS updates. We did not add more of these at the last minute in fear of making trouble for ourselves; we limited ourselves to terms/definitions that needed to be fixed because of ISO comments.

Terms that are mentioned in existing definitions or notes but not defined:

Other important terms that probably ought to be defined include:[c][d]

and a number of visibility terms:

Other candidates can be found by skimming through the index (all defined terms should appear in the index).

If the "other constructs" category gets too large, it might make sense to splitting it into a "units" and "other constructs" categories.

!ACATS test

This is purely additional informative material, so no tests are needed.

!appendix

[a]Editorial review: The minutes say that Tucker wants this to "allocate from a storage pool". So where is the storage pool in this definition?? "Storage pool object" is a defined term. I think this should say "allocates from a storage pool object", or maybe something like "expression that creates an object by allocating it from a storage pool object, initializing it, and then yields an access value the designates the new object".

[b]Editorial review: Is this word necessary? The definition is supposed to be substitutable for the term, and this word would make any such text clunky. And it doesn't really seem to add anything.

[c]Root type of a class-wide type

[d]subtype predicate?