Version 1.2 of ai12s/ai12-0425-1.txt
!standard 13.6(2) 21-03-14 AI12-0425-1/02
!standard J.15.8(1/3)
!standard N(16)
!standard N(22)
!class presentation 21-03-02
!status Amendment 1-2012 21-03-02
!status work item 21-03-02
!status received 20-03-02
!priority Low
!difficulty Easy
!qualifier Omission
!subject Presentation issues from public review
!summary
Various wording issues were noted by reviewers of Draft 29.
!question
(1) J.15.8(1/3) has two "and"s. Additionally, the simplified form adopted by
AI12-0417-1 would be better anyway. Should this be changed? (Yes.)
(2) 13.6(2) says:
To convert a record from one representation to another, two record types
with a common ancestor type need to be declared, with no inherited
subprograms. Distinct representations can then be specified for the record
types, and explicit conversion between the types can be used to effect a
change in representation.
AI12-0376-1 repealed the requirement that there be no inherited subprograms,
so it seems wrong to mention that here. Additionally, various related rules
have been changed over the years since this was written. Perhaps it should
say something about tagged types and/or by-reference types.
Should this wording be improved? (Yes.)
(3) N(16) is not worded as a definition but simply states a property.
Reword? (Yes.)
(4) N(22) contains the odd phrase that a library unit "is always a package,
subprogram, or generic unit". This seems better without the "always". Change
this? (Yes.)
!recommendation
(1) Replace J.15.8(1/3) with: "The following pragmas are defined with the
given forms:".
(2) Updated 13.6(2) to mention untagged types, and remove the part about
primitive subprograms. Update the AARM notes accordingly, including a
mention of by-reference types. (It doesn't make sense to define by-reference
types with different representations, so it isn't necessary to mention it in
the RM.)
(3) Replace with: "An elementary type is a type that does not have components."
(4) Follow the suggestion in the question.
!wording
[Editor's note: Changes (1) and (2) were applied to Draft 29 of the Ada 202x
RM, even though they have not yet been approved, in order that that draft be
as accurate as possible.]
(1) Replace J.15.8(1/3):
The form for pragmas Atomic, Volatile, Independent,
Atomic_Components, and Volatile_Components, and
Independent_Components is as follows:
with:
The following pragmas are defined with the given forms:
(2) Modify 13.6(2):
To convert {an untagged}[a] record from one representation to another, two
record types with a common ancestor type need to be declared[, with no
inherited subprograms]. Distinct representations can then be specified for
the record types, and explicit conversion between the types can be used to
effect a change in representation.
Replace AARM 13.6(2.a):
AARM Ramification: The language does not allow implicit copying of
by-reference types, so it also does not allow different representations
of related by-reference types. Similarly, language rules prevent related
tagged types from having different representations of the parent part.
Therefore, this technique cannot be used for tagged or by-reference types.
(3) Modify N(16):
Elementary type. An elementary type {is a type that} does not have components.
(4) Modify N(22):
Library unit. A library unit is a separately compiled program unit, and is
[always] a package, subprogram, or generic unit.
!discussion
(See !recommendation.)
!corrigendum 13.6(2)
Replace the paragraph:
To convert a record from one representation to another, two record types with
a common ancestor type need to be declared, with no inherited subprograms.
Distinct representations can then be specified for the record types, and
explicit conversion between the types can be used to effect a change in
representation.
by:
To convert an untagged record from one representation to another, two record
types with a common ancestor type need to be declared. Distinct representations
can then be specified for the record types, and explicit conversion between
the types can be used to effect a change in representation.
!corrigendum J.15.8(1/3)
Replace the paragraph:
The form for pragmas Atomic, Volatile, Independent, Atomic_Components,
and Volatile_Components, and Independent_Components is as follows:
by:
The following pragmas are defined with the given forms:
!ASIS
No ASIS effect.
!ACATS test
No ACATS tests should be needed, none of these changes change any semantics.
!appendix
Editor's note, March 2, 2021.
In working on AI12-0417-1, it was noticed that J.15.8(1/3) contained an
extra "and". Moreover, Tucker thought it was grammetrically incorrect.
We used a simplified form in AI12-0417-1, and that form should be used
in J.15.8(1/3) for consistency and to correct the noted issues.
****************************************************************
From an informal RM review from John Barnes (March 8, 2021)
N(16) elementary type not really a definition but simply stating a property.
Better to say An elementary type is a type that does not have components
N(22) library unit “is always” is a bit strange. maybe delete always.
Questions? Ask the ACAA Technical Agent