This part of the manual describes those parts of the Fortran 2003 language which are not in Fortran 95, and indicates which features are currently supported by the NAG Fortran Compiler.
Features marked in the section heading as ‘[5.3.1]’ are newly available in release 5.3.1, those marked ‘[5.3]’ were available in release 5.3, those marked ‘[5.2]’ were available in release 5.2, those marked ‘[5.1]’ were available in release 5.1 (and in some cases earlier), and those marked ‘[n/a]’ are not yet available.
Fortran 2003 is a major advance over Fortran 95: the new language features can be grouped as follows:
The basic object-oriented features are type extension, polymorphic variables, and type selection; these provide inheritance and the ability to program ad-hoc polymorphism in a type-safe manner. The advanced features are typed allocation, cloning, type-bound procedures, type-bound generics, and object-bound procedures. Type-bound procedures provide the mechanism for dynamic dispatch (methods).
The ALLOCATABLE
attribute is extended to allow it to be used for dummy
arguments, function results, structure components, and scalars (not just
arrays).
An intrinsic procedure has been added to transfer an allocation from one
variable to another.
Finally, in intrinsic assignment, allocatable variables or components are
automatically reallocated with the correct size if they have a different shape
or type parameter value from that of the expression.
This last feature, together with deferred character length, provides the user
with true varying-length character variables.
There are two other major data enhancements: the addition of type parameters to
derived types, and finalisation (by final subroutines).
Other significant data enhancements are the PROTECTED
attribute,
pointer bounds specification and rank remapping, procedure pointers,
and individual accessibility control for structure components.
Interoperability with the C programming language consists of allowing C
procedures to be called from Fortran, Fortran procedures to be called from C,
and for the sharing of global variables between C and Fortran.
This can only happen where C and Fortran facilities are equivalent: an
intrinsic module provides derived types and named constants for mapping Fortran
and C types, and the BIND(C)
syntax is added for declaring Fortran
entities that are to be shared with C.
Additionally, C style enumerations have been added.
Support for IEEE arithmetic is provided by three intrinsic modules.
Use of the IEEE_FEATURES
module requests IEEE compliance for specific
Fortran features, the IEEE_EXCEPTIONS
module provides access to IEEE
modes and exception handling, and the IEEE_ARITHMETIC
module provides
enquiry functions and utility functions for determining the extent of IEEE
conformance and access to IEEE-conformant facilities.
The input/output facilities have had three major new features: asynchronous
input/output, stream input/output, and user-defined procedures for derived-type
input/output (referred to as “defined input/output”).
Additionally, the input/output specifiers have been regularised so that where
they make sense: all specifiers that can be used on an OPEN
statement
can also be used on a READ
or WRITE
statement, and vice versa.
Access to input/output error messages is provided by the new IOMSG=
specifier, and processor-dependent constants for input/output (e.g. the unit
number for the standard input file) are provided in a new intrinsic module.
Finally, there are a large number of miscellaneous improvements in almost every
aspect of the language.
Some of the more significant of these are the IMPORT
statement (provides
host association into interface blocks), the VALUE
and VOLATILE
attributes, the ability to use all intrinsic functions in constant expressions,
and extensions to the syntax of array and structure constructors.