J3/16-257r1 To: J3 From: Van Snyder & Malcolm Cohen Subject: Comments on Clause 7 Date: 2016 October 10 1. Edits accepted as modified [60:22-23] CLASS type specifier, "An unlimited polymorphic entity" -> "It", "type. It" -> ", and", making that whole paragraph read "An entity declared with the CLASS(*) specifier is an unlimited polymorphic entity. It is not declared to have a type, and is not considered to have the same declared type as any other entity, including another unlimited polymorphic entity." {Simplify and prepare for duplication.} [60:3] 7.3.2.2 TYPE type specifier, p3, After "is an unlimited polymorphic entity." Insert a copy of the last sentence above "It is not ... entity.". {No-one looking at TYPE(*) is going to think to look in CLASS for the semantics, so duplicate the ones that apply.} [62:15+9] 7.4.3.1 Integer type, NOTE 7.5, At the end of the note, append "A program that uses a numeric is unlikely to be portable." {Compare to NOTE 5.5, which probably describes a less-frequent case.} [69:9] 7.5.1 Derived type concepts, p7, Replace "storage order" -> "storage sequence". {Use the correct term.} [69:13+1-2] 7.5.1 Derived type concepts, NOTE 7.14, "name, age" -> "oldest_child%name, oldest_child%age,", twice. {Otherwise ambiguous as to which "name" and "age" is being referred to.} [73:20+6] 7.5.3.1 Type parameter definition statement, NOTE 7.22, "Specify a nondefault" -> "Specify a potentially nondefault". {The specification is not necessarily nondefault.} [75:21-24] 7.5.4.1 Component definition statement, R742, Alphabetize right-hand sides {More readable.} [77:2] 7.5.4.4 Pointer components, p1, "POINTER attribute" -> "POINTER keyword". {Technically "keyword" is more correct because this is talking about the concrete syntax not the semantics.} [77:6] 7.5.4.5 The passed-object dummy argument, p1, After "type-bound procedure" insert "(7.5.5)" \ref{D7:Type-bound procedures}. {Reference useful for paper readers.} [82:16-20] 7.5.5 Type-bound procedures, R752 binding-attr, Alphabetize right-hand sides. {Improve readability.} [86:5+6] 7.5.7.2 Inheritance, NOTE 7.53, "A derived type" -> "An extensible derived type", making the whole note read: "An extensible derived type is not required to have any components, bindings, or parameters; an extended type is not required to have more components, bindings, or parameters than its parent type." {Because BIND(C) types are required to have a component, this was technically incorrect before.} [86:13+2] 7.5.7.2 Inheritance, NOTE 7.54, "shall not" -> "can not". {Replace improper specification of requirements with a statement of incapability.} 2. Rejected edits [59:32-33 7.3.2.2p2] Replace "previously-defined derived type" with "derived type that is previously defined or accessed by use or host association." {"use or" could be left out because Clause 14 says that, but Clause 19 doesn't say that host association implies previous definition or declaration.} REJECTED: Host association is necessarily "previously defined". [60:25-26 7.3.2.3p2] Replace "previously-defined derived type" with "derived type that is previously defined or accessed by use or host association." {"use or" could be left out because Clause 14 says that, but Clause 19 doesn't say that host association implies previous definition or declaration.} REJECTED: Host association is necessarily "previously defined". [63:6 7.4.3.2p5] After "DOUBLE PRECISION" insert "or DOUBLEPRECISION". REJECTED: The number of insignificant blanks allowed in a DOUBLE PRECISION keyword is not germane. [66:6 C722] After "statement" insert "in a SELECT TYPE construct". REJECTED: These statements can only appear in SELECT TYPE already. [66:10 C724] Replace with two constraints because C724 conflates function characteristics and function result characteristics: "C724 \obs{A function name declared with an asterisk shall not be elemental or pure.} "C724a \obs{The result of a function name declared with an asterisk shall not be an array or a pointer.} REJECTED: This is not a significant enough improvement to be worth wordsmithing an obsolescent feature that has not changed. [66:11 C725] Append ", and only if a double-colon separator appears in the ." [66:12-13 C726] Delete C726 because of the previous edit. REJECTED: Correct as is, this is not a significant improvement. [71:11+13-15 NOTE 7.18] Replace "will necessarily be" with "is necessarily". Replace "will define" with "defines". Replace "will always be" with "is always". {The remaider of the note is in present tense.} REJECTED: Use of conditional tense is correct. [73:20+4 NOTE 7.22] After "kind(0.0)" append "! default kind". REJECTED: This is not informative. [75:14 C754] Style is inconsistent with other nearby constraints. Replace with "C754 (R739) If the component is not of type character, * shall not appear." REJECTED: This is not a significant improvement. [77:3+9-13 NOTE 7.30] Replace "will have" with "has". Delete "to an" {pointer arrays don't point to arrays}. Replace "will be ... allocated" with "is determined when the component is allocated". Replace "could be associated" with "is associated". The revised sentence reads "The size of this target array is determined with the component is allocated (9.7.1) or the pointer component is associated with a target...." REJECTED: Grammar is correct as is. [77:20 7.5.4.6p1] Before "initialized" insert "default". REJECTED: It is initialized even when no default initialization occurs. [84:10+5-6 NOTE 7.46] Delete the sentence beginning "The final subroutines..." because it's redundant to 7.5.6.2p1(3), only two inches lower. REJECTED: This note is useful to the average reader. [84:29 7.5.6.3p1] After "allocatable variable" insert ", or has an allocated allocatable component,". REJECTED: This TECHNICAL CHANGE will be processed by a separate paper. [87:2 7.5.7.3p1] After "accessible" insert "specific". REJECTED: Unnecessary, as this is already required to be specific. [88:29+ C797+] Replace 7.5.10p4 with a more accurate constraint: "C797a (R736) The type specified by shall have been defined previously in the same scoping unit or accessed by use or host association." [89:19 7.5.10p4] Delete the paragraph because of the previous edit. REJECTED: Not a significant improvement. [91:18+3,5 NOTE 7.62] Replace "will use" with "uses". Replace "will be" with "are". REJECTED: Grammar is correct. [93:26 C7111-] Insert a constraint: "C7110a (R770) The shall not specify an abstract type." REJECTED: Duplicates constraint C703. [94:13+ 7.8p8+] Insert a note: "NOTE 7.66a The requirement that an be compatible with intrinsic assignment to a variable of the type specified by implies that if an is polymorphic, only its declared-type part is used." REJECTED: This is not surprising. 3. Question without edits ------------------------- [60:11 C711] Is there a problem with allowing explicit shape? RESPONSE: Yes, as explicit shape things of assumed type do not exist. [69:28 C730] In light of 7.4.3.2p5, which says DOUBLE PRECISION specifies real type, and Table 6.2, is "DOUBLEPRECISION or" necessary in C730? RESPONSE: No. [71:19-20 7.5.2.4p2] Is the sentence about private components redundant? RESPONSE: Probably not, but in any case not harmful. [87:15-16 7.5.7.3p3] How can a binding of an extension be the same binding as a binding of the parent? Isn't a binding to the parent always either inherited or overridden? RESPONSE: An inherited constraint is "the same". The third and final condition in this sentence is completing the recursion, not conflicting with the first condition. [93:36 C7115] Isn't it impossible for an to be of abstract type? if so, delete C7115. RESPONSE: It is impossible only because of C7115,so no. 4. Remarks ---------- The comma after * in a at [65:33] could (should) be deleted in the next revision. RESPONSE: Further obsolescent feature deletion will be a topic of consideration in the next revision, but not now. ===END===