= Chart of Fortran 2008 Features supported by GNU Fortran = * See also '''[[Fortran2003Status|Fortran 2003 implementation status]]''' * See also '''[[TS29113Status|TS 29113: Technical Specification on Further Interoperability with C]]''' When the question which Fortran 2003 features are implemented in which compiler, came up in [[http://groups.google.com/group/comp.lang.fortran/topics|comp.lang.fortran]], the idea was born to create a chart of the features supported by the different compilers. The result was a list in Fortran Forum (see Fortran2003Status). With Fortran 2008 on the horizon, the list is being updated for Fortran 2008. The listed items follow the sections in the following writeup: * [[ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1828.pdf|The new features of Fortran 2008]] by John Reid * cf. also [[ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1824.pdf|Coarrays in the next Fortran Standard]] by John Reid The Fortran Forum articles: * Version of August 2009: [[http://doi.acm.org/10.1145/1570522.1570525|ACM SIGPLAN Fortran Forum '''28'''(2), 15 (2009)]] * Version of December 2009: [[http://doi.acm.org/10.1145/1667140.1667145|ACM SIGPLAN Fortran Forum '''28'''(3), 32 (2009)]] * Version of April 2010: [[http://doi.acm.org/10.1145/1753166.1753169|ACM SIGPLAN Fortran Forum '''29'''(1), 29 (2010)]] * August 2010: [[http://doi.acm.org/10.1145/1837137.1837139|ACM SIGPLAN Fortran Forum '''29'''(2), 28 (2010)]] * November 2010: [[http://dx.doi.org/10.1145/1883575.1883578|ACM SIGPLAN Fortran Forum '''29'''(3), 26 (2010)]] * April 2011: [[http://dx.doi.org/10.1145/1961363.1961365|ACM SIGPLAN Fortran Forum '''30'''(1), 16 (2011)]] * August 2011: [[http://dx.doi.org/10.1145/2007333.2007335|ACM SIGPLAN Fortran Forum '''30'''(2), 18 (2011)]] * December 2011: [[http://dx.doi.org/10.1145/2073761.2073762|ACM SIGPLAN Fortran Forum '''30''' (2), 20 (2011)]] * April 2012: [[http://dx.doi.org/10.1145/2179280.2179282|ACM SIGPLAN Fortran Forum '''31''' (1), 23 (2012)]] * August 2012: [[http://dx.doi.org/10.1145/2338786.2338789|ACM SIGPLAN Fortran Forum '''31''' (2), 28 (2012)]] * December 2012 [[http://dx.doi.org/10.1145/2408747.2408749|ACM SIGPLAN Fortran Forum '''31''' (3), 17 (2012)]] A freely available version of the article can be found at: * http://fortranwiki.org/fortran/show/Fortran+2008+status * http://www.fortranplus.co.uk/resources/fortran_2003_2008_compiler_support.pdf (Fortran Forum PDF, always delayed by a few months) == Implemented 2008 feature in GNU Fortran compiler == ||Submodules ||<#ffaaaa>No, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52846|PR52846]] || ||Coarrays ||<#ffffdd>[[Coarray|Partial]] (4.6, April 2010: incomplete, for one image only) || ||'''Performance enhancements''' || ||do concurrent ||<#ffffdd>Partial (2011-09-08) (type-spec support (and concurrency) missing; [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44735|PR44735]])|| ||Contiguous attribute ||<#bbddbb>'''Yes''' (2010-06-21) || ||Simply contiguous arrays ||<#bbddbb>'''Yes''' (rather a new concept/definition than a new feature thus 'yes'. gfortran uses since many versions similar checks to avoid copy-in/out; it is also used internally for constraint checking such as for `CONTIGUOUS`; note: the `is_contiguous` intrinsic is still missing) || ||'''Data enhancements''' || ||Maximum rank ||<#ffaaaa>No, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36825|PR36825]], cf. [[ArrayDescriptorUpdate|array descriptor update]] || ||Long integers ||<#bbddbb>'''Yes''' || ||Allocatable components ||<#ffaaaa>No, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45516|PR45516]] || ||Implied-shape array ||<#bbddbb>'''Yes''' (2010-08-13) || ||Pointer initialization ||<#bbddbb>'''Yes''' (since 4.6, 2011-02-08, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45290|PR45290]]) || ||Kind of a forall index ||<#ffaaaa>No (cf. [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44735|PR44735]])|| ||Allocating a polymorphic variable ||<#ffffdd>Partial (2010-06-15), [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43366|PR43366]] || ||'''Accessing data objects''' || ||Accessing real and imaginary parts ||<#ffaaaa>No || ||Pointer functions as lvalue||<#ffffdd>Partial (2010-10-21), [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40054|PR40054]] || ||'''Input/Output''' || ||Finding a unit when opening a file ||<#bbddbb>'''Yes''' (2009-06-08) || ||g0 edit descriptor ||<#bbddbb>'''Yes''' || ||Unlimited format item ||<#bbddbb>'''Yes''' (2009-08-17) || ||Recursive input/output ||<#bbddbb>'''Yes''' || ||'''Execution control''' || ||The block construct ||<#bbddbb>'''Yes''' (2009-09-29), but as experimental with some details missing || ||Exit statement ||<#bbddbb>'''Yes''' (2010-09-03) || ||Stop code ||<#bbddbb>'''Yes''' (2010-06) || ||'''Intrinsic procedures for bit processsing''' || ||Bit sequence comparison ||<#bbddbb>'''Yes''' (since 2010-09-08)|| ||Combined shifting ||<#bbddbb>'''Yes''' (since 2010-09-08)|| ||Counting bits ||<#bbddbb>'''Yes''' (since 2010-08-31; leadz/tailz since GCC 4.4)|| ||Masking bits ||<#bbddbb>'''Yes''' (since 2010-09-08)|| ||Shifting bits ||<#bbddbb>'''Yes''' (since 2010-09-08)|| ||Merging bits ||<#bbddbb>'''Yes''' (since 2010-09-08)|| ||Bit transformational functions ||<#bbddbb>'''Yes''' (since 2010-09-06)|| ||'''Intrinsic procedures and modules''' || ||Storage size ||<#bbddbb>'''Yes''' (since 2010-07-08) || ||Selecting a real kind ||<#ffffdd>Partial (2010-05-25, not `idee_selected_real_kind`) || ||Hyperbolic intrinsic functions ||<#bbddbb>'''Yes''' (since 4.5) || ||Bessel functions ||<#bbddbb>'''Yes''' (since 2010-08-21, the elemental functions since GCC 4.4) || ||Arc tangent function ||<#bbddbb>'''Yes''' (since 4.5) || ||Error and gamma functions ||<#bbddbb>'''Yes''' (since 2009-05-16 including ERFC_SCALED in initialization expressions) || ||Euclidean vector norm ||<#bbddbb>'''Yes''' (since 2010-08-27) || ||Parity ||<#bbddbb>'''Yes''' (since 2010-08-27) || ||Execute command line ||<#bbddbb>'''Yes''' (since 2010-09-01) || ||Location of maximum or minimum value in an array ||<#ffaaaa>No || ||Find location in an array ||<#ffaaaa>No || ||Constants ||<#bbddbb>'''Yes''' (since 2011-06-16) || ||Module procedures ||<#bbddbb>'''Yes''' (since 2010-09-27) || ||'''Programs and procedures''' || ||Empty contains section ||<#bbddbb>'''Yes''' || ||Internal procedure as an actual argument ||<#bbddbb>'''Yes''' (2010-09-03) || ||Generic resolution by pointer or allocatable attribute ||<#bbddbb>'''Yes''' (since 4.8, 2012-10-06, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45521|PR45521]]) || ||Null pointer as a missing dummy argument ||<#bbddbb>'''Yes''' (since 2010-08-15) || ||Elemental procedures that are not pure ||<#bbddbb>'''Yes''' (since 2010-08-15) || ||Entry statement becomes obsolescent ||<#bbddbb>'''Yes''' (since 2010-06-25) || == Unimplemented features -- based on the list in the "Introduction" of the F2008 standard == There is a large overlap with the '''No''' items in the table above. * Module enhancements: Submodules provide additional structuring facilities for modules. * Parallel execution: Coarrays * The DO CONCURRENT construct provides a means for the program to specify that individual loop iterations have no interdependencies. * The maximum rank has been increased to 15. * An allocatable component can be of recursive type. * Subscripts and nested implied-do limits inside a data-implied-do can be any constant expression instead of being limited to combinations of constants, implied-do variables, and intrinsic operations. * A FORALL index variable can have its type and kind explicitly declared within the construct. * 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. * The real and imaginary parts of a complex entity can be accessed independently with a component-like syntax. * Intrinsic assignment to an allocatable polymorphic variable is allowed. * A pointer function reference can denote a variable in any variable definition context. * Some restrictions on the use of dummy arguments in elemental subprograms have been removed. * The new intrinsic subroutines ATOMIC_DEFINE and ATOMIC_REF define and reference a variable atomically. * The new intrinsic function FINDLOC searches an array for a value. * The intrinsic functions LGE, LGT, LLE, and LLT can have arguments of ASCII kind. * A BACK= argument has been added to the intrinsic functions MAXLOC and MINLOC. * A RADIX= argument has been added to the function IEEE_SELECTED_REAL_KIND in the intrinsic module IEEE_ARITHMETIC. * ALLOCATABLE and POINTER attributes are used in generic resolution. * Procedureness of a dummy argument is used in generic resolution.