Chart of Fortran 2008 Features supported by GNU Fortran
See also Fortran 2003 implementation status
See also TS 29113: Technical Specification on Further Interoperability with C
When the question which Fortran 2003 features are implemented in which compiler, came up in 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:
The new features of Fortran 2008 by John Reid
cf. also Coarrays in the next Fortran Standard by John Reid
The Fortran Forum articles:
Version of August 2009: ACM SIGPLAN Fortran Forum '''28'''(2), 15 (2009)
Version of December 2009: ACM SIGPLAN Fortran Forum '''28'''(3), 32 (2009)
Version of April 2010: ACM SIGPLAN Fortran Forum '''29'''(1), 29 (2010)
August 2010: ACM SIGPLAN Fortran Forum '''29'''(2), 28 (2010)
November 2010: ACM SIGPLAN Fortran Forum '''29'''(3), 26 (2010)
April 2011: ACM SIGPLAN Fortran Forum '''30'''(1), 16 (2011)
August 2011: ACM SIGPLAN Fortran Forum '''30'''(2), 18 (2011)
December 2011: ACM SIGPLAN Fortran Forum '''30''' (2), 20 (2011)
April 2012: ACM SIGPLAN Fortran Forum '''31''' (1), 23 (2012)
August 2012: ACM SIGPLAN Fortran Forum '''31''' (2), 28 (2012)
December 2012 ACM SIGPLAN Fortran Forum '''31''' (3), 17 (2012)
A freely available version of the article can be found at:
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 |
No, PR52846 |
Coarrays |
Partial (4.6, April 2010: incomplete, for one image only) |
Performance enhancements |
|
do concurrent |
Partial (2011-09-08) (type-spec support (and concurrency) missing; PR44735) |
Contiguous attribute |
Yes (2010-06-21) |
Simply contiguous arrays |
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 |
No, PR36825, cf. array descriptor update |
Long integers |
Yes |
Allocatable components |
No, PR45516 |
Implied-shape array |
Yes (2010-08-13) |
Pointer initialization |
Yes (since 4.6, 2011-02-08, PR45290) |
Kind of a forall index |
No (cf. PR44735) |
Allocating a polymorphic variable |
Partial (2010-06-15), PR43366 |
Accessing data objects |
|
Accessing real and imaginary parts |
No |
Pointer functions as lvalue |
Partial (2010-10-21), PR40054 |
Input/Output |
|
Finding a unit when opening a file |
Yes (2009-06-08) |
g0 edit descriptor |
Yes |
Unlimited format item |
Yes (2009-08-17) |
Recursive input/output |
Yes |
Execution control |
|
The block construct |
Yes (2009-09-29), but as experimental with some details missing |
Exit statement |
Yes (2010-09-03) |
Stop code |
Yes (2010-06) |
Intrinsic procedures for bit processsing |
|
Bit sequence comparison |
Yes (since 2010-09-08) |
Combined shifting |
Yes (since 2010-09-08) |
Counting bits |
Yes (since 2010-08-31; leadz/tailz since GCC 4.4) |
Masking bits |
Yes (since 2010-09-08) |
Shifting bits |
Yes (since 2010-09-08) |
Merging bits |
Yes (since 2010-09-08) |
Bit transformational functions |
Yes (since 2010-09-06) |
Intrinsic procedures and modules |
|
Storage size |
Yes (since 2010-07-08) |
Selecting a real kind |
Partial (2010-05-25, not idee_selected_real_kind) |
Hyperbolic intrinsic functions |
Yes (since 4.5) |
Bessel functions |
Yes (since 2010-08-21, the elemental functions since GCC 4.4) |
Arc tangent function |
Yes (since 4.5) |
Error and gamma functions |
Yes (since 2009-05-16 including ERFC_SCALED in initialization expressions) |
Euclidean vector norm |
Yes (since 2010-08-27) |
Parity |
Yes (since 2010-08-27) |
Execute command line |
Yes (since 2010-09-01) |
Location of maximum or minimum value in an array |
No |
Find location in an array |
No |
Constants |
Yes (since 2011-06-16) |
Module procedures |
Yes (since 2010-09-27) |
Programs and procedures |
|
Empty contains section |
Yes |
Internal procedure as an actual argument |
Yes (2010-09-03) |
Generic resolution by pointer or allocatable attribute |
Yes (since 4.8, 2012-10-06, PR45521) |
Null pointer as a missing dummy argument |
Yes (since 2010-08-15) |
Elemental procedures that are not pure |
Yes (since 2010-08-15) |
Entry statement becomes obsolescent |
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.