Compaq Visual Fortran は,Fortran 95 および Fortran 90 の ISO および ANSI 標準に対して,以下の拡張をサポートしています。
Compaq Fortran (Compaq Visual Fortran を含む) は,Compaq Fortran 77 for OpenVMS VAX (以前の DEC Fortran 77 と VAX FORTRAN) が提供していた言語拡張を提供しています。
Microsoft Fortran PowerStation 4.0 については,「Microsoft Fortran PowerStation との互換性」を参照してください。
この節では,以下のトピックについて説明しています。
Compaq Visual Fortran (CVF) は,以下の Compaq Alpha オペレーティング・システム用の Compaq Fortran が使用する強固で高性能な Fortran 95/90 コンパイラを使用しています。
Compaq Tru64 UNIX Alpha システム
Linux Alpha システム
OpenVMS Alpha システム
以下の表は,Compaq Fortran for Alpha Systems および Compaq Fortran 77 for OpenVMS VAX System と Compaq Visual Fortran の互換性をまとめたものです。
言語互換性のまとめ
Compaq Fortran (CF) プラットフォーム | |||||
---|---|---|---|---|---|
言語機能 | CVF Windows |
CF UNIX Alpha |
CF Linux Alpha |
CF OpenVMS Alpha |
CF77 OpenVMS VAX |
スタティックおよび共有ライブラリーとのリンク | X | X | X | X | X |
共有ライブラリー用のコードの生成 | X | X | X | X | X |
再帰的コードのサポート | X | X | X | X | X |
AUTOMATIC と STATIC 文 | X | X | X | X | X |
STRUCTURE と RECORD 宣言 | X | X | X | X | X |
INTEGER*1,*2,*4 | X | X | X | X | X |
LOGICAL*1,*2,*4 | X | X | X | X | X |
INTEGER*8 と LOGICAL*8 | X | X | X | X | |
REAL*4,*8 | X | X | X | X | X |
REAL*16 1 | X | X | X | X | |
COMPLEX*8,*16 | X | X | X | X | X |
COMPLEX*32 2 | X | X | X | ||
POINTER (CRAY 形式) | X | X | X | X | X |
INCLUDE 文 | X | X | X | X | X |
IMPLICIT NONE 文 | X | X | X | X | X |
型宣言でのデータの初期化 | X | X | X | X | X |
自動割付け配列 | X | X | X | X | |
VOLATILE 文 | X | X | X | X | X |
NAMELIST 変数群書式 I/O | X | X | X | X | X |
$ と _ を含む 31 文字名 | X | X | X | X | X |
機械語コードを含むソース・リスト | X | X | X | X | X |
ソース中のデバッグ文 | X | X | X | X | X |
データを初期化するためと算術での使用のためのビット定数 | X | X | X | X | X |
DO WHILE と END DO 文 | X | X | X | X | X |
ビルトイン関数 %LOC,%REF,%VAL | X | X | X | X | X |
SELECT CASE 構文 | X | X | X | X | |
EXIT と CYCLE 文 | X | X | X | X | |
可変書式式 (VFE) | X | X | X | X | X |
行末注釈としての感嘆符 (!) の使用 | X | X | X | X | X |
配列と部分列の実行時境界検証 (オプション) | X | X | X | X | X |
IEEE ビッグ・エンディアン,IEEE リトル・エンディアン,VAX,IBM,と CRAY 浮動小数点での 2 進 (書式なし) I/O | X | X | X | X | X |
Fortran 95/90 標準の検証 | X | X | X | X | |
FORTRAN-77 標準の検証 | X | ||||
IEEE 例外処理 | X | X | X | X | |
メモリー中の VAX 浮動小数点データ型 | X | X | |||
メモリー中の IEEE 浮動小数点データ型 | X | X | X | X | |
CDD/Repository DICTIONARY のサポート | X | ||||
KEYED 参照と INDEXED ファイル | X | X | |||
並列分解 | 4 | X 3,4 | 4 | X | |
OpenMP 並列指示文 | X | ||||
IF...DEF 構文を使用した条件コンパイル | X | X | X | X | |
ベクトル・コードのサポート | X | ||||
基本線形代数サブルーチン (BLAS) の直接インライン展開 | 5 | 5 | 5 | 5 | X |
4 桁の年を返す DATE_AND_TIME | X | X | X | X | X |
FORALL 文と構文 | X | X | X | X | |
割付け配列の自動割り当て解除 | X | X | X | X | |
MAXLOC と MINLOC への Dim 引数 | X | X | X | X | |
純粋ユーザー定義副プログラム | X | X | X | X | |
要素別処理ユーザー定義副プログラム | X | X | X | X | |
ポインタの初期化 (初期値) | X | X | X | X | |
ポインタをヌルにする NULL 組込み関数 | X | X | X | X | |
構造型の初期化 | X | X | X | X | |
CPU_TIME 組込みサブルーチン | X | X | X | X | |
CEILING FLOOR 組込み関数への種別引数 | X | X | X | X | |
入れ子 WHERE 構文,選別 ELSEWHERE 文と名前付き WHERE 構文 | X | X | X | X | |
変数群入力で許される注釈 | X | X | X | X | |
END INTERFACE 文の総称識別子 | X | X | X | X | |
書式編集記述子の最小欄幅 | X | X | X | X | |
廃止予定事項および廃止事項の検出 6 | X | X | X | X |
表の脚注
1 | REAL*16 データに対して,OpenVMS VAX システムは H 浮動小数点書式を使用し,Alpha システムは IEEE 形式の X 浮動小数点書式を使用します。 |
2 | COMPLEX*32 データに対して,Alpha システムは両方の REAL*16 部分に対して IEEE 形式の X 浮動小数点書式を使用します。 |
3 | Compaq Fortran for Compaq Tru64 UNIX での並列処理に対して,共有メモリー・マルチプロセッサー・システム上で OpenMP または Compaq Fortran 指示文または複数システムにまたがる High Performance Fortran (HPF) 構文を使用するための MPI ソフトウェアを使用することができます。 |
4 | 並列処理に対して,共有メモリー・マルチプロセッサー・システム用のオプションの KAP プリプロセッサーを使用することができます。 |
5 | BLAS と他のルーチンは,Compaq Extended Mathematical Library (CXML) ソフトウェアで利用することができます。これは,Compaq Visual Fortran と Compaq Fortran for Alpha Systems で提供されています (ダウンロード情報は,http://www.compaq.com/math を参照してください)。 |
6 | Compaq Fortran は,これらの廃止予定事項および廃止事項に印をつけていますが,完全にサポートしています。 |
Compaq Fortran 77 for Alpha Systems と Compaq Fortran (Compaq Visual Fortran を含む) 間でのアプリケーションを簡単に移植するために,Compaq Visual Fortran は Fortran 95/90 標準に含まれていない以下の Compaq Fortran 77 拡張をサポートしています。
記録構造構造体 (STRUCTURE と RECORD 文)
PRINT,ACCEPT,TYPE,DELETE,および UNLOCK を含む I/O 文
INQUIRE 文指定子 CARRIAGECONTROL,CONVERT,ORGANIZATION,および RECORDTYPE のような I/O 文指示子
複数の INTEGER と REAL の種別
KIND 型パラメタに加えて,INTEGER*4 のようなデータ宣言文での大きさ指定子
メモリー中の IEEE 浮動小数点データ型
POINTER 文と関連するデータ型 (整数ポインタまたは CRAY ポインタ)
型なし PARAMETER 文
VOLATILE 文
AUTOMATIC と STATIC 文
%REF,%VAL,および %LOC のような引数並びで使用できるビルトイン関数
ホレリス定数
可変書式式 (VFE)
正確な組込み関数
タブ書式 (固定書式の変形)
I/O 書式記述子
ユーザー定義 OPEN ルーチンのための USEROPEN ルーチン
DEFINE FILE,ENCODE,DECODE,および VIRTUAL 文を含む付加的な言語機能
言語拡張に加えて,Compaq Visual Fortran は以下の Compaq Fortran 77 機能もサポートしています。
/LIST と /NOLIST を使用した INCLUDE 文書式 (/vms コンパイラ・オプションでコンパイルする必要があります)
コンパイラ・オプションを上書きまたは設定するための OPTIONS 文
以下を含む 汎用 cDEC$ 指示文
cDEC$ ALIAS
cDEC$ IDENT
cDEC$ OPTIONS
cDEC$ PSECT
cDEC$ TITLE
cDEC$ SUBTITLE
実行時エラー処理 (IOSTAT) で使用するための foriosdef.for シンボル・パラメタ定義
Compaq Visual Fortran は,以下の機能と拡張を含んでいます。これらは,他の Compaq Fortran プラットフォームでもサポートしています。
スタティック・ライブラリーとのリンクのサポート
ダイナミック・リンク・ライブラリー (DLL) とのリンクのサポート
ダイナミック・リンク・ライブラリー (DLL) に入れるためのコード生成のサポート
スタックを基本とした記憶域のサポート
動的なメモリー割付けのサポート
IEEE (リトル・エンディアンとビッグ・エンディアン),VAX,IBM System/360,および CRAY 整数および浮動小数点書式を含む非ネイティブ書式での 2 進データ・ファイルの入出力のサポート
IEEE 浮動小数点例外処理,報告,および返し値のユーザーによる制御
COMMON での項目と構造型の欄のメモリー境界の配置の制御と位置合わせされていないデータへの警告
リスト・ページのタイトルおよび副タイトル,オブジェクト・ファイルの識別子欄,COMMON と記録欄の位置合わせ,および COMMON ブロックの属性を制御するための指示文
外部関数副プログラムの呼び出し機能
7200 文字の文の長さ
自由形式ソースでの無制限の行の長さ
STRUCTURE,END STRUCTURE,および RECORD 文を使用した複合データ宣言と欄参照を通しての記録要素の参照
以下のようなデータ型に対する記録割付け単位の明示的な指定
INTEGER*4
LOGICAL*4
REAL*4
REAL*8
COMPLEX*8
INTEGER*8 および LOGICAL*8 を使用した 64 ビット符号付き整数のサポート
REAL*16 および COMPLEX*32 を使用した 128 ビット浮動小数点データのサポート (Compaq Alpha プラットフォームのみ)
以下のデータ型の組
BYTE
LOGICAL*1,LOGICAL*2,LOGICAL*4,および LOGICAL*8
INTEGER*1,INTEGER*2,INTEGER*4,および INTEGER*8
REAL*4,REAL*8
COMPLEX*8,COMPLEX*16,DOUBLE COMPLEX
Compaq Fortran POINTER 文 (CRAY 形式)
データ宣言文でのデータ文形式の初期化
AUTOMATIC および STATIC 文
LOGICAL,REAL,および INTEGER 値を初期化し,算術および論理式で使用するためのビット定数
ビルトイン関数 %LOC,%REF,および %VAL
VOLATILE 文
ビット操作関数
すべてのデータ型に適用できる 2 進,16 進,および 8 進定数,Z 形および O 形編集記述子
非負の INTEGER*4 値を使うことができる I/O 装置番号
記録終了子を含んでいない STREAM ファイルへの入出力を可能にするデータの変数の総数
ENCODE および DECODE 文
ACCEPT,TYPE,および REWRITE 入出力文
DEFINE FILE,UNLOCK,および DELETE 文
ファイルを開く時の USEROPEN サブルーチンの呼び出し
文字 NAMELIST 項目に対する入力としての文字の区切りがない文字列の読み込みのサポート
ソース中のデバッグ文
実行形式ファイルの機械コードを持つソース・リストの生成 (オプション)
FORMAT 文での可変書式式
配列添字と文字部分列の実行時境界検証 (オプション)
ドル記号 ($) と下線 (_) を含む 31 文字識別子
各種の拡張範囲および拡張精度浮動小数点アーキテクチャー機能をサポートする言語要素
8 ビット指数部と 24 ビット仮想部および一般的に 7 桁の精度を持つ 32 ビット IEEE S 浮動小数点データ型
11 ビット指数部と 53 ビット仮想部および一般的に 15 桁の精度を持つ 64 ビット IEEE T 浮動小数点データ型
以下のコンパイラ・オプション
INTEGER,REAL,および DOUBLE PRECISION データ項目の基本の大きさ
プログラムに適用する最適化のレベルと形式
INCLUDE とモジュール・ファイルの検索ディレクトリ
各種のコンパイル時警告の表示または禁止
各種の I/O および演算エラーの実行時検証の実行または禁止
発見されたエラーが指定した数に到達した時にコンパイルを終了するかどうかの制御
実行されるコードがスレッド再入可能であるかどうかの選択
内部手続を実引数として手続に渡すことが可能
以下のハードウェアがサポートしているすべてのデータ型の種別パラメタ
1,2,4,および 8 バイトの LOGICAL データ:LOGICAL(KIND=1),LOGICAL(KIND=2),LOGICAL(KIND=4),LOGICAL(KIND=8)
1,2,4,および 8 バイトの INTEGER データ:INTEGER(KIND=1),INTEGER(KIND=2),INTEGER(KIND=4),INTEGER(KIND=8)
4 および 8 バイトの REAL データ:REAL(KIND=4),REAL(KIND=8)
単精度と倍精度の COMPLEX データ:COMPLEX(KIND=4),COMPLEX(KIND=8)
Fortran 90 標準で導入された FORTRAN 77 に対する主な追加と改良は,以下のとおりです。
配列演算と機能
モジュール
自由形式ソース
数値演算の機能の改善
パラメタ化された組込みデータ型
ユーザー定義 (構造型) データ型と演算
総称ユーザー定義手続
インタフェース・ブロック
ポインタ (Fortran 90 ポインタ)
言語進化という概念
ソース・テキストに対する付加機能
省略可能手続引数
入出力機能の追加
制御構文の追加
組込み手続の追加
宣言文の追加
属性を指定するための方法の追加
有効範囲と結合
さらに,Fortran 90 標準には,業界で受け入れられている FORTRAN 77 標準の次の拡張が含まれています。
再帰副プログラムのサポート
IMPLICIT NONE 文
INCLUDE 文
NAMELIST 変数群書式 I/O
DO WHILE および ENDDO 文
行末注釈としての感嘆符 (!) の使用
自動割付け配列のサポート
SELECT CASE - CASE - CASE DEFAULT - END SELECT 文のサポート
EXIT および CYCLE 文のサポートと DO - END DO 文での構文名のサポート
Fortran 95 標準で導入された Fortran 90 に対する主な追加と改良は,以下のとおりです。
FORALL 文と構文
PURE ユーザー定義手続
ELEMENTAL ユーザー定義手続
CPU_TIME 組込みサブルーチン
NULL 組込み関数
構造型構造体の基本初期化
ポインタの初期化
割付け配列の自動割り当て解除
CEILING,FLOOR,MAXLOC,MINLOC,および SIGN を含む機能強化した組み込み関数
-0.0 の印字
機能強化した WHERE 構文
END INTERFACE 文で許可される総称識別子
長さゼロの書式
変数群入力での注釈の許可
関連情報
「Fortran 95 の機能」を参照
「Fortran 90 の機能」を参照
プラットフォーム間で移植する場合,以下の点に注意してください。
コンパイル時に /stand コンパイル・オプションを使用すると,コンパイル時に言語拡張を使用するソース・コードの識別の手助けになります。U*X Alpha システムでは,-std オプションを指定します。OpenVMS システムでは,/STANDARD 修飾子を指定します。
オペレーティング・システムが提供するプラットフォーム特有の手続 (ライブラリー・ルーチンのような) を使用している場所を特定し,多くの場合変更する必要があります。可能であれば,Fortran 標準言語呼び出し (組込み手続など) をプラットフォーム特有の手続の代わりに使用するようにします。たとえば,ソース・ファイルをリンクしようとして,未解決の参照/シンボルのエラーをリンカーが返した場合,そのルーチン名はプラットフォーム特有のものであることに気づかなければなりません。
U*X システムから移植する場合,システム・コール (マン・ページのセクション 2 を参照) と Windows システムでは見つけられない他のライブラリー・ルーチンを呼び出しているコードを識別します。Visual Fortran は,U*X システムで見つけられる多くの U*X Fortran ライブラリー・ルーチン (マン・ページのセクション 3f を参照) を含む可搬用ライブラリー を提供しています。Alpha システムでサポートされている Compaq Extended Math Library (CXML) ルーチンは,Visual Fortran でも提供されています。U*X Alpha プログラミング環境の詳細は,『Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems』を参照してください。
OpenVMS システムから移植する場合,システム・サービス (SYS$ 接頭辞) または RTL ルーチン (LIB$,CVT$,DTK$,MATH$,OTS$,PPL$,SMG$,および STR$ のような接頭辞) を呼び出しているコードを識別します。Alpha システムでサポートされている Compaq Extended Math Library (CXML) ルーチンは,Visual Fortran でも提供されています。
OpenVMS システムでの文字引数は,他のプラットフォームでは見つけられない文字記述子で渡されます。
OpenVMS Alpha プログラミング環境についての詳細は,『Compaq Fortran User Manual for OpenVMS Alpha Systems』を参照してください。
Visual Fortran から Alpha システムに移植する場合,非グラフィックス・アプリケーションは比較的容易に移植することができます。Visual Fortran アプリケーションの性質は,一般的に選択したプロジェクト・タイプ (たとえば,Fortran Console アプリケーション) で定義されます。たとえば,多くのプラットフォーム特有のグラフィックス・システム・コールを使用するアプリケーションは,一般的に他のプラットフォームへの移植は大変困難です。
プラットフォーム特有の Fortran ルーチンの名前は,名前の最後に QQ を付けたものか Win32 名前付け規約 (「Win32 ルーチンの呼び出し」を参照) を使用しているかのどちらかです。あるルーチンのグループは,異なった USE 文を必要とします。Visual Fortran または Win32 ルーチンの説明は,HTML Help Viewer の索引と検索機能を使って参照することができます。
Visual Fortran オンライン 言語リファレンス と印刷版『Comapq Fortran Language Reference Manual』は,特定の Compaq Fortran プラットフォームでのみサポートする言語要素を識別しています。
Visual Fortran が提供する数学ライブラリーは,他のプラットフォームでも利用可能です。
Visual Fortran プロフェッショナル版が提供する IMSL 数学および統計ルーチンはまた,Visual Numerics, Inc. から他の多くのプラットフォーム (Compaq Alpha システムを含む) でも利用可能です (詳細は,http://www.vni.com を参照)。
Visual Fortran のすべての版が提供する Compaq Extended Math Library (CXML) ルーチンはまた,Compaq Fortran for Alpha Systems でも提供されています。CXML ルーチンは,Compaq Alpha Systems 個々で利用可能です (詳細は,http://www.compaq.com/math を参照)。
アプリケーション・コードが,メモリー上に保存される数値データ書式に仮定を設けている場合があります。Compaq Fortran と Visual Fortran は,リトル・エンディアン書式 でメモリー上に数値データを保存します。一方,幾つかのベンダーはビッグ・エンディアン書式を使用します。プラットフォームが異なった大きさの組込みデータ型をサポートするものもあります。
アプリケーション・コードが,Compaq Fortran (整数) ポインタ の大きさに仮定を設けている場合があります。たとえば,U*X Alpha システムでは,アドレスの大きさは 64 ビットです。Windows Win32 システムでは,アドレスの大きさは 32 ビットです。可能な限り,Compaq Fortran ポインタの代わりに標準に準拠した Fortran 95/90 ポインタを使用してください。
プラットフォームが,シンボル名に余分な文字を追加するような異なった名前修飾規約を使用する場合があります。適切な cDEC$ ATTRIBUTES 指示文を使えば,この問題を克服することができます (「言語が混在したプログラミングにおける名付け規約の調整」を参照)。
Compaq Visual Fortran が動作している Windows システムと Compaq Fortran が動作している Alpha システム間でデータ・ファイルを移植する場合,以下の点に注意します。
書式付きデータ・ファイルに対しては,ストリーム LF 記録形式を使用します。
書式なし負データ・ファイルに対しては,セグメント化された記録形式を使用します。Compaq Fortran for OpenVMS Systems から移植された書式なしデータ・ファイルは,非 IEEE 浮動小数点書式を使用しているかもしれません。たとえば,Compaq Fortran for OpenVMS Alpha Systems は,ユーザーが IEEE かつ/または VAX 書式をコンパイル時に指定できるようにしています (「サポートされているネイティブ,非ネイティブ数値書式」を参照)。
OpenVMS システムから書式なしファイルを移植するための 1 つの推奨方法は以下のとおりです。
OpenVMS システムで,ファイル (file.dat) に対して以下の DCL コマンドをタイプします。
$ SET FILE /ATTR=(RFM=FIX,LRL=512) file.dat
書式なしデータ・ファイルの移植についての詳細は,http://www.compaq.com/fortran/kb の「Compaq Fortran Knowledge Base」を参照してください。記録形式変換プログラムの例は,http://www.compaq.co.jp/products/dvf/examples/index.html に掲載されています。
(ftp を使って) 2 進 (イメージ) コピーとして Windows システムにファイルをコピーします。
RECORDTYPE='SEGMEMTED' でファイルを開くようにソース・コードを修正します。
ファイルが VAX 浮動小数点書式を使用していれば,「書式なし数値データの変換」で説明されている方法の 1 つを使って適切な VAX 書式を指定します。
Fortran だけのプログラムは,言語が混在したプログラムを移植するより一般的に容易です。
関連情報
『Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems』の関連する章を参照してください。
『Compaq Fortran User Manual for OpenVMS Alpha Systems』の関連する章を参照してください。