今回の Oracle Developer Studio Fortran コンパイラのリリースには、Fortran 2003 および Fortran 2008 規格の多数の新機能が含まれています。詳細は、該当する Fortran 規格を参照してください。
Fortran の新しい規格には次のものが含まれています。
C 言語手続きを参照する方法、および反対に C 関数から Fortran 副プログラムを参照できるよう指定する方法
外部 C 変数とリンクする大域変数を宣言する方法
ISO_C_BINDING モジュールは、C の型と互換のデータを表す種別パラメータである名前付き定数へのアクセスを可能にします。
この規格は、BIND(C) 属性も取り入れています。Fortran の構造型は、BIND 属性を持つものならば、C と相互に利用できます。
Fortran コンパイラは、Fortran 規格の第 15 章に記述されている機能を実装します。第 15 章で定義されているすべての組み込み関数が実装されています。また、規格第 4 章に述べられている、C の型に対応する構造型およびリストを定義する機能を備えます。
新しい組み込みモジュール、IEEE_ARITHMETIC および IEEE_FEATURES は、Fortran 言語における例外と IEEE 演算をサポートします。次のように指定すると、これらの機能がすべてサポートされます。
USE, INTRINSIC :: IEEE_ARITHMETIC
USE, INTRINSIC :: IEEE_FEATURES
INTRINSIC キーワードが Fortran 2003 で新しく追加されました。これらのモジュールは、一連の構造型、定数、丸めモード、照会関数、要素別処理関数、種別関数、要素別処理サブルーチン、非要素別処理サブルーチンを定義します。詳細は、Fortran 2003 規格の第 14 章を参照してください。
Fortran 2003 規格では、コマンド行引数および環境変数を処理するための新しい組み込み関数が紹介されています。これらを次に示します。
GET_COMMAND(command, length, status)
command で、プログラムを呼び出したコマンド行全体を返します。
GET_COMMAND_ARGUMENT(number, value, length, status)
value でコマンド行引数を返します。
GET_ENVIRONMENT_VARIABLE(name, value, length, status, trim_name)
環境変数の値を返します。
Fortran コンパイラでは、Fortran 2003 の PROTECTED 属性が受け入れられています。PROTECTED はモジュール要素の使用に制限を設けます。PROTECTED 属性を持つオブジェクトは、それ自身が宣言されるモジュール内でのみ定義可能です。
コンパイラは入出力文中の ASYNCHRONOUS 指定子を認識します。
ASYNCHRONOUS=[’YES’ | ’NO’]
この構文は Fortran 2003 規格の第 9 章で提案されているものです。WAIT 文とともに使うことで、コンピューティングで重複する可能性のある入出力処理を指定することができます。コンパイラは ASYNCHRONOUS=’YES’ を認識しますが、規格では実際の非同期入出力を必要としません。このコンパイラのリリースでは、入出力は常に同期です。
Fortran 2003 で、ALLOCATABLE 属性に使用できるデータエンティティーが拡張されました。以前、この属性はローカルに格納された配列変数に制限されていました。現在では、次の要素を使用できます。
構造体の配列成分
ダミー配列
配列関数の結果
CLASS 型指定子の多相要素
割り付け要素は、記憶領域に関連付けられているすべての場所で使用が禁止されています。COMMON ブロックと EQUIVALENCE 文。割り付け配列成分は SEQUENCE 型になることがありますが、そのような型のオブジェクトは COMMON および EQUIVALENCE で使用できません。
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
Fortran 2003 規格では、新しい「ストリーム」入出力方式が定義されています。ストリーム入出力アクセスは、データファイルを連続したバイトのシーケンスとして扱い、1 から始まる正の整数でアドレスを定義できます。データファイルは、書式付きアクセスまたは書式なしアクセス用に結合できます。
OPEN 文で ACCESS=’STREAM’ 指定子を使用して、ストリーム入出力ファイルを宣言します。バイトアドレスにファイルを位置付けるには、READ または WRITE 文に POS=scalar_integer_expression 指定子が必要です。INQUIRE 文は、ACCESS='STREAM'、指定子 STREAM=scalar_character_variable、および POS=scalar_integer_variable を受け入れます。
IMPORT 文は、親子結合によってアクセス可能な親有効域の要素を指定します。この文は、インタフェース本体でのみ使用できます。
f95 コンパイラは、Fortran 2003 の FLUSH 文を受け入れます。FLUSH 文を使用すると、外部ファイルに書き込まれたデータをほかのプロセスで利用したり、Fortran 以外の方法で外部ファイルに配置されたデータを READ 文で利用したりすることができるようになります。
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
配列構成子内の (/ と /) に角括弧を使用できるようになりました。
X = [ 3.2, 4.01, 6.5 ]
Fortran 2003 規格では、配列構成子としての角括弧の使用が許可されます。これによって、区間定数との間で衝突が起こる可能性があります。-xia オプション (または区間演算を有効にするための同様のオプション) を指定せずに角括弧を使用すると、配列構成子として処理されます。-xia オプションを使用すると、角括弧は定数として処理されます。区間ユーザーは、コンパイルエラーを回避するために、(/ および /) 配列構成子を継続して使用する必要があります。
配列構成子内部の配列成分は、次の 2 つの形式が可能です。
type-spec ::
または
[type-spec ::] ac-value-list
省略可能な type-spec が存在する場合、配列成分の型および種類は、配列成分の型が type-spec と互換性がある限り、同じである必要がありません。
type-spec は組み込み型または構造型とすることができます。
Fortran 2003 の多相性が完全にサポートされます。
Fortran 2003 の機能である FINAL サブルーチンがサポートされます。
Fortran 2003 の機能である手続きポインタがサポートされます。
詳細は、公開されている Fortran 2003 および Fortran 2008 規格を参照してください。
割り付け配列の 2003 拡張 — 配列の再割り付け、および割り付けスカラー。
ALLOCATE/DEALLOCATE 文の 2003 拡張 — ERRMSG および SOURCE。
2003 拡張の MOVE_ALLOC 組み込み関数。
2003 拡張のポインタ代入と再マッピング。
2003 拡張の MIN/MAX、MIN/MAXVAL、および MIN/MAXLOC と文字引数。
2003 組み込み関数 IS_IOSTAT_END、IS_IOSTAT_EOR、NEW_LINE。
2003 組み込み関数 SELECTED_CHAR_KIND。
組み込み関数 SYSTEM_CLOCK の引数 COUNT_RATE の 2003 REAL 型。
複素 SQRT 組み込み関数の結果に関する 2003 の新規制限。
2008: 欠如しているオプション引数としての null ポインタの使用。
2008 ビット組み込み関数: BGE、BGT、BLE、BLT、DSHIFTL、DSHIFTR、LEADZ、POPCNT、POPPAR、TRAILZ、MASKL、MASKR、SHIFTA、SHIFTL、SHIFTR、MERGE_BITS、IALL、IANY、IPARITY。
拡張された構造体構成子: 成分名を使用した構造体定数の構築。
モジュール構造型および成分への拡張された PUBLIC/PRIVATE アクセス制御。
Fortran 2008 数学組み込み関数のサポートが増えました。ERFC_SCALED、NORM2、および x86 プラットフォームでの一部の REAL*16 形式を除くほとんどの Fortran 2008 数学組み込み関数がサポートされるようになりました。
成分を持たない構造型。
KIND 引数が ICHAR、IACHAR、ACHAR、SHAPE、UBOUND、LBOUND、SIZE、MINLOC、MAXLOC、COUNT、LEN、LEN_TRIM、INDEX、SCAN、および VERIFY の組み込み関数に追加されました。
BACK 引数が MINLOC および MAXLOC 組み込み関数に追加されました。
新しい組み込み関数 FINDLOC および STORAGE_SIZE が追加されました。
新しいキーワード ERRMSG、SOURCE、および MOLD が ALLOCATE 文に追加され、ERRMSG が DEALLOCATE 文に追加されました。
ENUM による列挙。
VOLATILE キーワード。
個々の成分への PUBLIC/PRIVATE 参照許可。
非公開型の公開要素。
拡張された複素定数。
Fortran 2003 の ISO_FORTRAN_ENV モジュール。
組み込み関数への新しい省略可能な KIND= 引数。
127 文字までの長さの名前。ただしモジュール名は 31 文字に制限されます。
INQUIRE 文の ID= および PENDING= 指定子。
データ転送および INQUIRE 文での POS= 指定子。
BLANK、DECIMAL、DELIM、PAD、ROUND、SIZE 指定子。
DC、DP、RD、RC、RN、RP、RU、RZ 編集記述子。
USE での INTRINSIC および NON_INTRINSIC キーワード
IS_IOSTAT_END および IS_IOSTAT_EOR 組み込み関数。
可変長文字宣言のサポート。たとえば、CHARACTER (LEN=:), POINTER :: STR となります。
TARGET オブジェクトを INTENT(IN) ポインタ仮引数に渡すことのサポート。これは Fortran 2008 の機能です。