= 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.