Oracle Solaris Studio 12.2: Fortran ユーザーズガイド

4.6 Fortran 200x の機能

今回の Solaris Studio Fortran コンパイラのリリースには、Fortran 2003 規格の多数の新機能が含まれています。詳細は、Fortran 2003 規格を参照してください。また、Fortran 2008 ドラフト規格で提案されている機能もいくつか含まれています。これらの機能の詳細は、該当するドラフト出版物を参照してください。

4.6.1 C 関数との相互運用性

Fortran の新しい規格には次のものが含まれています。

ISO_C_BINDING モジュールは、C の型と互換のデータを表す種別パラメータである名前付き定数へのアクセスを可能にします。

この規格は、BIND(C) 属性も取り入れています。Fortran の構造型は、BIND 属性を持つものならば、C と相互に利用できます。

Fortran コンパイラの今回のリリースでは、規格の第 15 章に記述されている機能を実現します。また、規格第 4 章に述べられている、C の型に対応する構造型およびリストを定義する機能を備えます。

4.6.2 IEEE 浮動小数点の例外処理

新しい組み込みモジュール、IEEE_ARITHMETIC および IEEE_FEATURES は、Fortran 言語における例外と IEEE 演算をサポートします。次のように指定すると、これらの機能がすべてサポートされます。

USE, INTRINSIC :: IEEE_ARITHMETIC

USE, INTRINSIC :: IEEE_FEATURES

INTRINSIC キーワードが Fortran 2003 で新しく追加されました。これらのモジュールは、一連の構造型、定数、丸めモード、照会関数、要素別処理関数、種別関数、要素別処理サブルーチン、非要素別処理サブルーチンを定義します。詳細は、Fortran 2003 規格の第 14 章を参照してください。

4.6.3 コマンド行引数用組み込み関数

Fortran 2003 規格では、コマンド行引数および環境変数を処理するための新しい組み込み関数が紹介されています。それら組み込み関数は次の 3 つです。

4.6.4 PROTECTED 属性

Fortran コンパイラでは、Fortran 2003 の PROTECTED 属性が受け入れられています。PROTECTED はモジュール要素の使用に制限を設けます。PROTECTED 属性を持つオブジェクトは、それ自身が宣言されるモジュール内でのみ定義可能です。

4.6.5 Fortran 2003 非同期入出力

コンパイラは入出力文中の ASYNCHRONOUS 指定子を認識します。

ASYNCHRONOUS=[’YES’ | ’NO’]

この構文は Fortran 2003 規格の第 9 章で提案されているものです。WAIT 文とともに使うことで、コンピューティングで重複する可能性のある入出力処理を指定することができます。このコンパイラは ASYNCHRONOUS='YES' を認識しますが、規格は、実際の非同期入出力を要求しません。今回のコンパイラのリリースでは、入出力は常に同期化します。

4.6.6 ALLOCATABLE 属性の拡張機能

Fortran 2003 で、ALLOCATABLE 属性に使用できるデータエンティティーが拡張されました。以前、この属性はローカルに格納された配列変数に制限されていました。現在では、次の要素を使用できます。

割り付け要素は、記憶領域に関連付けられているすべての場所で使用が禁止されています。COMMON ブロックと EQUIVALENCE 文。割り付け配列成分は SEQUENCE 型になることがありますが、そのような型のオブジェクトは COMMON および EQUIVALENCE で使用できません。

4.6.7 VALUE 属性

f95 コンパイラは、Fortran 2003 VALUE 型の宣言属性を受け入れます。

この属性とともに副プログラムのダミー入力引数を指定すると、実際の引数は「値」によって渡されます。次の例では、リテラル値を引数とする Fortran 副プログラムを呼び出す C 言語の主プログラムにおいて VALUE 属性を使用しています。


C code:
#include <stdlib.h>
int main(int ac, char *av[])
{
    to_fortran(2);
}

Fortran code:
       subroutine to_fortran(i)
       integer, value :: i
       print *, i
       end

4.6.8 Fortran 2003 ストリーム入出力

Fortran 2003 規格では、新しい「ストリーム」入出力方式が定義されています。ストリーム入出力アクセスは、データファイルを連続したバイトのシーケンスとして扱い、1 から始まる正の整数でアドレスを定義できます。データファイルは、書式付きアクセスまたは書式なしアクセス用に結合できます。

OPEN 文で ACCESS=’STREAM’ 指定子を使用して、ストリーム入出力ファイルを宣言します。バイトアドレスにファイルを位置付けるには、READ または WRITE 文に POS=scalar_integer_expression 指定子が必要です。INQUIRE 文は、ACCESS='STREAM'、指定子 STREAM=scalar_character_variable、および POS=scalar_integer_variable を受け入れます。

4.6.9 Fortran 2003 の書式付き入出力機能

3 つの新しい Fortran 2003 書式付き入出力指定子が、f95 に実装されています。これらの指定子は、OPENREADWRITEPRINT、および INQUIRE 文で指定されます。

INQUIRE 文で使用する場合は、これらの指定子は、現在の値を返すための文字変数を宣言します。

新しい編集記述子 DPDCRP、および RC は、単一の FORMAT 文内のデフォルトの設定を、それぞれ、小数点、小数部のコンマ、プロセッサ定義の丸め、および互換性のある丸めに変更します。次に例を示します。

WRITE(*,’(I5,DC,F10.3)’) N, W

F10.3 出力項目のピリオドの代わりにコンマが使用されます。

書式付き入出力の浮動小数点丸めモードの変更については、-iorounding コンパイラコマンド行オプションも参照してください (「3.4.45 –iorounding[={ compatible|processor-defined}]」)。

4.6.10 Fortran 2003 の IMPORT

IMPORT 文は、親子結合によってアクセス可能な親有効域の要素を指定します。この文は、インタフェース本体でのみ使用できます。

4.6.11 Fortran 2003 の FLUSH 入出力文

f95 コンパイラは、Fortran 2003 の FLUSH 文を受け入れます。FLUSH 文を使用すると、外部ファイルに書き込まれたデータをほかのプロセスで利用したり、Fortran 以外の方法で外部ファイルに配置されたデータを READ 文で利用したりすることができるようになります。

4.6.12 Fortran 2003 POINTER INTENT 機能

Fortran コンパイラは、POINTER 仮引数の INTENT 属性をサポートするようになりました。ポインタ仮引数として INTENT(IN)、INTENT(OUT)、または INTENT(INOUT) を指定できます。

たとえば、次を見てください。


subroutine sub(P)
integer, pointer, intent(in) :: p
...

end

ポインタの INTENT 属性はポインタに適用され、指示先には適用されません。したがって、INTENT(IN) ポインタの場合、次のものはポインタを変更するため無効です。


 p => t
 allocate(p)
 deallocate(p)

ただし、INTENT(IN) ポインタの場合、次のものは指示先を変更するため有効です。


 p = 400

4.6.13 Fortran 2003 拡張配列構成子

配列構成子内の (//) に角括弧を使用できるようになりました。


X = [ 3.2, 4.01, 6.5 ]

Fortran 2003 規格では、配列構成子としての角括弧の使用が許可されます。これによって、区間定数との間で衝突が起こる可能性があります。-xia オプション (または区間演算を有効にするための同様のオプション) を指定せずに角括弧を使用すると、配列構成子として処理されます。-xia オプションを使用すると、角括弧は定数として処理されます。区間ユーザーは、コンパイルエラーを回避するために、(/ および /) 配列構成子を継続して使用する必要があります。

4.6.14 その他の Fortran 2003 および Fortran 2008 機能

次に示す Fortran 2003 機能についての詳細は、公開されている Fortran 2003 規格を参照してください。Fortran 2008 機能については、公開されている Fortran 200x ドラフトドキュメントを参照してください。