4. Solaris Studio Fortran の機能と相違点
4.3.3 Cray ポインタと Fortran 95 のポインタ
4.4 STRUCTURE および UNION (VAX Fortran)
4.6.10 Fortran 2003 の IMPORT 文
4.6.11 Fortran 2003 の FLUSH 入出力文
今回の Solaris Studio Fortran コンパイラのリリースには、Fortran 2003 規格の多数の新機能が含まれています。詳細は、Fortran 2003 規格を参照してください。また、Fortran 2008 ドラフト規格で提案されている機能もいくつか含まれています。これらの機能の詳細は、該当するドラフト出版物を参照してください。
Fortran の新しい規格には次のものが含まれています。
C 言語手続きを参照する方法、および反対に C 関数から Fortran 副プログラムを参照できるよう指定する方法
外部 C 変数とリンクする大域変数を宣言する方法
ISO_C_BINDING モジュールは、C の型と互換のデータを表す種別パラメータである名前付き定数へのアクセスを可能にします。
この規格は、BIND(C) 属性も取り入れています。Fortran の構造型は、BIND 属性を持つものならば、C と相互に利用できます。
Fortran コンパイラの今回のリリースでは、規格の第 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 規格では、コマンド行引数および環境変数を処理するための新しい組み込み関数が紹介されています。それら組み込み関数は次の 3 つです。
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 属性に使用できるデータエンティティーが拡張されました。以前、この属性はローカルに格納された配列変数に制限されていました。現在では、次の要素を使用できます。
構造体の配列成分
ダミー配列
配列関数の結果
割り付け要素は、記憶領域に関連付けられているすべての場所で使用が禁止されています。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 を受け入れます。
3 つの新しい Fortran 2003 書式付き入出力指定子が、f95 に実装されています。これらの指定子は、OPEN、READ、WRITE、PRINT、および INQUIRE 文で指定されます。
DECIMAL=[’POINT’|’COMMA’]
デフォルトの小数部分編集モードを変更します。デフォルトでは、ピリオドによって、D、E、EN、ES、F、および G 編集によって書式付けされた数値全体と、浮動小数点の小数部分が分離されます。’COMMA’ は、123,456 のように、印刷の際に、ピリオドの代わりにコンマを使用するようにデフォルトを変更します。デフォルトの設定は、123.456 のように、印刷の際にピリオドを使用する ’POINT’ です。
ROUND=[’PROCESSOR_DEFINED’ | ’COMPATIBLE’]
書式付き入出力 D、E、EN、ES、F、および G 編集のデフォルトの丸めモードを設定します。’COMPATIBLE’ と指定する場合は、データ変換によって得られる値は、2 つのもっとも近い表示値のうち、より近い方の表示値になります。値が表示値のちょうど中間である場合は、0 から離れている方の表示値になります。’PROCESSOR_DEFINED’ を指定する場合は、丸めモードはプロセッサのデフォルトのモードに依存します。ROUND が指定されていない場合は、丸めモードはコンパイラのデフォルトになります。
たとえば、WRITE(*,’(f11.4)’) 0.11115 は、デフォルトのモードでは 0.1111、’COMPATIBLE’ モードでは 0.1112 になります。
IOMSG=character-variable
指定された文字変数に文字列としてエラーメッセージを返します。これは、標準の出力で表示されるエラーメッセージと同じです。最長メッセージが保持可能な大きさの文字バッファーを割り当ててください。CHARACTER*256 で十分です。
INQUIRE 文で使用する場合は、これらの指定子は、現在の値を返すための文字変数を宣言します。
新しい編集記述子 DP、DC、RP、および RC は、単一の FORMAT 文内のデフォルトの設定を、それぞれ、小数点、小数部のコンマ、プロセッサ定義の丸め、および互換性のある丸めに変更します。次に例を示します。
WRITE(*,’(I5,DC,F10.3)’) N, W
F10.3 出力項目のピリオドの代わりにコンマが使用されます。
書式付き入出力の浮動小数点丸めモードの変更については、-iorounding コンパイラコマンド行オプションも参照してください (「3.4.45 -iorounding[={ compatible|processor-defined}]」)。
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 オプションを使用すると、角括弧は定数として処理されます。区間ユーザーは、コンパイルエラーを回避するために、(/ および /) 配列構成子を継続して使用する必要があります。
次に示す Fortran 2003 機能についての詳細は、公開されている Fortran 2003 規格を参照してください。Fortran 2008 機能については、公開されている Fortran 200x ドラフトドキュメントを参照してください。
割り付け配列の 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 ポインタの使用
x86 プラットフォームでの IEEE 組み込みモジュールのサポート
2008 ビット組み込み関数: BGE、BGT、BLE、BLT、DSHIFTL、DSHIFTR、LEADZ、POPCNT、POPPAR、TRAILZ、MASKL、MASKR、SHIFTA、SHIFTL、SHIFTR、MERGE_BITS、IALL、IANY、IPARITY