Fortran 2008

本書の一部には、Fortran 2008 標準に基づく情報が記載されています。 この標準は、継続的に解釈、変更、および改訂することができるようになっています。 IBM では、 今後のこの標準の解釈に合うように本製品の機能の動作を変更する権利を保持しています。

Fortran のさまざまな部分の解釈に関する質問に、Fortran 標準化委員会が回答しています。そのような質問 の中には、XL Fortran コンパイラーで実装された言語機能に関するものがある場合があります。これらの言語機能に関連して委員会から提出された回答によっては、XL Fortran コンパイラーの将来のリリースに変更が生じる場合があります。これらの変更の結果として、以前の製品リリースとの互換性が失われる可能性があります。

Fortran 2008 のいくつかの機能を以下に示します。

モジュール機能強化
  • サブモジュールは、モジュールのための追加の構造化機能を提供します。
  • モジュール・プロシージャー・インターフェース本体を宣言するか、別個のモジュール・プロシージャーを定義するには、FUNCTION ステートメントまたは SUBROUTINE ステートメントに MODULE 接頭部指定子を指定します。
パフォーマンスの向上
  • DO CONCURRENT 構文は、個々のループ反復に相互依存性がないことをプログラムで指定するための手段を提供します。
  • CONTIGUOUS 属性は、ポインター・ターゲットおよび想定形状仮引数のストレージ・レイアウトに関する制約事項をプログラムで指定するための手段を提供します。
データ宣言
  • 名前付き定数配列の形状は、その値によって暗黙指定できます。 詳しくは、『暗黙形状配列』を参照してください。
  • FORALLインデックス変数は、構文内で明示的に宣言された型および kind を持つことができます。
  • 派生型に加えて、TYPE 型指定子が、組み込み型のエンティティーを宣言するように拡張されました。
  • 複数の型境界プロシージャーを 1 つの型境界プロシージャー・ステートメントで宣言できます。
データの使用および計算
  • SOURCE= 指定子または MOLD= 指定子を含む ALLOCATE ステートメントを使用して、複数の allocate_object を割り振ることができます。
  • MOLD= 指定子が ALLOCATEステートメントに追加されました。 また、SOURCE= または MOLD= 指定子で source_expr を指定した場合は、ALLOCATE ステートメントの境界を省略できます。
  • 複素数部指定子を使用して、複素数エンティティーの実数部および虚数部に別個にアクセスできます。
  • 組み込み代入を使用して、変数をポリモアフィックにできるようになりました。
入出力
  • OPEN ステートメント内の NEWUNIT= は、プログラムで選択された他の装置番号の妨げにならない装置番号を自動的に選択します。
実行制御
  • BLOCK 構文には、構文有効範囲を持つオブジェクトの宣言を入れることができます。
  • EXIT ステートメントは、より多くの名前付き実行可能構文内から制御権移動を行うことができます。
  • STOP ステートメントで、停止コードとして整数または文字の定数式を使用できるようになりました。 STOP ステートメントはプログラムの正常終了を開始しますが、ERROR STOP ステートメントはプログラムのエラー終了を開始します。
組み込みプロシージャー
  • 組み込み関数 ACOSASINATANCOSHSINHTAN、および TANH では、複素数型の引数を使用できます。
  • 新しい組み込み関数 ACOSHASINH、および ATANH は、逆双曲線 cosinesine、および tangent をそれぞれ計算します。
  • 新しい組み込み関数 DSHIFTL および DSHIFTR は、結合左右シフトを計算します。
  • 新しい組み込み関数 ERFERFC、および ERFC_SCALED は、誤差関数とその補数を計算します。
  • EXECUTE_COMMAND_LINE サブルーチンは、コマンドを実行のためにオペレーティング・システムに渡すために使用できます。
  • 新しい組み込み関数 FINDLOC は、配列で値を検索します。
  • 新しい組み込み関数 GAMMA および LOG_GAMMA は、ガンマ関数とその対数を計算します。
  • 新しい組み込み関数 HYPOT は、ユークリッド距離を計算します。
  • 新しい組み込み関数 IS_CONTIGUOUS(ARRAY) は、配列の隣接性をテストします。
  • 新しい組み込み関数 LEADZ および TRAILZ は、整数内の先頭と末尾のゼロ・ビット数を返します。
  • 新しい組み込み関数 MASKL および MASKR は、単純左寄せ/右寄せマスクを返します。
  • BACK= 引数が、組み込み関数 MAXLOC および MINLOC に追加されました。
  • 新しい組み込み関数 POPCNT および POPPAR は、整数の 1 ビット数とそのパリティーを返します。
  • 新しい組み込み関数 SHIFTASHIFTL、および SHIFTR は、シフト操作を実行します。
  • RADIX= 引数が組み込みプロシージャー SELECTED REAL KIND に追加されました。
組み込みモジュール
プログラムおよびプロシージャー
  • POINTER 属性および INTENT(IN) 属性を持つ仮引数は、TARGET 属性を持つ非ポインター実引数に関連付けられた引数にできます。 詳しくは、『仮引数がポインターの場合』を参照してください。
  • 内部プロシージャーおよび内部プロシージャーに対するポインターは、実引数として使用できます。 また、内部プロシージャーはプロシージャー・ポインター・ターゲットとして使用できます。
  • エレメント型プロシージャーの仮引数が VALUE 属性を持たない場合、仮引数には INTENT 属性が指定されていなければなりません。
  • エレメント型プロシージャーに対する参照で、実引数が配列である場合、INTENT(OUT) または INTENT(INOUT) のいずれかの仮引数に対応する実引数はすべて、配列でなければなりません。
  • 分離モジュール・サブプログラムは、対応するモジュール・プロシージャー・インターフェース本体によって宣言された分離モジュール・プロシージャーを定義します。
  • Fortran 2008 では、基本プロシージャーが純粋である必要性はなくなります。IMPURE 接頭部指定子を使用して、 プロシージャーを明示的に 宣言できます。
  • 汎用解決規則が拡張され、割り振り可能仮引数とポインター仮引数、およびプロシージャー仮引数とデータ仮引数を区別するようになりました。 詳しくは、一義的な総称プロシージャー参照を参照してください。
  • インターフェース・ブロック内の PROCEDURE ステートメントおよび MODULE PROCEDURE ステートメントで二重コロン区切り文字 (::) を使用できます。
  • モジュールまたは内部サブプログラムでは、FUNCTION キーワードおよび SUBROUTINE キーワードを END ステートメントから省略できます。
  • 内部プロシージャーでは、BIND 属性を NAME= 指定子なしで指定できます。
  • VALUE 属性を、想定形状または明示形状のいずれかを持つ配列仮引数で指定できます。