= Chart of Fortran 2003 Features supported by GNU Fortran = * See also '''[[Fortran2008Status|Fortran 2008 implementation status]]''' * See also '''[[TS29113Status|TS 29113: Technical Specification on Further Interoperability with C]]''' When the question which Fortran 2003 feature 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 question was sent to the [[http://www.j3-fortran.org/|j3-Fortran]] list and the result was the series of Fortran Forum articles, listed below. The listed items follow the sections in the following writeup: * [[http://doi.acm.org/10.1145/1243413.1243415|John Reid, ''The new features of Fortran 2003'', ACM SIGPLAN Fortran Forum '''96''', 10 (2007)]], which is also [[ftp://ftp.nag.co.uk/sc22wg5/N1601-N1650/N1648.pdf|available]] from the [[http://www.nag.co.uk/sc22wg5/|Fortran Standards homepage]] The Fortran Forum articles: * [[http://doi.acm.org/10.1145/1243413.1243414|Ian D. Chivers and Jane Sleightholme, ''Compiler support for the Fortran 2003 standard'', ACM SIGPLAN Fortran Forum '''26''', 1 (2007)]]. * Update: [[http://portalparts.acm.org/1280000/1279941/fm/frontmatter.pdf|ACM SIGPLAN Fortran Forum '''26''', 2 (2007)]] (part of the Frontmatter; contains the status of more compilers) * Update: [[http://doi.acm.org/10.1145/1330585.1330587|ACM SIGPLAN Fortran Forum '''26''', 3 (2007)]]. * April 2009: [[http://doi.acm.org/10.1145/1520752.1520755|ACM SIGPLAN Fortran Forum '''28'''(1), 26 (2009)]] * August 2009: [[http://doi.acm.org/10.1145/1570522.1570525|ACM SIGPLAN Fortran Forum '''28'''(2), 15 (2009)]] * December 2009: [[http://doi.acm.org/10.1145/1667140.1667145|ACM SIGPLAN Fortran Forum '''28'''(3), 32 (2009)]] * 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+2003+status * http://www.fortranplus.co.uk/resources/fortran_2003_2008_compiler_support.pdf (Fortran Forum PDF, always delayed by a few months) == Implemented 2003 feature in GNU Fortran compiler == For other compilers see the Fortran Forum paper cited above. (These are not the only new features of Fortran 2003 though.) See also: [[Fortran2003|Fortran 2003 Features in the GNU Fortran]] ||ISO TR 15580 IEEE Arithmetic ||No || ||ISO TR 15581 Allocatable Enhancements ||'''Yes''' || ||'''Data enhancements and object orientation''' || ||Parameterized derived types ||No ([[GFortranPatchTracker|being developed for KIND only]]) || ||Procedure pointers ||'''[[ProcedurePointers|Yes]]''' (partial since 4.4, components since 4.5) || ||Finalization ||No ([[https://userpage.physik.fu-berlin.de/~tburnus/final/|being developed]]) || ||Procedures bound by name to a type ||'''Yes''' (2008-08-31)|| ||The PASS attribute ||'''Yes''' (2009-07-25) || ||Procedures bound to a type as operators ||'''Yes''' (2009-08-27) || ||Type extension ||'''Yes''' (2008-07-29)|| ||Overriding a type-bound procedure ||'''Yes''' (2008-08-28) || ||Enumerations ||'''Yes''' || ||ASSOCIATE construct ||Partial ([[http://gcc.gnu.org/ml/fortran/2010-08/msg00188.html|2010-08-17]], [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38936|PR38936]], [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49076|PR49076]], [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49636|PR49636]], [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52832|PR52832]]) || ||Polymorphic entities ||'''[[OOP|Yes]]''' (partial since 4.5, arrays since 4.7, unlimited since 4.8) || ||SELECT TYPE construct ||'''Yes''' (2009-11-30) || ||Deferred bindings and abstract types ||'''Yes''' (2008-09-02; deferred binding since 2009-03-29)|| ||Allocatable scalars||'''Yes''' (4.5.0-2009-09-30)|| ||Allocatable character length||Partial (missing: as components, bugs: [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45170|PR45170]]; since 2011-01-28, GCC 4.6)|| ||'''Miscellaneous enhancements''' || ||Structure constructors ||'''Yes''' (since 4.4.0 2008-05-16) || ||The allocate statement ||'''Yes''' (4.5.0-2009-09-30) || ||Assignment to an allocatable array ||'''Yes''' (since 2011-01-28, GCC 4.6, [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47517|PR47517]]) || ||Transferring an allocation ||'''Yes''' || ||More control of access from a module ||'''Yes''' || ||Renaming operators on the USE statement ||Partial (not: operator(+)=>operator(.user.) etc.; [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31298|PR31298]])|| ||Pointer assignment ||'''Yes''' (since 2010-08-19) || ||Pointer INTENT ||'''Yes''' || ||The VOLATILE attribute ||'''Yes''' || ||The IMPORT statement ||'''Yes''' || ||Intrinsic modules ||'''Yes''' || ||Access to the computing environment ||'''Yes''' || ||Support for international character sets ||'''Yes''' (since 2008-04-30; UTF-8 I/O since 2008-08-16) || ||Lengths of names and statements ||'''Yes''' || ||Binary, octal and hex constants ||'''Yes''' (since 2007-12-08) || ||Array constructor syntax ||'''Yes''' (since 2008-05-16) || ||Specification and initialization expressions ||Partial || ||Complex constants ||'''Yes''' || ||Changes to intrinsic functions ||Partial || ||Controlling IEEE underflow ||No || ||Another IEEE class value ||No || ||'''Input/output enhancements''' || ||Derived type input/output ||No || ||Asynchronous input/output ||'''Yes''' (since 4.4.0 2008-04-05; implemented as [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25829|synchronous I/O]]) || ||FLUSH statement ||'''Yes''' || ||IOMSG= specifier ||'''Yes''' || ||Stream access input/output ||'''Yes''' || ||ROUND= specifier ||'''Partial''' (2009-09-28, rounding on OUTPUT only)|| ||DECIMAL= specifier ||'''Yes''' (since 4.4.0 2008-04-05) || ||SIGN= specifier ||'''Yes''' (since 4.4.0 2008-04-05) || ||Kind type parameters of integer specifiers ||No || ||Recursive input/output ||'''[[http://gcc.gnu.org/ml/fortran/2008-04/msg00165.html|Yes]]''' || ||Intrinsic function for newline character ||'''Yes''' || ||Input and output of IEEE exceptional values ||'''Yes''' || ||Comma after a P edit descriptor ||'''Yes''' || ||'''Interoperability with C''' || ||Interoperability of intrinsic types ||'''Yes''' (since 4.3 2007-07-02) || ||Interoperability with C pointers ||'''Yes''' (since 4.3 2007-07-02) || ||Interoperability of derived types ||'''Yes''' (since 4.3 2007-07-02) || ||Interoperability of variables ||'''Yes''' (since 4.3 2007-07-02) || ||Interoperability of procedures ||'''Yes''' (since 4.3 2007-07-02) || ||Interoperability of global data ||'''Yes''' (since 4.3 2007-07-02) ||