= 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)]] * April 2013 [[http://dx.doi.org/10.1145/2460236.2460238|ACM SIGPLAN Fortran Forum '''32''' (1), 8 (2013)]] 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 features in the GNU Fortran compiler == ||<#bbddbb>'''Submodules''' ||<#bbddbb>'''Yes''' (since 6.0, 2015-08-05) || ||<#bbddbb>'''Coarrays''' ||<#bbddbb>'''Yes'''<
>since 4.6: single-image support<
>since 5.1: multi-image support using OpenCoarrays (including the F2015 collective subroutines) || ||allocatable or pointer components<
>of derived type coarrays ||<#ffffdd>Partial (since 7.0, 2017-01-07) (derived types used for an alloc./ptr. component in a<
>derived type coarray need to be defined in the same module; [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78983|PR78983]])|| |||| ||<#ffffdd>'''Performance enhancements''' || ||do concurrent ||<#ffffdd>Partial (since 4.7, 2011-09-08) (type-spec support (and concurrency) missing; [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44735|PR44735]])|| ||Contiguous attribute ||<#bbddbb>'''Yes''' (since 4.6, 2010-06-21), note: the `is_contiguous` intrinsic is still missing, [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45424|PR45424]]|| ||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`. || |||| ||<#ffffdd>'''Data enhancements''' || ||Maximum rank ||<#ffaaaa>No, [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36825|PR36825]], cf. [[ArrayDescriptorUpdate|array descriptor update]] || ||Long integers ||<#bbddbb>'''Yes''' || ||Allocatable components of recursive type ||<#bbddbb>'''Yes''' (since 7.0, 2016-10-25) || ||Implied-shape array ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-13) || ||Pointer initialization ||<#bbddbb>'''Yes''' (since 4.6, 2011-02-08) || ||Kind of a forall index ||<#ffaaaa>No, [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78219|PR78219]] || ||Allocating a polymorphic variable ||<#bbddbb>'''Yes''' (partial since 4.6, full since 7.0) || |||| ||<#ffffdd>'''Accessing data objects''' || ||Accessing real and imaginary parts ||<#ffaaaa>No, [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40196|PR40196]] || ||Pointer functions as lvalue||<#bbddbb>'''Yes''' (partial since 4.6, full since 6.0) || |||| ||<#bbddbb>'''Input/Output''' || ||Finding a unit when opening a file ||<#bbddbb>'''Yes''' (since 4.5, 2009-06-08) || ||g0 edit descriptor ||<#bbddbb>'''Yes''' (since 4.4) || ||Unlimited format item ||<#bbddbb>'''Yes''' (since 4.5, 2009-08-17) || ||Recursive input/output ||<#bbddbb>'''Yes''' || |||| ||<#bbddbb>'''Execution control''' || ||The block construct ||<#bbddbb>'''Yes''' (since 4.5, 2009-09-29), but as experimental with some details missing || ||Exit statement ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-03) || ||Stop code ||<#bbddbb>'''Yes''' (since 4.6, 2010-06) || |||| ||<#bbddbb>'''Intrinsic procedures for bit processsing''' || ||Bit sequence comparison ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-08)|| ||Combined shifting ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-08)|| ||Counting bits ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-31; leadz/tailz since GCC 4.4)|| ||Masking bits ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-08)|| ||Shifting bits ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-08)|| ||Merging bits ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-08)|| ||Bit transformational functions ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-06)|| |||| ||<#ffffdd>'''Intrinsic procedures and modules''' || ||Storage size ||<#bbddbb>'''Yes''' (since 4.6, 2010-07-08) || ||Selecting a real kind ||<#bbddbb>'''Yes''' (since 4.6, 2010-06-25) || ||Hyperbolic intrinsic functions ||<#bbddbb>'''Yes''' (since 4.5) || ||Bessel functions ||<#bbddbb>'''Yes''' (since 4.6, 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 4.5, 2009-05-16 including ERFC_SCALED in initialization expressions) || ||Euclidean vector norm ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-27) || ||Parity ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-27) || ||Execute command line ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-01) || ||Location of maximum or minimum value in an array ||<#ffaaaa>No ([[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54613|PR54613]])|| ||Find location in an array ||<#ffaaaa>No ([[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54613|PR54613]])|| ||Constants ||<#bbddbb>'''Yes''' (since 4.7, 2011-06-16) || ||Module procedures ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-27) || |||| ||<#bbddbb>'''Programs and procedures''' || ||Empty contains section ||<#bbddbb>'''Yes''' || ||Internal procedure as an actual argument ||<#bbddbb>'''Yes''' (since 4.6, 2010-09-03) || ||Generic resolution by pointer or allocatable attribute ||<#bbddbb>'''Yes''' (since 4.8, 2012-10-06, [[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45521|PR45521]]) || ||Null pointer as a missing dummy argument ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-15) || ||Elemental procedures that are not pure ||<#bbddbb>'''Yes''' (since 4.6, 2010-08-15) || ||Entry statement becomes obsolescent ||<#bbddbb>'''Yes''' (since 4.6, 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. * 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. * 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. * The real and imaginary parts of a complex entity can be accessed independently with a component-like syntax. * 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 function FINDLOC searches an array for a value. * A BACK= argument has been added to the intrinsic functions MAXLOC and MINLOC. * ALLOCATABLE and POINTER attributes are used in generic resolution. * Procedureness of a dummy argument is used in generic resolution.