Differences between revisions 1 and 95 (spanning 94 versions)
Revision 1 as of 2006-11-14 16:52:49
Size: 2075
Editor: TobiasBurnus
Comment: Add list of missing Fortran 2003 features
Revision 95 as of 2017-09-10 11:41:09
Size: 5744
Editor: ThomasKoenig
Comment: Document PDTs
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Fortran 2003 Features = = Fortran 2003 Features in GNU Fortran =
 * [[GFortranStandards|Fortran Standards]]
 * [[http:s//gcc.gnu.org/bugzilla/show_bug.cgi?id=20585|Fortran 2003 Meta Bug]]
 * [[ftp://ftp.nag.co.uk/sc22wg5/N1601-N1650/N1648.pdf|The New Features of Fortran 2003 by John Reid]] ([[ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.pdf|older version]])
 * [[Fortran2003Status|Chart of Fortran 2003 Features supported by GNU Fortran]]
Line 3: Line 7:
On this page, we list and prioritize Fortran 2003 features missing in the GNU Fortran. For Fortran 2008 see below and at
Line 5: Line 9:
 * [:GFortranStandards:Fortran Standards]
 * [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20585 Fortran 2003 Meta Bug]
 * [[Fortran2008Status|Chart of Fortran 2008 Features supported by GNU Fortran]]
Line 8: Line 11:
= Features supported by several other compilers = == Implemented ==
See also [[GFortran/News|GFortran news]] and in the [[GFortran#manuals|GNU Fortran manuals]] and note that the following list is incomplete.
Line 10: Line 14:
== Pending patches ==
 * '''USE statements with INTRINSIC and NON_INTRINSIC''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25707 PR25707]
 * '''IMPORT statement''' [http://gcc.gnu.org/PR27546 PR27546]
 * '''VALUE attribute''' [http://gcc.gnu.org/29642 PR29642]
 * '''ISO_FORTRAN_ENV module''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22547 PR22547]
 * '''Command-line intrinsics'''
 * '''Streaming IO'''
 * '''ENUMERATION support'''
 * '''Allocatable components and dummy arguments''' (TR 15581) and '''move_alloc'''
 * '''USE statements with INTRINSIC and NON_INTRINSIC''' (since 2006-11-17)
 * '''ISO_FORTRAN_ENV module''' (since 2006-11-20)
 * '''VOLATILE attribute''' (since 2006-11-07)
 * '''VALUE attribute''' (since 2006-12-03)
 * '''IMPORT statement''' (since 2006-12-08)
 * '''PROTECTED statement''' (since 2006-12-10)
 * '''Intent for pointers''' (since 2007-01-05)
 * '''Renaming operators on the USE statement''' (since 2007-03-08)
 * '''[[Fortran2003Bind_C|ISO C Bindings]]''' (since 2007-07-02)
 * '''MIN / MAX with character arguments''' (since 2007-08-06)
 * '''Optional KIND= specifier:''' ACHAR, COUNT, IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, SCAN, SIZE, UBOUND, VERIFY (since 2007-08-12)
 * '''ABSTRACT INTERFACE''' (since 2007-08-18) and '''PROCEDURE''' statement (since 2007-09-04, without procedure pointers)
 * '''Fortran 2003 BOZ''', i.e. BOZ in INT, REAL, DBLE and CMPLX (since 2007-12-08)
 * '''Asynchronous IO''', (since 2008-05-2008, standard conform, but implemented as synchronous I/O)
 * '''I/O changes''': decimal=, sign=, delim=, pad=, blank=, round=, encoding=default and UTF-8 (since 2008-04-05)
 * '''SELECTED_CHAR_KIND''' (since 2008-04-30; Fortran 2003 conform, but no optional UCS-4 support)
 * '''Structure constructures''' (since 2008-05-16)
 * ''' type-spec for array constructor''' (since 2008-05-16)
 * '''[[ProcedurePointers|Procedure Pointers]]''' (since 2008-07-02), as function results (since 2009-04-09)
 * '''Procedure Pointer Components''', with NOPASS (since 2009-05-06) and PASS (since 2009-07-25).
 * '''Type extension''' (since 2008-07-29)
 * '''Support for UCS-4''' (ISO 10646) and I/O with encoding=UTF-8 encoding (since 2008-08-16)
 * '''Type-bound procedures''': PROCEDURE (since 2008-08-28), GENERIC (since 2008-08-31), as operators (since 2009-08-27)
 * '''Abstract derived types:''' ABSTRACT, DEFERRED
 * '''Allocatable scalars'''
 * '''SELECT TYPE''' (since 2009-11-30)
 * '''SAME_TYPE_AS''' and '''EXTENDS_TYPE_OF''' intrinsics (since 2009-11-30)
 * '''polymorphic datatypes:''' Initial, experimental support, but problems with type-bound procedures (2009-11-30)
 * '''ALLOCATE specifiers SOURCE= and ERRMSG='''
 * '''ASSOCIATE construct''' (partial implementation; since 2010-06-2010, updated 2010-08-17)
 * '''Pointer Rank Remapping''' and setting of lower bounds (since 2010-08-19)
 * '''Coarrays:''' partially implemented (for a single image) since April 2010, cf. [[Coarray]]
 * '''Deferred-length character strings''' since 2011-01-28 (GCC 4.6)
 * '''Reallocate on assignment''' since 2011-01-28 (GCC 4.6)
 * '''Constructors''', i.e. generic functions with the same name as derived types, since 2011-11-16 (GCC 4.7)
 * '''Polymorphic arrays''' since 2011-12-11 (GCC 4.7)
 * '''User Defined Derived-Type IO''' since 2016-08-31 (GCC 7.0.0)
 * '''Parameterized derived types''' since 2017-09-09 (GCC 8.0.0)
Line 16: Line 57:
== Without pending patches == === Fortran 2008 ===
 * ASINH, ACOSH, ATANH, ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT and ERFC_SCALED (missing are three-argument form of BESSEL_*N and norm2) since 2008-03-06
 * g0 edit descriptor (since 2008-06-08).
 * NEWUNIT= option for OPEN (since 2009-06-08).
 * Unlimited format item (*(since 2009-08-19)).
 * Experimental support of the BLOCK construct (since 2009-09-29).
 * The complex versions of A{SIN,COS,TAN}{,H} (since GCC 4.5)
 * Single-image coarray support (incomplete, since Mai 2010)
 * '''CONTIGUOUS attribute''' (2010-06-21)
 * Implied-shape arrays (2010-08-13)
 * IMPURE (elemental) procedures (2010-08-15)
 * '''DO CONCURRENT''' since 2011-09-08 (but without type-spec)
 * '''IEEE intrinsic modules''' (TR15580, Fortran 2003 & 2008) since 2014-06-28
Line 18: Line 71:
 * '''Extended Formatted I/O specifiers''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28655 PR28655], [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29602 PR29602]
 * '''Intent for pointers''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29624 PR29624]
 * '''ISO C Bindings''' ''Christopher D. Rickett (crickett at lanl dot gov)'' [http://gcc.gnu.org/PR25709 PR25709]
 * '''IEEE Exceptions''' (TR15580) [http://gcc.gnu.org/PR29383 PR29383]
 * '''Asynchronous IO''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25829 PR25829]
 * '''PROTECTED statement''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23994 PR23994]
= Unimplemented =
== Features supported by several other compilers ==
 * '''Asynchronous IO''' implement real asynchronous I/O, currently it is synchronous [[https://gcc.gnu.org/PR25829|PR25829]]
 * '''Extended Formatted I/O specifiers''' i/o specifiers of non-default-kind, ([[https://gcc.gnu.org/PR29602|PR29602]])
Line 25: Line 76:
= Other features = == Other features ==
Note: This list is by far incomplete.
Line 27: Line 79:
 * '''MIN / MAX with character arguments''' [http://gcc.gnu.org/PR29828 PR29828]
 * '''Non-initialization expr. as case-selector''' [http://gcc.gnu.org/PR25104 PR25104]
 * ''' type-spec for array constructor''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27997 PR27997]
 * '''Type-bound procedures:''' PROCEDURE, GENERIC
 * '''Abstract derived types:''' ABSTRACT, DEFEERED
 * '''ALLOCATE specifiers SOURCE= and ERRMSG='''
 * '''SELECTED_CHAR_KIND'''
 * '''Pointer Rank Remapping''' [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29785 PR29785]
 * '''ASSOCIATE construction'''
 * '''Optional KIND= specifier:''' ACHAR, COUNT, IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, MAXLOC, MINLOC, SCAN, SHAPE, SIZE, UBOUND, VERIFY (complete?)
 * [[GFortranPatchTracker|Finalization subroutines]]
 * '''Optional KIND= specified:''' MAXLOC, MINLOC, SHAPE ([[https://gcc.gnu.org/PR29600|PR29600]])
 * '''More allowed initialization expressions''' [[https://gcc.gnu.org/PR29962|PR29962]]
 * '''Non-initialization expr. as case-selector''' [[https://gcc.gnu.org/PR25104|PR25104]]
 * '''User Defined Derived Type I/O'''
 * '''complete polymorphism''' (including unlimited polymorphism)

== Moving GNU Fortran towards the 2008 Standard ==
 * '''submodules:''' Part of Fortran 2008 (draft) and of the technical report ''[[ftp://ftp.nag.co.uk/sc22wg5/N1601-N1650/N1602.pdf|ISO/IEC TR 19767:2005 Fortran - Enhanced Module Facilities]]''
 * '''co-arrays:''' Missing parts such as a multi-image implementation, cf. [[Coarray]]

Fortran 2003 Features in GNU Fortran

For Fortran 2008 see below and at

Implemented

See also GFortran news and in the GNU Fortran manuals and note that the following list is incomplete.

  • Command-line intrinsics

  • Streaming IO

  • ENUMERATION support

  • Allocatable components and dummy arguments (TR 15581) and move_alloc

  • USE statements with INTRINSIC and NON_INTRINSIC (since 2006-11-17)

  • ISO_FORTRAN_ENV module (since 2006-11-20)

  • VOLATILE attribute (since 2006-11-07)

  • VALUE attribute (since 2006-12-03)

  • IMPORT statement (since 2006-12-08)

  • PROTECTED statement (since 2006-12-10)

  • Intent for pointers (since 2007-01-05)

  • Renaming operators on the USE statement (since 2007-03-08)

  • ISO C Bindings (since 2007-07-02)

  • MIN / MAX with character arguments (since 2007-08-06)

  • Optional KIND= specifier: ACHAR, COUNT, IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, SCAN, SIZE, UBOUND, VERIFY (since 2007-08-12)

  • ABSTRACT INTERFACE (since 2007-08-18) and PROCEDURE statement (since 2007-09-04, without procedure pointers)

  • Fortran 2003 BOZ, i.e. BOZ in INT, REAL, DBLE and CMPLX (since 2007-12-08)

  • Asynchronous IO, (since 2008-05-2008, standard conform, but implemented as synchronous I/O)

  • I/O changes: decimal=, sign=, delim=, pad=, blank=, round=, encoding=default and UTF-8 (since 2008-04-05)

  • SELECTED_CHAR_KIND (since 2008-04-30; Fortran 2003 conform, but no optional UCS-4 support)

  • Structure constructures (since 2008-05-16)

  • type-spec for array constructor (since 2008-05-16)

  • Procedure Pointers (since 2008-07-02), as function results (since 2009-04-09)

  • Procedure Pointer Components, with NOPASS (since 2009-05-06) and PASS (since 2009-07-25).

  • Type extension (since 2008-07-29)

  • Support for UCS-4 (ISO 10646) and I/O with encoding=UTF-8 encoding (since 2008-08-16)

  • Type-bound procedures: PROCEDURE (since 2008-08-28), GENERIC (since 2008-08-31), as operators (since 2009-08-27)

  • Abstract derived types: ABSTRACT, DEFERRED

  • Allocatable scalars

  • SELECT TYPE (since 2009-11-30)

  • SAME_TYPE_AS and EXTENDS_TYPE_OF intrinsics (since 2009-11-30)

  • polymorphic datatypes: Initial, experimental support, but problems with type-bound procedures (2009-11-30)

  • ALLOCATE specifiers SOURCE= and ERRMSG=

  • ASSOCIATE construct (partial implementation; since 2010-06-2010, updated 2010-08-17)

  • Pointer Rank Remapping and setting of lower bounds (since 2010-08-19)

  • Coarrays: partially implemented (for a single image) since April 2010, cf. Coarray

  • Deferred-length character strings since 2011-01-28 (GCC 4.6)

  • Reallocate on assignment since 2011-01-28 (GCC 4.6)

  • Constructors, i.e. generic functions with the same name as derived types, since 2011-11-16 (GCC 4.7)

  • Polymorphic arrays since 2011-12-11 (GCC 4.7)

  • User Defined Derived-Type IO since 2016-08-31 (GCC 7.0.0)

  • Parameterized derived types since 2017-09-09 (GCC 8.0.0)

Fortran 2008

  • ASINH, ACOSH, ATANH, ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT and ERFC_SCALED (missing are three-argument form of BESSEL_*N and norm2) since 2008-03-06
  • g0 edit descriptor (since 2008-06-08).
  • NEWUNIT= option for OPEN (since 2009-06-08).
  • Unlimited format item (*(since 2009-08-19)).
  • Experimental support of the BLOCK construct (since 2009-09-29).
  • The complex versions of A{SIN,COS,TAN}{,H} (since GCC 4.5)
  • Single-image coarray support (incomplete, since Mai 2010)
  • CONTIGUOUS attribute (2010-06-21)

  • Implied-shape arrays (2010-08-13)
  • IMPURE (elemental) procedures (2010-08-15)
  • DO CONCURRENT since 2011-09-08 (but without type-spec)

  • IEEE intrinsic modules (TR15580, Fortran 2003 & 2008) since 2014-06-28

Unimplemented

Features supported by several other compilers

  • Asynchronous IO implement real asynchronous I/O, currently it is synchronous PR25829

  • Extended Formatted I/O specifiers i/o specifiers of non-default-kind, (PR29602)

Other features

Note: This list is by far incomplete.

  • Finalization subroutines

  • Optional KIND= specified: MAXLOC, MINLOC, SHAPE (PR29600)

  • More allowed initialization expressions PR29962

  • Non-initialization expr. as case-selector PR25104

  • User Defined Derived Type I/O

  • complete polymorphism (including unlimited polymorphism)

Moving GNU Fortran towards the 2008 Standard

None: Fortran2003 (last edited 2017-09-10 11:41:09 by ThomasKoenig)