09-122 To: J3 From: Malcolm Cohen Subject: Spurious defined terms in clause 4. Date: 2009 January 27 1. Introduction --------------- The system for "defining" terms we used in previous versions of the standard is not in accordance with the ISO guidelines, so we need to stop using it. We have already introduced the ISO-compliant defined terms subclause, and moved/copied many definitions into it. However, quite a lot have not been revised. These should either - be turned into normal text ("untermified") or - become proper defined terms. This paper deals with the terms in clause 4. 2. Terms and what to do with them --------------------------------- - unlimited polymorphic: special term; = termify and hyperlink. - integer type: Common Usage; = untermify, index as definition. - representation method: Normal Usage; = untermify, index not as definition. - real type: Common Usage; = untermify, index as definition. - approximation method: Normal Usage; = untermify, do not index. - default real: Misleading Usage; = untermify, reword, index as definition. The problem with the current usage is that it says there is a type called "default real", whereas in fact the type is "real" and it is the *kind* that is "default". This confusing usage has long been complained about - and we already fixed many of them, but not the definition itself. - complex type: Common Usage; = untermify, index as definition. - real part: Normal Usage; = untermify, do not index. - imaginary part: Normal Usage; = untermify, do not index. - default complex: Misleading Usage; = untermify, reword, index as definition. - character type: Common Usage; = untermify, index as definition. - length: Normal Usage; = untermify, do not index. - ASCII character set: Obvious Variation ("ASCII character" + "set"); = untermify, do not index. - ASCII character: Special Term, Widely Used; = termify, index as definition. - ISO 10646 character set: Obvious Variation; = untermify, do not index. - ISO 10646 character; Special Term; = termify. - default character: Misleading Usage; = untermify, reword, index as definition. - character literal constant: Totally Obvious; = untermify, index as definition, reword the definition because it is a lie (does not accurately describe the synatx which in any case appears immediately afterwards). - representable character: Totally Obvious, Duplicates BNF , Virtually Unused; = untermify, do not index. - ASCII collating sequence: Just a Name; = untermify, index as definition. - logical type: Common Usage; = untermify, index as definition. - sequence structure: Special Term; = termify, do not index this definition as it is pointless. - sequence type: Special Term; = termify, index as definition. - numeric sequence type: Not Immediately Obvious; = termify as sub-term of "sequence type", index definition - character sequence type: Not Immediately Obvious; = termify as sub-term of "sequence type", index definition. NOTE: If others think the various sequence types are not significant enough to warrant making into defined terms I would be persuadable. - data-pointer-initialization compatible: Nauseating, Used Twice; = untermify, index as definition. - overrides: Normal Usage; untermify, index as definition at least twice, viz for default initialization, for type-bound procedures, for defined i/o, for type-spec in a FUNCTION statement - on second thoughts, just index them all as uses of "override", they are not definitions just saying when it happens. - type-bound procedure statement: It's just a statement; = untermify, index as statement. - type-bound procedure: Special Term; = termify as sub-term of "procedure", index as definition. NOTE: We have inconsistently used "generic procedure" and "generic interface" to mean the same thing both in the type-bound and non-type-bound cases. For tbps, mostly we've used "generic interface", but for the non-tbp case mostly the other. I've chosen here to make "type-bound procedure" include the generic case (including edits to straighten out the definition): if we decide to go the other way most of these will be wrong, plus we should have edits to straighten out the non-tbp case and the 3 occurrences of "generic type[ -]bound procedure". - GENERIC statement: It's a statement = untermify, treat as statement. - binding: Special Term, Confusing; termify. - binding name: Special Term, Potentially Confusing; termify. - FINAL statement: It's a statement = untermify, treat as statement. - ancestor component: Common-Sense Usage; = untermify, index as definition. - component value: Only Used Once In The Defining Subclause (2 paras); = untermify, do not index. - array constructor: BNF Term Analogue; = untermify, reword, index as definition. - empty sequence: Totally Obvious, Only Used Once; already a defined term = untermify (delete definition), do not index. 3. Other proposed changes ------------------------- Attempts at various miscellaneous editorial cleanups are included. A TECHNICAL CHANGE is proposed (turning a syntactic requirement into a constraint). I have a several edits which replace the use of "binding" with "type-bound procedure". These are optional, but the word binding with its multiple meanings is better avoided when possible, in my opinion. I have left the ones alone which are referring to the syntax that is doing the "binding". 4. Edits to 09-007 ------------------ Note to the editor: Define new LaTeX command \stmtdefn{name} for statement definitions; it should repeat the name, add "statement", and index(d) as "name statement" and "statement!name". Maybe this should also declare a \label so we can reference it directly? [3:11+(1.3.4-)] Define term "\term{ASCII character} character whose representation method corresponds to ISO/IEC 646:1991 (International Reference Version)" [throughout] hyperlink "ASCII character" and index as appropriate. [4:6+(1.3.7+)] Define terms "\term{binding} \termii{type-bound}{procedure} or \termi{final subroutine} \ref{D4:Type-bound procedures} \termi{binding name} name given to a specific or generic type-bound procedure in the type definition \ref{D4:Type-bound procedures}" [11:25+(1.3.75-)] Define term "\term{ISO 10646 character} character whose representation method corresponds to UCS-4 in ISO/IEC 10646" [throughout] hyperlink "ISO 10646 etc" and index as appropriate. [12:38] Append cross-reference "(4.3.1.3)" i.e. \ref{D4:CLASS}. [13:16+(1.3.88+)] Define sub-term "\subterm{type-bound}{procedure} procedure that is bound to a derived type and referenced via an object of that type (4.5.5)" {4.5.5 is \ref{D4:Type-bound procedures}.} [throughout] Hyperlink "type-bound procedure". [14:28-30] Delete term "empty sequence". [14:31-(1.3.101-)] Define term "\term{sequence structure} scalar data object of a sequence type (4.5.2.3)" {That's "\ref{D4:Sequence type}"; "scalar", "data object" and "sequence type" should all be hyperlinks; an alternative position would be as a sub-term of "structure".} [14:31-(1.3.101-)] Define term and sub-terms "\term{sequence type} derived type with the SEQUENCE attribute (4.5.2.3) \subterm{character){sequence type} sequence type with no type parameters, no allocatable or pointer components, and whose components are all default character or of another character sequence type \subterm{numeric}{sequence type} sequence type with no type parameters, no allocatable or pointer components, and whose components are all default complex, default integer, default logical, default real, double precision real, or of another numeric sequence type". {Only the first cross-reference because it does the lot; the ref is "\attrref{SEQUENCE}".} [throughout] hyperlink all occurrences of the various sequence types. [18:26+(1.3.121+)] Define term "\term{unlimited polymorphic} data entity declared with CLASS(*)\kw{*}, able to have any \termii{dynamic}{type} during program execution (4.3.1.3)" {4.3.1.3 is "\ref{D4:CLASS}"}. [throughout] hyperlink all occurrences of "unlimited polymorphic", these are in the intro, c04, c06, c07, c08, c10, c12 and c13. [20:35-21:1(1.4.5p1)] Delete sentence "Boldface ... meaning.". {This is not how we define terms with specialized meanings, nor are we permitted to use that method to define terms.} [50:8(4.3.1.3p3)] Unembolden "unlimited polymorphic", index as definition. [51:13(4.4.2p1)] Unembolden "integer type", index as definition. [51:14(4.4.2p1)] Unembolden "representation methods", index not as defn. [52:3(4.4.3p1)] Unembolden "real type", index as definition. [52:4(4.4.3p1)] Unembolden "approximation methods", do not index. [52:5(4.4.3p1)] Unembolden "representation method", index not as defn. [53:4(4.4.3p5)] Replace "If ... <>." with "If the type keyword REAL is used without a kind type parameter, the real type with \mindexd*{default real} kind is specified and the kind value is KIND(0.0)." NOTE: hyperlink KIND to the intrinsic function, both here and at line 5. {Keywords appear, and specify a type, they are not themselves "specified"; the type is type real, "default real" is not a separate type!; new wording is similar to that of double precision; \mindexd* produces the text and indexes it as a definition.} [53:28(4.4.4p1)] Unembolden "complex type", index as definition. [53:29(4.4.4p1)] Unembolden "real part", index as definition. [54:6-8(4.4.4p3)] Replace "If ... <>." with "If the type keyword COMPLEX is used without a kind type parameter, the complex type with \mindexd*{default complex} kind is specified, the kind value is KIND(0.0), and both parts are default real." {See comment for default real. Use similar wording.} [54:28(4.4.5.1p1)] Unembolden "character type", index as definition. [54:30(4.4.5.1p1)] Unembolden "length", do not index. [54:32(4.4.5.1p2)] Unembolden "representation method", index not as defn. [55:38-56:1(4.4.5.1p3)] Unembolden "ASCII character set", do not index. [56:1(4.4.5.1p3)] Unembolden "ASCII character", index as definition. [56:2(4.4.5.1p3)] Unembolden "ISO 10646 character set", do not index. [56:3(4.4.5.1p3)] Unembolden "ISO 10646 character", index as definition. [55:5-7(4.4.5.2p1-2] Delete p2 (lines 6-7) and append to p1: "If the type keyword CHARACTER is used without a kind type parameter, the character type with \mindexd*{default character} kind is specified and the kind value is KIND('A')." {See comment for default real. All in one para because we do it like that for the other types.} [56:19-20(4.4.5.3p1)] Replace paragraph with "The syntax of a \mindexd*{character literal constant} is given by R423." {That's "\snref{char-literal-constant}"; if we'd called the syntax term "character-literal-constant" we could have deleted this paragraph.} [56:26-27] Unembolden "representable character", do not index. [57:19(4.4.5.4p4)] Unembolden "ASCII collating sequence", index as defn. [58:5(4.4.6p1)] Unembolden "logical type", index as definition. [58:6(4.4.6p2)] Unembolden "representation methods", index not as defn. [59:2(4.4.6p7)] Unembolden, turn into hyperlink, do not index at all. [59:21(4.5.2.1 C429)] After "deferred", change "binding" to "type-bound procedure". {"binding"="type-bound procedure or final subroutine"; the latter cannot be deferred.} [60:13(4.5.2.2p7)] Change "bindings" to "type-bound procedures". {"bindings"=="type-bound procedures and final subroutines"; but the latter do not *have* accessibility, they just "are".} [60:20(4.5.2.3p1)] Unembolden "sequence type", index as definition. [60:22(4.5.2.3p1)] Unembolden "numeric sequence type", index as defn. [60:24(4.5.2.3p1)] Unembolden "character sequence type", index as defn. [67:18(4.5.4.6p2)] Unembolden "data-pointer-initialization compatible", index as definition. [68:22(4.5.4.6p6)] Unembolden "overrides", index "override" not as defn. TECHNICAL CHANGE: [72:14+(4.5.4 C477+)] Insert new constraint "C477a (R450) DEFERRED shall appear only in the definition of an abstract type." {I don't know why we didn't make this one a constraint, it's much more trivial than C478 immediately following.} [72:19(4.5.5p2)] Unembolden "type-bound procedure statement", index as the definition of a statement. [72:19(4.5.5p2)] Unembolden "type-bound procedure", index as defn. [72:20-21(4.5.5p2)] Replace "A binding ... abstract type." with "A type-bound procedure with the DEFERRED attribute is a deferred type-bound procedure." {"binding that specifies the DEFERRED attribute" is mixing syntax with semantics. The second sentence was constraintified above; if that is rejected, retain the second sentence with "A deferred binding"-> "The DEFERRED keyword".} [72:22(4.5.5p3)] Unembolden "GENERIC statement", index as stmt defn. [72:23(4.5.5p4)] Unembolden "binding", index as definition, hyperlink. [72:22] Before "type-bound generic interface", Insert "generic type-bound procedure, which is a". [72:23] "specific type-bound procedure, a generic type-bound interface" ->"type-bound procedure (specific or generic)". [72:25(4.5.5p5)] Unembolden "binding name", index as definition, hyperlink. [72:29(4.5.5p6)] "specific binding"->"specific type-bound procedure". [73:3(4.5.5p8)] "procedure bindings"->"type-bound procedures". [73:4(4.5.5p8)] "procedure binding"->"type-bound procedure". [73:18(4.5.6.1p1)] Unembolden "FINAL statement", index as stmt defn. [75:11+2,+4,+5(4.5.7.1 Note 4.52)] "A deferred binding" -> "The DEFERRED attribute", "a deferred binding" -> "a deferred type-bound procedure", "bindings" -> "type-bound procedures". [76:4(4.5.7.2p2)] Unembolden "ancestor component", index as definition. [75:14(4.5.7.2p1)] "nonfinal procedure bindings" ->"type-bound procedures". [76:8(4.5.7.3p1)] Unembolden "overrides", index "override" not as defn. OPTIONAL: [76:7-8] "nongeneric binding"->"specific type-bound procedure", "a binding"->"a type-bound procedure". [76:9] "overriding binding and the overridden binding" ->"overriding and overridden type-bound procedures". [76:11,18] "binding is"->"type-bound procedure is", "binding shall"->"one shall" (both changes in both places). [77:6(4.5.8p1)] Unembolden "component value", do not index. [82:32-33(4.8p1)] Replace "An ... sequence." with "An \mindexd*{array constructor} constructs a rank-one array value from a sequence of scalar values, array values, and implied DO loops." {I think the existing text is confusing, and offer this as a simpler piece of waffle.} [85:17(5.2.1p1)] Index "override" not as definition. [86:2(5.2.1p2)] Index "override" not as definition. [86:26(5.2.1 C511)] After "compatible" insert "(4.5.4.6)" which is "\ref{D4:Default initialization for components}". {Why anyone thinks this is a good definition or that it belongs in that subclause, I don't know.} [104:28(5.4.7p9)] After "compatible" insert "(4.5.4.6)". [108:12(5.5p4)] Index "override" not as definition. [110:30(5.7.1.1 C587)] After "shall be of these types" insert "and kinds". [111:5+12(5.7.1.1,antepenultimate para in Note 5.40)] Change "an object of default character type" to "a default character object". [148:1-1(7.1.5.5.1, last line of Note 7.26)] After "nondefault character" change "types" to "kinds". [155:18+(7.2.1.2p1)] Immediately before item (7) insert new item "(6a) if the variable is of type character and of ISO 10646, ASCII, or default character kind, \si{expr} shall be of ISO 10646, ASCII, of default character kind, (6b) otherwise if the variable is of type character \si{expr} shall have the same kind type parameter," {Previous specification faulty: item (6) only requires type conformance with Table 7.10, not kind conformance. We should specify the kind requirements explicitly like we do for derived types in item (7).} [156:1-3,1-4(7.2.1.2, Table 7.10)] Replace the two character lines in the table with a single entry "character character". {Previous specification faulty: we only required type conformance with this table, not kind conformance.} [158:10+2(7.2.1.3 Note 7.40)] After "nondefault character", change "types" to "kinds". [225:23(9.6.4.7.1p1)] Index "override" not as definition. [253:10(10.7.2.1p1 item 2)] Index "override" not as definition. [259:15+2(10.7.4 Note 10.17)] After "nondefault character", change "types" to "kinds". [329:6+1(13.6, nameless/numberless table heading)] After "Argument Type" insert "and Kind". [331:29(13.7.3p4)] After "default character" delete "type". [342:31(13.7.35p4)] After "default character" delete "type". [343:11(13.7.36p5)] After "default real" change "type" to "kind". [379:10(13.7.121p5)] Before "default character" delete "of type", and after it delete "type". [386:29,35(13.7.138p4 cases (i) and (iii))] After "default real" change "type" to "kind", twice. [389:30(13.7.145p5)] Before "default character" delete "the", after it delete "type". {But why don't we just say "equal to KIND('A')"?} [423:26(14.11.24p6)] After "default real" change "type" to "kind". [459:3(16.5.3.4p10)] Index "override" not as definition. ===END===