To: WG5 From: J3 Subject: US Feature list proposals for F202X at the end of M218 Date: 14-March-2019 This paper summarizes the US National Body list of requested features for the next revision of the Fortran standard, aka F202X. Many of these proposals have J3 papers with detailed requirements, descriptions and/or edits. No priority order is implied. I. Source Form changes. US01. Allow much longer statement lines and overall statement length. (m218: 19-138r1, 11-1) US02. Require the processor to report cases where over-long lines or statements result in lost information. (m218: 19-149r1, uc) II. Intrinsic Library Routines and Modules. US03. New ISO_FORTRAN_STRINGS intrinsic module containing procedures 1. EXTRACT() Extract a substring of a string. 2. INSERT() Insert a string into a string at a location. 3. REMOVE() Remove a substring from a string. 4. REPLACE() Replace characters by a substring. 5. SPLIT() Split a string into two strings where a character from a set is found. The intent is that these replace functionality lost when Part 2 of the old Fortran standard was deleted. (m218: 19-160, uc) US04. Trig functions with arguments in degrees and arc versions with results in degrees. (m218: 19-145r3, uc) US05. Trig functions with arguments implicitly scaled by PI. (m218: 19-157r2, uc) US06. SELECTED_LOGICAL_KIND to return a KIND of logical based on its minimum storage size. (m218: 19-147r1, uc) US07. Additional named constants, LOGICAL8, LOGICAL16, LOGICAL32, LOGICAL64, in ISO_FORTRAN_ENV to specify KINDS supported for type LOGICAL. (m218: 19-139r1, uc) US08. Additional named constant, REAL16, in ISO_FORTRAN_ENV to specify whether the processor supports a 16-bit REAL KIND. (m218: 19-139r1, uc) US09. CSTRING and FSTRING for converting between Fortran and C strings. (m217: 18-258r2, uc) III. I/O formatting capabilities. US10. AT format editing specifier. Has the effect of TRIM on the corresponding character list item before output. (m218: 19-137, uc) US11. Control over leading zeros in output of REAL values. (m218:19-156r1, uc) IV. Coarray / parallel processing. US12. Allow an array of a type that has an allocatable coarray component. (m217: 18-280r1, uc) US13. Syntax and semantics for a "Put with Notify" operation. (m217: 18-277r1, uc) V. Misc smallish features. US14. Allow deferred-length character variables in more locations, including as actual arguments corresponding to IOMSG and ERRMSG arguments for similar variables in specifiers. Also allow for internal I/O. (m217: 18-279r1, uc) US15. VIRTUOUS procedures. A form of Super-Pure that disallows references to global data. (m217: 18-273r1, uc) VI. Declaration and Syntax aids for Generic Programming US16. TYPEOF and CLASSOF type declarations to indicate the object being declared has the same type/class as another object. Useful to ensure a local variable in a procedure has the same type as a dummy argument, or that two dummy arguments have the same type. (m218: 19-142r1, uc) US17. Syntax to specify an element or section of an array with arbitrary rank. (m218, 19-150, uc) US18. Syntax for generic specification of rank and bounds of an object. (m218: 19-152r1, uc) VII. Incomplete or Undecided Features. US19. Protected Components: 1. Choice of protected components over protected types (m218: 19-135r1, uc) 2. Technical issues to be resolved for protected components (m218: 19-161) US20. Reduction specifier for DO CONCURRENT (m218: 19-158). Generally supported, but details of the specification and syntax need more work. US21. Typed enums. M217 paper 18-256r1 contains extensive discussion of this feature along with a list of still-open questions. US22. Conditional expressions. Permits conditional evaluation of parts of the logical expression in an IF statement. M217 paper 18-274 contains extensive discussion and alternatives for syntax and semantics. Generally supported, but needs more work. US23. BITS data type. M218 paper 19-132 observed inconsistent extensions by compilers in the allowed use of boz constants. It was suggested that a more general solution involving BITS type and specific conversion rules would clarify the issue. (m218: 19-146r1, uc). Additionally, the BITS feature provides an alternative to the use of unsigned integers for bit-manipulation use cases. The BITS type has been previously specified for Fortran 2008. (m218: 19-159, info only.) US24. Generics / templates / macros / containers for generic programming. (m217: 18-281r1, uc (templates)), and (m218: 19-154 (macros)). US25: Exceptions. Discussions continue on the J3 email list. (m218: 19-133r2) US26: Short-circuit logical operators (.ANDTHEN. and .ORELSE.) An outline of the proposal is in 18-152 and a straw vote at m215 (Berkeley) was 8-0-2 to continue work on. US27: Syntax to specify that the target of a dummy argument pointer is not to be changed (INTENT applies to the pointer, not its target) 18-144r1 Straw vote 7-0-3 US28: Binary compatibility of C descriptors. No paper. Not clear if there is a solution that doesn't break existing code. The goal is to allow creation of a C library that isn't dependent on a single Fortran implementation's descriptor layout. That CFI_ routines are possibly macros with processor-specific external names may be a showstopper. ==END==