To: J3 From: Malcolm Cohen Subject: Feature list Date: 2009 July 27 1. Introduction --------------- There are several new features missing from the feature list. Some of the new features on the list are suboptimally described. 2. Discussion ------------- This all started when I found three missing new features, but by the time I got around to writing them down I had forgotten two of them. So I started to trawl through my pile of old J3 papers looking for new features not on the list. I managed to find only one of the two I had forgotten. However, I found lots more that were missing. I am still quite convinced that the list is not complete - that there is at least one more still missing. Some of the ones found are quite trivial, but those are precisely the ones that would be overlooked by an implementor upgrading an F2003 compiler to F2008. 3. Further work --------------- Is the item "There are many more intrinsic functions" not way too vague. If that is acceptable, let's replace the rest of the item by "Some of the existing intrinsic procedures have new forms or optional arguments." (All the rest of that item being currently spelt out in tedious detail.) 4. Edits to 09-007r2 -------------------- [xiii,p2,item "Module enhancements:"] Append new sentence "Data objects and procedure pointers declared in a module implicitly have the SAVE attribute." {MISSING FEATURE 4.} [xiii,p2,item "Performance enhancements:"] Replace entire item after the subtitle with "The DO CONCURRENT construct provides a processor with greater freedom in scheduling loop iterations than other DO constructs. The CONTIGUOUS attribute provides a processor with more optimization opportunities for pointers and assumed-shape dummy arguments." {None of the "permits" things are accurate - these are not giving permission to do anything describable in the standard, and you cannot give permission in the Introduction anyway.} ALTERNATIVE: "The DO CONCURRENT construct provides a means for the program to specify that individual loop iterations have no inter-dependencies. The CONTIGUOUS attribute provides a means for the program to specify restrictions on the layout of pointer targets and assumed-shape dummy arguments." {This version is better in that it says what they do, rather than opine hopefully about the net effect. But it is a more radical wording change.} [xiii,p2,item "Data declaration:"] Insert new penultimate sentence to item "Subscripts and nested implied-do limits inside a can be any constant expression instead of being limited to combinations of constants, implied-do variables, and intrinsic operations." {MISSING FEATURE 2.} [same item] "Allocatable components" -> "An allocatable component"; "FORALL index variables can have their" -> "A FORALL index variable can have its". {We are supposed to use the singular, not the plural.} [same item] In the last sentence, insert at the end "within the construct". {Extra explanation: they were already allowed to be explicitly declared outside the construct, it's just that that had undesirable effects.} [same item] "inferred from" -> "implied by". {Since these are "implied-shape", we should use the same terminlogy.} [same item] Append "The TYPE keyword can be used to declare entities of intrinsic type." {MISSING FEATURE 10.} [xiii,p2,item "Data usage and computation:"] After the title insert new sentences "A structure constructor can omit the value for an allocatable component. SOURCE= in an ALLOCATE statement can give an array variable the bounds as well as the value of an expression." {MISSING FEATURES 1 AND 2.} [same item] "shape and type" -> "shape, type, and type parameters". {Only applies to deferred type parameters, but it does apply.} [same item] "another variable" -> "an expression". {MOLD= does not require a variable.} [same item] "Pointer functions" -> "A pointer function reference"; {We are supposed to use the singular, not the plural, and it is the function reference that denotes a variable, not the function itself.} [xiii,p2,item "Input/output:"] After "writing", "records" -> "output". {I don't see any reason this is limited to record files, and also these facilities can be used within a record with nonadvancing output to write parts of records in csv format even when the whole record is not.} [same item] Before "transfers" insert "data". {Makes it marginally easier to read - and we call them data transfers everywhere else so should do so here.} [xiii,p2,item "Execution control:"] "contains declarations" -> "can contain declarations". {It is not required to, the important thing is the capability.} [same item] After "has been changed" insert "to accept a constant expression instead of merely a literal constant, and" {MISSING ITEM 13.} [xiii,p2,item "Intrinsic procedures:"] "hyperbolic trigonometric intrinsic functions" -> "intrinsic functions ACOS, ASIN, ATAN, COSH, SINH, TAN, and TANH". {MISSSING FEATURE 12; the list was incomplete, unless you think ACOS is hyperbolic.} [same item] Append "The intrinsic functions LGE, LGT, LLE, and LLT can have arguments of ASCII kind." {MISSING FEATURE 9.} [xiv,p2,item "Programs and procedures:"] "Internal procedures" -> "An internal procedure"; "actual arguments" -> "an actual argument"; "Impure elemental procedures process arrays" -> "An impure elemental procedure processes array arguments"; {We are supposed to use the singular, not the plural; and it is only array arguments that are processed in array element order, not local arrays used internally to the procedure.} [same item] After (new text from above) "an actual argument" insert " or procedure pointer target". {MISSING FEATURE 11.} [same item] After "in generic resolution." insert new sentence "Procedureness of a dummy argument is used in generic resolution." {MISSING FEATURE 5.} [same item] Before "A null pointer" insert new sentence "An actual argument with the TARGET attribute can correspond to a dummy pointer." {MISSING FEATURE 6.} [same item] Append "The SUBROUTINE and FUNCTION keywords can be omitted from the END statement for a module or internal subprogram." {MISSING FEATURE 7.} [same item] Append "A line in the program is permitted to begin with a semi-colon." {MISSING FEATURE 8. This one is totally trivial, but no-one is going to implement it unless they know about it!} [xiv,p3-] Insert new paragraph "Additionally, the ENTRY feature present in Fortran 77 onwards is now deemed to be obsolescent by this part of ISO/IEC 1539." {Making ENTRY obsolescent is hardly an extension to F2003, but it is a change so we ought to mention it here.} ===END===