[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

11 OpenVMS Alphaコンパイラ

この章では,ネイティブなOpenVMS Alphaコンパイラ固有の機能について説明します。 さらに,OpenVMS VAXコンパイラの機能のうち, OpenVMS Alphaコンパイラではサポートされない機能と, 動作が変更された機能についても示します。

以下にこの章で説明するコンパイラを示します。

コンパイラの相違点が発生するのは,次の2つの理由によります。それは, OpenVMS VAXで動作するコンパイラの以前のバージョンと現在のバージョンとの間に違いがあるためと, VAXコンピュータとAlphaコンピュータで動作するバージョンに違いがあるためです。 OpenVMS Alphaコンパイラは,OpenVMS VAXの対応するコンパイラと互換性を維持するように設計されています。 この後の節に示すように,互換性を維持するためにいくつかの修飾子が提供されます。

言語は言語標準規格に準拠し,OpenVMS VAXの大部分の言語拡張機能をサポートします。 コンパイラはOpenVMS VAXシステムの場合と同じ省略時のファイル・タイプを使用して出力ファイルを作成します。 たとえば,オブジェクト・モジュールのファイル・タイプは.OBJです。

しかし,OpenVMS VAXシステムのコンパイラでサポートされていた機能のうち, 一部の機能はOpenVMS Alphaシステムで提供されません。

各言語のコンパイラの相違点の詳細については,その言語のマニュアル, とくにユーザーズ・ガイドとリリース・ノートを参照してください。


11.1  DEC AdaのAlphaシステムとVAXシステム間の互換性

DEC Adaは,VAX Adaに含まれる標準的および拡張されたAda言語機能を, ほとんどすべて含んでいます。これらの機能は次の解説書で説明されています。

しかし,プラットフォーム・ハードウェアの違いにより, いくつかの機能はサポートされておらす,VAXシステムと Alphaシステムでは異なる機能もあります。 あるシステムから別のシステムへのプログラムの移行を助けるため, 移行の節ではこれらの違いを説明します。


注意
すべてのシステムの各リリースごとに, これらの機能のすべてがサポートされるわけではありません。 詳しくは,DEC Adaのリリース・ノートを参照してください。


11.1.1 データ表現とアラインメントにおける相違点

概して,DEC Adaはすべてのプラットフォームで同じデータ・タイプをサポートします。 しかし,以下の違いに注意してください。


11.1.2 タスクに関する相違点

タスクの優先順位とスケジューリング, およびタスク制御ブロック・サイズはアーキテクチャ固有です。詳しくは, リリース・ノートを参照してください。


11.1.3 プラグマに関する相違点

プラグマには以下のような違いがあります。


11.1.4 SYSTEMパッケージの相違点

SYSTEMパッケージに関しては,以下の変更があります。

さらに,VAXシステムでサポートされる以下のタイプとサブプログラムは, Alphaシステムではサポートされません。


SYSTEM.READ_REGISTER
SYSTEM.WRITE_REGISTER
SYSTEM.MFPR
SYSTEM.MTPR
SYSTEM.CLEAR_INTERLOCKED
SYSTEM.SET_INTERLOCKED
SYSTEM.ALIGNED_WORD
SYSTEM.ADD_INTERLOCKED
SYSTEM.INSQ_STATUS
SYSTEM.REMQ_STATUS
SYSTEM.INSQHI
SYSTEM.REMQHI
SYSTEM.INSQTI
SYSTEM.REMQTI


11.1.5 他の言語パッケージ間での相違点

以下に他のパッケージでの違いを示します。


11.1.6 あらかじめ定義されている命令に対する変更

VAXシステムでサポートされる以下の2つのあらかじめ定義されている命令は Alphaシステムではサポートされません。


11.2  DEC C for OpenVMS AlphaシステムとVAX Cとの互換性

DEC Cを構成するコンパイラ群は,ANSIに準拠する基本的なC言語を定義し, これらの言語はAlphaアーキテクチャも含めて, すべてのDECプラットフォームで使用できます。詳しくは, DEC Cの解説書を参照してください。


11.2.1 言語モード

DEC C for OpenVMS AlphaシステムはANSI C標準規格に準拠し, オプションとしてVAX CおよびCommon C (pcc)の拡張機能をサポートします。 オプションとして提供されるこれらの拡張機能はモードと呼び, これらの拡張機能を起動するには,/STANDARD修飾子を使用します。 表 11-1はこれらのモードと, 各モードを起動するのに必要なコマンドと修飾子の構文を示しています。

表 11-1 DEC C for OpenVMS Alphaコンパイラの操作モード

モード コマンド修飾子 説明
省略時の設定 /STANDARD=RELAXED_ANSI89 ANSI C標準規格に準拠するが,弊社の追加キーワードや, 1文字目がアンダースコアでない事前定義マクロも使用できる。
ANSI C /STANDARD=ANSI89 厳密にANSI Cに準拠した言語のみを受け付ける。
VAX C /STANDARD=VAXC ANSI C標準規格の他にVAX Cの拡張機能も使用できる。 これらの拡張機能がANSI C標準規格と互換性がない場合でも使用可能である。
Common C (pcc) /STANDARD=COMMON ANSI C標準規格の他に,Common Cの拡張機能も使用できる。 これらの拡張機能がANSI C標準規格と互換性がない場合も使用可能である。
Microsoftとの互換性 /STANDARD=MS Microsoft Visual C++コンパイラ製品に付属する Cコンパイラの言語規則に従ってソース・プログラムを解釈する。


11.2.2  DEC C for OpenVMS Alphaシステムのデータ型のマッピング

DEC C for OpenVMS Alphaシステムのコンパイラは, 対応するVAXコンパイラとほとんど同じデータ型マッピングをサポートします。 表 11-2は, AlphaアーキテクチャでのC言語の算術演算データ型のサイズを示しています。

表 11-2 DEC C for OpenVMS Alphaコンパイラでの算術演算データ型のサイズ

Cデータ型 VAX Cのマッピング DEC Cのマッピング
pointer 32 32または64[1]
long 32 32
int 32 32
short 16 16
char 8 8
float 32 32[2]
double 64[2] 64[2]
long double 64[2] 64[2]
__int16 NA 16
__int32 NA 32
__int64 NA 64
[1] 実現されている場合には, ソース・ファイルでプラグマを使用するか, またはコマンド行修飾子を使用することにより,サイズを選択できる。

[2] コマンド行修飾子を使用することにより,AlphaでD,F,G,S,または T浮動小数点データ型にマッピングする方法を選択できる。 第11.2.2.1項を参照。

移植性を向上するために,DEC C for OpenVMS Alphaシステムのコンパイラでは, 各データ型に対してマクロを定義するヘッダ・ファイルが準備されています。 たとえば,64ビットの長さのデータ型が必要な場合には,int64マクロを使用します。


11.2.2.1 浮動小数点マッピングの指定

Cの浮動小数点データ型とAlphaの浮動小数点データ型の間のマッピングは, コマンド行修飾子によって制御されます。Alphaアーキテクチャでは, 次の浮動小数点データ型をサポートします。

コマンド行修飾子を使用すれば,標準的なCデータ型のfloatとdoubleが Alphaのどの浮動小数点データ型にマッピングされるかを制御できます。たとえば, /FLOAT=G_FLOAT修飾子を指定した場合には,DEC Cはfloatデータ型を AlphaのF浮動小数点データ型にマッピングし,doubleデータ型をAlphaの G浮動小数点データ型にマッピングします。 表 11-3は浮動小数点オプションを示しています。 各コマンド行に浮動小数点修飾子は1つだけ指定できます。

表 11-3 DEC C の浮動小数点マッピング

コンパイラ・オプション Float Double Long Double
/FLOAT=F_GLOAT F浮動形式 G浮動形式  
/FLOAT=D_FLOAT F浮動形式 D-53浮動小数点  
/FLOAT=IEEE_FLOAT S浮動形式 T浮動形式  
/L_DOUBLE_SIZE=128
(省略時の値)
- - X浮動形式


11.2.3  Alpha命令にアクセスする組み込み機能

DEC Cには,表 11-4に示す機能があり, これらの機能はAlphaシステム固有の機能です。この後の節では, これらの機能について説明します。

表 11-4  OpenVMS Alphaシステム固有のDEC Cコンパイラ機能

機能 説明
一部のAlpha命令へのアクセス 組み込み機能として使用できる
一部のVAX命令へのアクセス Alpha PALcodeを通じて使用できる
不可分な組み込み機能 AND,OR,およびADD演算の不可分性を保証する


11.2.3.1 Alpha命令のアクセス

DEC Cは,特にシステムおプレベルのプログラミングのための C言語により表現できない機能を提供するために正確なAlpha命令をサポートします。 例えば,次のようなものがあります。


11.2.3.2  Alpha特権付きアーキテクチャ・ライブラリ(PALcode)命令のアクセス

Alphaアーキテクチャでは, 特定のVAX命令をAlpha特権付きアーキテクチャ・ライブラリ(PALcode)命令として実現しています。 DEC Cでは,次のPALcode命令をアクセスできます。


11.2.3.3  複数の操作の組み合わせに対する不可分性の保証

VAXアーキテクチャでは,変数のインクリメントなど, 特定の組み合わせ操作は不可分に実行されることが保証されます(つまり, 途中で割り込みが発生することはありません)。 Alphaシステムでこれと同じ機能を実現するために, DEC Cは不可分性を保証して操作を実行できるような組み込み機能を準備しています。 表 11-5 はこれらの不可分な組み込み機能を示しています。 これらの組み込み機能についてん詳細はDEC C言語の解説書を参照してください。

表 11-5 不可分性組み込み機能

不可分性組み込み機能 説明
__ADD_ATOMIC_LONG(ptr, expr, retry_count)
__ADD_ATOMIC_QUAD(ptr,expr, retry_count)
ptr によって示されるデータ引数に式 expr を追加する。 任意に指定できる retry_count パラメータは, 操作を繰り返す回数を指定する(省略時の設定では, 操作は永久に繰り返される)。
__AND_ATOMIC_LONG(ptr,expr, retry_count)
__AND_ATOMIC_QUAD(ptr, expr, retry_count)
ptr によって示されるデータ・セグメントをフェッチし, 式 expr との間で論理AND演算を実行し,結果を格納する。 retry_count パラメータは,操作を繰り返す回数を指定する (省略時の設定では,操作は永久に繰り返される)。
__OR_ATOMIC_LONG(ptr, expr, retry_count)
__OR_ATOMIC_QUAD(ptr, expr, retry_count)
ptr によって示されるデータ・セグメントをフェッチし, 式 expr との間で論理OR演算を実行し,結果を格納する。 retry_count パラメータは操作を繰り返す回数を指定する(省略時の設定では, 操作は永久に繰り返される)。

これらの組み込み機能は, 割り込みを発生させずに操作を最後まで実行することだけを保証します。 同時に書き込みアクセスが実行されるような変数に対して不可分な操作を実行する場合 (たとえば,ASTとメイン・ライン・コードから書き込まれる変数や 2つの並列プロセスから書き込まれる変数など), volatile 属性によって変数を保護しなければなりません。

さらに,DEC C for OpenVMS Alphaシステムでは, VAXインターロック命令と同じ機能を実行するために次の命令をサポートします。

これらの組み込み機能は,不可分な組み込み機能と同様に retry_count パラメータを使用して, ループが永久に実行されるのを防止します。


11.2.4  VAX CとDEC C for OpenVMS Alphaシステムのコンパイラの相違点

次の機能はVAX Cでも使用できますが, DEC C for OpenVMS Alphaシステムの省略時の動作とは異なります。しかし, これらの機能の一部に対しては, コマンド行修飾子とプラグマ命令を使用することにより,VAX Cと同じ動作を実行できます。


11.2.4.1 データ・アラインメントの制御

自然な境界にアラインされていないデータをアクセスすると, Alphaシステムでは性能が著しく低下するため,DEC C for OpenVMS Alphaシステムは省略時の設定により,データを自然な境界にアラインします。 この機能を無効にし,VAXのアラインメント(パックされたアラインメント) を実行するには,ソース・ファイルに #pragma nomember_alignmentプリプロセッサ命令を指定するか, /NOMEMBER_ALIGNMENTコマンド行修飾子を使用します。


11.2.4.2 引数リストのアクセス

&argv1などの引数のアドレスを検出すると,DEC C for OpenVMS Alphaシステムは, すべての引数をスタックに移動する関数に対してプロローグ・コードを生成します( homing 引数と呼ぶ)が,その結果,性能が低下します。また, 引数リスト"walking"は,<varargs.h> または <stdargs.h> インクルード・ファイルで関数を使用しなければ実現できません。


11.2.4.3 例外の同期化

Alphaアーキテクチャでは,算術演算例外がただちに報告されないため, 後続の例外が通知される前に静的変数への代入が実行されることを期待することはできません (volatile属性を使用した場合でも)。


11.2.4.4 動的条件ハンドラ

OpenVMS Alphaシステム用のDEC CとDEC C++は, LIB$ESTABLISHを組み込み関数として取り扱いますが, OpenVMS VAXシステムまたはOpenVMS Alphaシステムで LIB$ESTABLISHを使用することは望ましくありません。CおよびC++プログラマは, LIB$ESTABLISHの代わりにVAXC$ESTABLISHを呼び出してください (VAXC$ESTABLISHはOpenVMS Alphaシステム用のDEC CおよびDEC C++で提供される組み込み関数です)。


11.2.5  CプログラマのためのSTARLETデータ構造体と定義

OpenVMS Alphaバージョン1.0には, SYS$STARLET_C.TLBという新しいファイルが含まれており, このファイルにはSTARLETSD.TLBに相当するSTARLET機能を提供するすべての .Hファイルが格納されています。現在,DEC CコンパイラにはDECC$RTLDEF.TLBの他に SYS$STARLET_C.TLBファイルが同梱されており,以前のVAX C Compilerに同梱されていたVAXCDEF.TLBの代わりに使用されます。 DECC$RTLDEF.TLBには,コンパイラとRTLをサポートするすべての.Hファイル, たとえば,STDIO.Hなどが格納されています。

次の相違点があるために,ソースを変更しなければならない可能性があります。


11.2.6  /STANDARD=VAXCモードでサポートされないVAX Cの機能

VAX Cでサポートされる大部分のプログラミング方式は,DEC C for OpenVMS Alphaシステムでも/STANDARD=VAXCモードでサポートされますが, ANSI標準規格と矛盾する特定のプログラミング方式はサポートされません。 次のリストはこれらの相違点を示しています。詳しくはDEC Cコンパイラに関する解説書を参照してください。


11.3 VAX COBOLとDEC COBOLの互換性と移行

DEC COBOLは,OpenVMS VAXシステム上で動作するVAX COBOLに基づいており, 高い互換性があります。以下の項では,両者のおもな違いの要約を示します。 この情報は,両製品との互換性があるCOBOLアプリケーションを開発したり, VAX COBOLアプリケーションをOpenVMS Alphaオペレーティング・システム上の DEC COBOLに移行する際に役立ちます。


11.3.1 DEC COBOLの拡張仕様と機能の違い

DEC COBOLは,VAX COBOLにはない以下の言語拡張仕様と機能を含んでいます。

さらに,DEC COBOLには以下の機能が含まれています。

DEC COBOLは,VAX COBOLの以下の機能を含んでいません。

DEC COBOLとVAX COBOLの詳細については, 製品のリリース・ノートおよび解説書をご覧ください。OpenVMS Alphaオペレーティング・システムでは,システム・プロンプトでHELP COBOL RELEASE_NOTESと入力すると, インストールされているコンパイラのリリース・ノートのオンライン・バージョンを見ることができます。


11.3.2 コマンド行修飾子

第11.3.2.3項と第11.3.2.5項では, DEC COBOLとVAX COBOLのコマンド行修飾子を比較しています。 OpenVMS Alphaオペレーティング・システムのDEC COBOLのコマンド行修飾子の詳細については,OpenVMS Alphaのシステム・プロンプトで HELP COBOLと入力して,オンライン・ヘルプを参照してください。 VAX COBOLのコマンド行修飾子については,『VAX COBOL User Manual』を参照してください。


11.3.2.1 /NATIONALITY={JAPAN|US}

/NATIONALITY=JAPANが指定されていると,円記号(�)が省略時の通貨記号になり, 日本語サポート機能が有効になります。また,この場合は /NODIAGNOSTICSと/NOANALYSIS_DATAが暗黙のうちに指定されます。

OpenVMS Alpha上のDEC COBOLで/NATIONALITY=JAPANを指定した場合, Oracle CDD/Repositoryはサポートされません。

コンパイル・コマンド行で/NATIONALITY=USを指定すると,ドル記号($) が省略時の通貨記号になり,日本語サポート機能は無効になります。


11.3.2.2 /STANDARD=MIA

コンパイル・コマンド行で/STANDARD=MIAが指定されていると,コンパイラは MIA仕様に準拠していない言語要素について診断情報を発行します。

診断情報を表示するには,/WARNINGS=ALL修飾子か /WARNING=INFORMATION修飾子が必要です。

省略時の設定はNOMIAです。


11.3.2.3 DEC COBOL固有の修飾子

以下のコマンド行修飾子はDEC COBOLでのみ使用できます。


11.3.2.4 /ALIGNMENT=PADDING

『OpenVMS Calling Standard』の呼び出し規則では,データ・フィールドが( その規則で定められている)特定のアドレスにアラインされている必要があります。 これと同じ規則に,すべてのデータ・レコードは, そのアラインメントの倍数でなくてはならないと定められています。

コンパイル・コマンド行で/ALIGNMENT=PADDINGが指定されていると, COBOLのグループ・データ項目はその自然な境界上にアラインされ, これらのグループ項目はアラインメントの倍数になるようにパッドが挿入されます。 Alphaのアラインメントとパッドの挿入が行われるときの基本データ項目のアラインメントの詳細については, 『DEC COBOL Reference Manual』を参照してください。


11.3.2.5 VAX COBOL固有の修飾子

表 11-6は,VAX COBOLに固有のコマンド行修飾子と修飾子オプションの組み合わせを示しています。 これらはDEC COBOLでは使用できません。

表 11-6 VAX COBOL固有の修飾子

修飾子 説明
/DESIGN 詳細設計として入力ファイルをコンパイラが処理を行かどうかを制御する。
/INSTRUCTION_SET[=option] VAX命令セットの異なる部分を使用して, シングル・チップVAXプロセッサ上で実行時の性能を改良する。
/STANDARD=OPENVMS_AXP DEC COBOLコンパイラでサポートされない言語機能に関する情報メッセージを出力する( 第11.3.2.7項および『VAX COBOLバージョン5.1 リリース・ノート』を参照)
/STANDARD=PDP11 COBOL-81コンパイラでサポートされない言語機能に関する情報メッセージを出力する
/WARNINGS=STANDARD DECによる拡張機能である言語機能に関する情報メッセージを出力する。DEC COBOLの同等な機能は/STANDARD=SYNTAX修飾子である


11.3.2.6 /STANDARD=V3

DEC COBOLは,VAX COBOLの/STANDARD=V3修飾子のインプリメンテーションがサポートしているいくつかの機能をサポートしていません。

/WARNING=ALL修飾子を使用すると,/STANDARD=V3の効果がわかりやすくなります。 特に,DEC COBOLは,/STANDARD=V3が指定されていると, 以下の情報メッセージを生成します。

/STANDARD=V3修飾子のVAX COBOLのインプリメンテーションの詳細については, 『VAX COBOL User Manual』の修飾子に関する付録を参照してください。


11.3.2.7 /STANDARD=OPENVMS_AXP

VAX COBOLバージョン5.1(およびそれ以上)では, /STANDARD=OPENVMS_AXP修飾子オプションを指定して, 既存のVAX COBOLプログラムの中の,OpenVMS Alphaシステム上のDEC COBOLでは使用できない言語要素を識別する新しいフラグ付けシステムを利用することができます。

/STANDARD=OPENVMS_AXPを指定すると,VAX COBOLコンパイラはDEC COBOLでは使用できない言語構成体を通知する情報メッセージを生成します( これらのメッセージを表示するためには,同時に/WARNINGS=ALLまたは /WARNINGS=INFORMATIONALも指定する必要があります)。この情報を使用して, DEC COBOLを使用する前にプログラムを変更することができます。

省略時の/STANDARD=NOOPENVMS_AXPでは,これらの情報メッセージは表示されません。


11.3.3 DEC COBOLとVAX COBOLの動作の違い

この項では,VAX COBOLとDEC COBOLの動作の違いと,DEC COBOLに固有の動作について説明します。


11.3.3.1 プログラム構造メッセージ

DEC COBOLコンパイラは,到達不能コードやその他のロジック・エラーに関して, VAX COBOLコンパイラよりも詳細なメッセージを生成することがあります。

次の例に,サンプル・プログラムと,DEC COBOLコンパイラが発行するメッセージを示します。

ソース・ファイル:

     IDENTIFICATION DIVISION.
     PROGRAM-ID. T1.
     ENVIRONMENT DIVISION.
     PROCEDURE DIVISION.
     P0.
         GO TO P1.
     P2.
         DISPLAY "This is unreachable code".
     P1.
         STOP RUN.

OpenVMS VAXシステム上でのメッセージ:

     $ COBOL /ANSI/WARNINGS=ALL T1.COB
     $
プログラムはコンパイルされます。VAX COBOLコンパイラはメッセージを出力しません。

OpenVMS Alphaシステム上でのメッセージ:

     $ COBOL/ANSI/OPTIMIZE/WARNINGS=ALL T1.COB
            P2.
     .......^
     %COBOL-I-UNREACH, code can never be executed at label P2
     at line number 7 in file DISK$YOURDISK:[TESTDIR]T1.COB;1
DEC COBOLは,どちらのオペレーティング・システム上でも最適化を行います。 最適化の1つの用途として, 呼び出されていないルーチンや到達不能な段落の分析を行うことができます。 コンパイラは,/NOOPTIMIZEを含むすべての最適化レベルで, 到達不能コードの分析を実行します(省略時には完全な最適化が行われるので, 上の例のようにコマンド行で修飾子やフラグを指定する必要はありません)。 VAX COBOLには/OPTIMIZE修飾子はありません。


11.3.3.2 プログラム・リスティングの違い

VAX COBOLコンパイラと,OpenVMS Alphaシステム上のDEC COBOLコンパイラには, 出力されるプログラム・リスティングに違いがあります。


11.3.3.2.1 マシン・コード

DEC COBOLでは,/NOOBJECT修飾子を指定すると, コンパイラはコード生成を抑止します。このため, リスティングでもオブジェクト・モジュールでも,マシン・コードは生成されません。 VAX COBOLでは,/NOOBJECTは.OBJの作成を抑止するだけです。この場合でも,VAX COBOLはオブジェクト・コードを生成するための作業を実行しますので, その結果をリスティングに出力することができます。 プログラム・リスティングにマシン・コードを出力したい場合は, /NOOBJECTを使用しないでください。


11.3.3.2.2 モジュール名

DEC COBOLでは,最初のプログラムの名前がコンパイル全体でのモジュール名になります。 VAX COBOLでは,モジュール名は個々のプログラムごとに変わります。


11.3.3.2.3 COPY文とREPLACE文

DEC COBOLコンパイラとVAX COBOLコンパイラは,COBOLプログラムのCOPY文の注釈を, 若干異なる形式で出力します。次の2つのコンパイラ・リスティングは,DEC COBOLとVAX COBOLでの,COBOLプログラムのリスティングにおける注釈の位置の違い( "L"という文字)を示しています。

DEC COBOLにおけるCOPY文のリスティング・ファイル:

              1 IDENTIFICATION DIVISION.
              2 PROGRAM-ID. DCOP1B.
              3 *
              4 *       This program tests the copy library file.
              5 *       with a comment in the middle of it.
              6 *       It should not produce any diagnostics.
              7         COPY
              8 *       this is the comment in the middle
              9                 LCOP1A.
L            10 ENVIRONMENT DIVISION.
L            11 INPUT-OUTPUT SECTION.
L            12 FILE-CONTROL.
L            13 SELECT FILE-1
L            14         ASSIGN TO "FILE1.TMP".
             15 DATA DIVISION.
             16 FILE SECTION.
             17 FD      FILE-1.
             18 01      FILE1-REC       PIC X.
             19 WORKING-STORAGE SECTION.
             20 PROCEDURE DIVISION.
             21 PE.     DISPLAY "***END***"
             22         STOP RUN.

VAX COBOLにおけるCOPY文のリスティング・ファイル:

      1         IDENTIFICATION DIVISION.
      2         PROGRAM-ID. DCOP1B.
      3        *
      4        *    This program tests the copy library file.
      5        *    with a comment in the middle of it.
      6        *    It should not produce any diagnostics.
      7             COPY
      8        *    this is the comment in the middle
      9                     LCOP1A.
     10L        ENVIRONMENT DIVISION.
     11L        INPUT-OUTPUT SECTION.
     12L        FILE-CONTROL.
     13L        SELECT FILE-1
     14L            ASSIGN TO "FILE1.TMP".
     15         DATA DIVISION.
     16         FILE SECTION.
     17         FD  FILE-1.
     18         01  FILE1-REC       PIC X.
     19         WORKING-STORAGE SECTION.
     20         PROCEDURE DIVISION.
     21         PE. DISPLAY "***END***"
     22             STOP RUN.


11.3.3.2.4 複数のCOPY文

DEC COBOLコンパイラとVAX COBOLコンパイラは, 複数のCOPY文が同じ行に含まれているCOBOLプログラムのリスティングでも, 若干異なる形式を使用します。次の2つのコンパイラ・リスティングは,DEC COBOLとVAX COBOLでの,COBOLプログラムの1つの行に複数の COPY文があったときの注釈の位置の違い("L"という文字)を示しています。

DEC COBOLにおける複数のCOPY文のリスティング・ファイル:

                   1 IDENTIFICATION DIVISION.
                   2 PROGRAM-ID. DCOP1J.
                   3 *
                   4 *       Tests copy with three copy statements on 1 line.
                   5 *
                   6 ENVIRONMENT DIVISION.
                   7 DATA DIVISION.
                   8 PROCEDURE DIVISION.
                   9 THE.
                  10         COPY LCOP1J. COPY LCOP1J. COPY LCOP1J.
     L            11         DISPLAY "POIUYTREWQ".
     L            12         DISPLAY "POIUYTREWQ".
     L            13         DISPLAY "POIUYTREWQ".
                  14         STOP RUN.

VAX COBOLにおける複数のCOPY文のリスティング・ファイル:

      1         IDENTIFICATION DIVISION.
      2         PROGRAM-ID. DCOP1J.
      3        *
      4        *    Tests copy with three copy statements on 1 line.
      5        *
      6         ENVIRONMENT DIVISION.
      7         DATA DIVISION.
      8         PROCEDURE DIVISION.
      9         THE.
     10             COPY LCOP1J.
     11L            DISPLAY "POIUYTREWQ".
     12C                         COPY LCOP1J.
     13L            DISPLAY "POIUYTREWQ".
     14C                                      COPY LCOP1J.
     15L            DISPLAY "POIUYTREWQ".
     16             STOP RUN.


11.3.3.2.5 COPY挿入文

COPY文が行の途中に文を挿入するときのコンパイラ・リスティング・ファイルは, DEC COBOLプログラムとVAX COBOLプログラムで異なります。 次の2つのコンパイラ・リスティングで,LCOP5D.LIBは "O"というテキストを含んでいます。DEC COBOLコンパイラは行をそのまま残し, COPYファイルの内容をソース行の下に出力します。VAX COBOLコンパイラは, 元のソース行を2つの部分に分割します。

DEC COBOLにおけるCOPY文のリスティング・ファイル:

     -----------------------------------------------------------
     13 P0.     MOVE COPY LCOP5D. TO ALPHA.
     L  14              "O"

VAX COBOLにおけるCOPY文のリスティング・ファイル:

     -----------------------------------------------------------
     13         P0. MOVE COPY LCOP5D.
     14L                 "O"
     15C                              TO ALPHA.


11.3.3.2.6 REPLACE文

COBOLソース文のREPLACEとDATE-COMPILEDに対する診断メッセージにより, コンパイラ・リスティング・ファイルにソース行の複数のインスタンスが含まれることになります。 DEC COBOLプログラムのREPLACE文では,DEC COBOLコンパイラが置換テキストに関するメッセージを発行する場合, そのメッセージは次のコンパイラ・リスティング・ファイルに示すように, プログラムの元のテキストに対応するものになります。

DEC COBOLにおけるREPLACE文のリスティング・ファイル:

                  18 P0.     REPLACE ==xyzpdqnothere==
                  19                         BY ==nothere==.
                  20
                  21         copy "drep3hlib".
     L            22         display xyzpdqnothere.
                  ...................1
            %COBOL-F-UNDEFSYM, (1) Undefined name
     LR           22     display nothere.

VAX COBOLプログラムでは, コンパイラ・メッセージは次のコンパイラ・リスティング・ファイルに示すように, 置換後のテキストに対応するものになります。

VAX COBOLにおけるREPLACE文のリスティング・ファイル:

     18         P0. REPLACE ==xyzpdqnothere==
     19                             BY ==nothere==.
     20
     21             copy "drep3hlib".
     22LR           display nothere.
                            1
          %COBOL-F-ERROR  349, (1) Undefined name


11.3.3.2.7 DATE COMPILED文

次の2つのコンパイラ・リスティング・ファイルは,DEC COBOLとVAX COBOLで DATE-COMPILED文を使用した場合の違いを示しています。

DEC COBOLにおけるDATE-COMPILED文のリスティング・ファイル:

                  33 *
                  34 date-compiled
                     .............1
     %COBOL-E-NODOT, (1) Missing period is assumed
                  34 date-compiled  16-Jul-1992.
                  35 security. none.

VAX COBOLにおけるDATE-COMPILED文のリスティング・ファイル:

        33        *
        34         date-compiled   16-Jul-1992.
                                1
     %COBOL-E-ERROR   65, (1) Missing period is assumed
        35         security. none.

REPLACE文とCOPY REPLACING文を使用したとき, コンパイラ・リスティング・ファイルにおける行番号はDEC COBOLとVAX COBOLで異なります。DEC COBOLは, 置換後の行番号を元のソース・テキストの行番号に対応させます。このため, それ以降の行番号は食い違うことになります。VAX COBOLは行番号を連続的に付けます。

次のソース・プログラムは,プログラムをDEC COBOLとVAX COBOLのどちらでコンパイルするかによって, コンパイラ・リスティング・ファイルの最後の行番号が変わります。

ソース・ファイル:

     REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==.
     A
     VERY
     LONG
     STATEMENT.
     DISPLAY "To REPLACE or not to REPLACE".

DEC COBOLにおけるREPLACE文のリスティング・ファイル:

     -----------------------------------------------------------------
     1 REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==.
     2 EXIT PROGRAM.
     6 DISPLAY "To REPLACE or not to REPLACE".

VAX COBOLにおけるREPLACE文のリスティング・ファイル:

     -----------------------------------------------------------------
     1 REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==.
     2 EXIT PROGRAM.
     3 DISPLAY "To REPLACE or not to REPLACE".


11.3.3.2.8  コンパイラ・リスティングと分割コンパイル

/SEPARATE_COMPILATION修飾子を指定すると,リスティングが個別に生成されます。 /SEPARATE_COMPILATIONを指定せずに コンパイルされた分割コンパイル・プログラム(SCP)では, リスティングは以下のようになります。

/SEPARATE_COMPILATIONを指定したときの結果は以下のようになります。 これはVAX COBOLが生成するリスティングと同じであることに注意してください。


11.3.3.3 出力のフォーマッティング

VFU-CHANNEL

DEC COBOLはVFU-CHANNELをサポートしていないので,VFUとVFP (Vertical Forms UnitユーティリティとVertical Forms Printing)を直接にはサポートしません。

制御バイト・シーケンス

DEC COBOLとVAX COBOLは, 似たような出力ファイル・フォーマッティングを実現するために, VFCファイルの中で異なる制御バイト・シーケンスを使用しなければならないことがあります。

画面のフォーマッティング

DEC COBOLとVAX COBOLは,似たような画面フォーマッティングを実現するために, ACCEPTとDISPLAYで異なるエスケープ・シーケンスを使用しなければならないことがあります。

VFCファイル

VFCフォーマットのREPORT WRITERまたはLINAGEファイルは,通常は TYPEコマンドを使用するか,プリントアウトして表示します。電子メールで送信したり, エディタで読み込んだりするためには,コンパイル・コマンド行で /NOVFCを指定してコンパイルを行います。

1つの.COBソース・ファイルでオープンされるすべてのREPORT WRITERおよび LINAGEファイルは,同じフォーマットを持つことになります(VFCまたは NOVFC)。省略時はVFCです。/NOVFC修飾子が指定されていると, 各ソース・ファイルに対してNOVFC条件が設定されます。次に例を示します。

     $ COBOL A/NOVFC,B/VFC,C/NOVFC,D
この例で,ソース・ファイルBとDはVFCフォーマットでレポートを生成します (ソース・ファイル・リスト項目がプラス(+)記号で区切られている場合には動作が異なります)。


11.3.3.4 DEC COBOLとVAX COBOLの文の違い

以下のCOBOL文は,DEC COBOLとVAX COBOLで異なる動作をします。


11.3.3.4.1 ACCEPTおよびDISPLAY文

プログラムの中でACCEPTまたはDISPLAYの拡張機能を使用していると, DEC COBOLとVAX COBOLの動作に違いが生じることがあります。この場合, DEC COBOLは以下のように動作します。


11.3.3.4.2 EXIT PROGRAM句

呼び出されたプログラムの中のEXIT PROGRAMはPERFORM範囲をリセットしません。 VAX COBOLでは,EXIT PROGRAMで脱出した後にプログラムに再び入ったとき, 以前の実行におけるすべてのPERFORM範囲が満たされています。


11.3.3.4.3 LINAGE句

DEC COBOLとVAX COBOLでは,LINAGE文で大きな値を扱ったときの動作が異なります。 WRITE文のADVANCING句の行カウントが127よりも大きいと,DEC COBOLは1行進みますが, VAX COBOLでの結果は定義されていません。


11.3.3.4.4 MOVE文

符号なし計算フィールドは, 符号付き計算フィールドよりも大きな値を含むことができます。ANSI COBOL規格に従い, 符号なし項目の値は必ず正の値として扱われなくてはなりません。しかし, DEC COBOLは符号なし項目を正の値として扱いますが,VAX COBOLはこれを符号付き項目として扱います。このため,稀ではありますが, MOVE文や算術文の中で符号なしデータ項目と符号付きデータ項目を混在させたときに, VAX COBOLとDEC COBOLで異なる結果が得られることがあります。 例 11-1では, VAX COBOLとDEC COBOLで異なる値が得られます。

例 11-1 符号付きと符号なしの違い

     IDENTIFICATION DIVISION.
     PROGRAM-ID. SHOW-DIFF.
     ENVIRONMENT DIVISION.
     DATA DIVISION.
     WORKING-STORAGE SECTION.
     01 A2       PIC 99    COMP.
     01 B1       PIC S9(5) COMP.
     01 B2       PIC 9(5)  COMP.
     PROCEDURE DIVISION.
     TEST-1.
         MOVE 65535 TO A2.
         MOVE A2 TO B1.
         DISPLAY B1 WITH CONVERSION.
         MOVE A2 TO B2.
         DISPLAY B2 WITH CONVERSION.
         STOP RUN.
      

VAX COBOLの結果:

     B1 =  -1
     B2 =  -1

DEC COBOLの結果:

     B1 =  65535
     B2 =  65535


11.3.3.4.5 SEARCH文

DEC COBOLとVAX COBOLバージョン5.0以上では,SEARCH文の中でEND-SEARCH句とNEXT SENTENCE句を同時に使用することはできません。一方を使用すると, もう一方は使用できません。この規則はANSI COBOL規格に則ったものですが, バージョン5.0よりも前のVAX COBOLには適用されません。


11.3.3.5 システムの戻りコード

例 11-2は,DEC COBOLとVAX COBOLで異なる動作をする,規則に反するコーディングを示しています。 この動作の違いは,VAXアーキテクチャとAlphaアーキテクチャの, レジスタ・セットにおけるアーキテクチャ上の違いが原因です。 Alphaには浮動小数点データ型専用のレジスタのセットがあります。 例 11-2に示されているようなコーディング違反は, Alphaがサポートしているどの浮動小数点データ型にも影響を及ぼします。

例 11-2 戻り値の誤ったコーディング

     IDENTIFICATION DIVISION.
     PROGRAM-ID. BADCODING.
     ENVIRONMENT DIVISION.

     DATA DIVISION.
     FILE SECTION.

     WORKING-STORAGE SECTION.

         01  FIELDS-NEEDED.
             05 CYCLE-LOGICAL      PIC X(14) VALUE 'A_LOGICAL_NAME'.

         01  EDIT-PARM.
             05  EDIT-YR            PIC X(4).
             05  EDIT-MO            PIC XX.

         01  CMR-RETURN-CODE        COMP-1 VALUE 0.

     LINKAGE SECTION.

         01 PARM-REC.
            05 CYCLE-PARM         PIC X(6).
            05 RETURN-CODE        COMP-1 VALUE 0.

     PROCEDURE DIVISION USING PARM-REC GIVING CMR-RETURN-CODE.

     P0-CONTROL.

         CALL 'LIB$SYS_TRNLOG' USING BY DESCRIPTOR CYCLE-LOGICAL,
                                     OMITTED,
                                     BY DESCRIPTOR CYCLE-PARM
                                     GIVING RETURN-CODE.

         IF  RETURN-CODE  GREATER 0
           THEN

             MOVE RETURN-CODE TO CMR-RETURN-CODE
             GO TO P0-EXIT.
 
         MOVE  CYCLE-PARM  TO  EDIT-PARM.

         IF  EDIT-YR  NOT  NUMERIC
           THEN
             MOVE  4  TO CMR-RETURN-CODE, RETURN-CODE.

         IF  EDIT-MO  NOT NUMERIC
           THEN
             MOVE  4  TO  CMR-RETURN-CODE, RETURN-CODE.

         IF  CMR-RETURN-CODE GREATER 0
                      OR
             RETURN-CODE GREATER 0
           THEN
             DISPLAY "***************************"
             DISPLAY "** BADCODING.COB  **"
             DISPLAY "** A_LOGICAL_NAME> ", CYCLE-PARM, "   **"
             DISPLAY "***************************".
          P0-EXIT.
          EXIT PROGRAM.

例 11-2では, システム・サービス呼び出しの戻り値が,実際にはバイナリ(COMP) でなければならないのに誤ってF浮動小数点値と定義されています。このプログラマは, ルーチンからのすべての戻り値はレジスタR0に返されるという VAXアーキテクチャの動作を利用していました。VAXアーキテクチャでは, 整数と浮動小数点数のレジスタが別々に存在しているわけではありません。一方, Alphaアーキテクチャは,浮動小数点データとバイナリ・データについて, 別々のレジスタ・セットを定義しています。 浮動小数点値を返すルーチンはレジスタF0を使用し, バイナリ値を返すルーチンはレジスタR0を使用します。

DEC COBOLコンパイラには,外部ルーチンが返すデータ型を知る手段はありません。 プログラマは,CALL文のGIVING-VALUE項目に対して, 正しいデータ型を指定する必要があります。Alphaアーキテクチャでは, 浮動小数点データ項目に異なるレジスタのセットが使用されるため, 生成されるコードはR0ではなくF0をテストします。

サンプル・プログラムのコード・シーケンスにおけるF0の値は予測できません。 このコーディングでも期待される動作が得られることがありますが, ほとんどの場合は失敗します。


11.3.3.6 診断メッセージ

プログラミングに使用しているプラットフォームによって, いくつかの診断メッセージは異なる意味と結果を持っています。


11.3.3.7 倍精度データ項目の記憶形式

VAXアーキテクチャとAlphaアーキテクチャでのD浮動小数点データの記憶形式の違いにより, 実行結果の評価の際に,若干異なる答えが得られます。この差は, 最終的な結果を出力するまで何回D-floatの演算を行うかに依存します。これは, COMP-2型のデータをファイルに出力し,OpenVMS Alphaシステム上で動作するプログラムが生成する出力を OpenVMS VAXシステムが生成する出力と比較しようとした場合に問題になることがあります。

浮動小数点データ型の記憶形式の詳細については,『Alpha Architecture Handbook』 を参照してください。


11.3.3.8 データ項目のハイオーダー切り捨て

DEC COBOLはVAX COBOLよりも, データ項目のハイオーダー切り捨てが生じる可能性に敏感に反応します。次の例を /WARNINGS=ALL修飾子を指定してコンパイルした場合を考えます。

     WORKING-STORAGE SECTION.
     01 K4 PIC 9(9) COMP.

     PROCEDURE DIVISION.
     01-MAIN-SECTION SECTION.
     01-MAIN.
         DISPLAY K4 WITH CONVERSION.
DEC COBOLは,VAX COBOLとは異なり,次のメッセージを出力します。
     DISPLAY K4 WITH CONVERSION.
     ............^
     Possible high-order truncation ...

RELATIVEファイル操作でも,この診断が生成されることがあります。


11.3.3.9 ファイルの状態値

ファイルをEXTENDモードでオープンし,これをREWRITEしようとすると,DEC COBOLとVAX COBOLは異なったファイル状態値を返します。この未定義の操作に対し, DEC COBOLはファイル状態49 (互換性のないオープン・モード)を返し,VAX COBOLはファイル状態43 (対応するREAD文がない)を返します。


11.3.3.10 参照キー

OpenVMS Alphaでは,ISAMファイルに動的にアクセスする場合, 参照キーがセカンダリ・キーであると,WRITE,DELETE,または REWRITEを実行したときに, 参照キーがセカンダリ・キーからプライマリ・キーに変更されます。


11.3.3.11 RMS特殊レジスタ

プラットフォームによって,RMS特殊レジスタの動作が変わることがあります。

ロードの違い

実行時に,DEC COBOLとVAX COBOLは, 一部の入出力操作でRMS特殊レジスタの値を違った形で更新します。DEC COBOLのランタイム・システムは,RMS操作を試みる前に, いくつかの入出力エラー条件のチェックを行います。エラー条件が発生していると, DEC COBOLのランタイム・システムはRMS操作を試みず, RMS特殊レジスタは以前の値をそのまま持ち続けます。VAX COBOLのランタイム・システムは,入出力操作のチェックを行わずに, すべてのRMS操作を実行します。このため, ランタイム・システムは入出力操作のたびに,RMS特殊レジスタの値を必ず更新します。

たとえば,ファイルのオープンに成功しなかった場合,それ以降のDEC COBOLレコード操作(READ,WRITE,START,DELETE,REWRITE,またはUNLOCK)は RMSを呼び出すことなく失敗します。このため,OPEN操作の失敗の際に RMS特殊レジスタに格納された値は, 同じファイルに対してレコード操作の失敗を重ねても,変更されずに残っています。 これと同じ操作をVAX COBOLで行うと,つねにRMSが呼び出されます。これにより, RMSは未定義の操作を試み,RMS特殊レジスタに新しい値を返します。

RMS特殊レジスタがDEC COBOLアプリケーションとVAX COBOLアプリケーションで異なる値を持つ場合がもう1つあります。 DEC COBOLファイルに対するRMS操作が成功すると,RMS特殊レジスタは必ず RMS完了コードを含んでいます。VAX COBOLファイルに対するRMS操作が成功すると, RMS特殊レジスタは通常はRMS完了コードを含んでいますが, COBOL固有の完了コードを含んでいることもあります。

VAX COBOLとの違い

DEC COBOLでは,VAX COBOLとは異なり, 以下に示すコンパイラ生成変数をユーザ変数として宣言することはできません。

RMS_STS
RMS_STV
RMS_CURRENT_STS
RMS_CURRENT_STV


11.3.3.12 共用可能イメージの呼び出し

DEC COBOLとVAX COBOLは, 共用可能イメージとしてインストールされた副プログラムを呼び出すときの動作が異なります。 DEC COBOLでは, CALL文で指定するプログラム名ではリテラルまたはデータ名が使用できます( CANCEL文でも同じです)。VAX COBOLでは,CALL文(またはCANCEL文) で指定するプログラム名はリテラルでなくてはなりません。また, 共用可能イメージとしてインストールされたVAX COBOLプログラムは, 外部ファイルを含むことができません(共用可能イメージの詳細については, 『OpenVMS Linker Utility Manual』を参照してください)。


11.3.3.13 共通ブロックの共用

複数のプロセスで共通ブロックを共用する場合には,DEC COBOLプログラムをリンクするときの問題を防ぐために,PSECT属性を SHRに設定します(省略時の値は,OpenVMS AlphaシステムではSHR,OpenVMS VAXシステムではNOSHRです)。また,次のように, 共用可能イメージのリンカ・オプション・ファイルにSYMBOL_VECTORを追加します。

     SYMBOL_VECTOR = (psect-name = PSECT)
詳細については,『OpenVMS Linker Utility Manual』を参照してください。


11.3.3.14 算術演算

DEC COBOLとVAX COBOLでは,プラットフォームによって, いくつかの算術演算の動作が異なります。


11.3.4  言語とプラットフォームの間でのファイルの互換性

別のプログラミング言語で作成されたファイルは, 言語と文字セットの互換性がないために,特殊な処理が必要な場合があります。 最もよく見られる互換性上の問題は, データ型とデータ・レコードのフォーマットです。 以下の点に注意してください。

データ型の違い

データ型はプログラミング言語およびユーティリティによって異なります。 たとえば,DEC Fortranはパックされた10進データ型をサポートしていないので, COBOLファイルの中のPACKED-DECIMALデータを簡単には利用できません。

データ型の互換性の問題を回避するためには,以下のテクニックが利用できます。

次の例では,入力ファイルはEBCDICで作成されています。この場合, OpenVMS Alphaオペレーティング・システム上では, COBOL以外のどの言語でも処理が難しいファイルが作成されてしまいます。

     ENVIRONMENT DIVISION.
     CONFIGURATION SECTION.
     SPECIAL-NAMES.   ALPHABET FOREIGN-CODE IS EBCDIC.
     INPUT-OUTPUT SECTION.
     FILE-CONTROL.
          SELECT INPUT-FILE ASSIGN TO "INPFIL"
                 CODE-SET IS FOREIGN-CODE.
                 .
                 .
                 .


11.3.5 予約語

以下に,DEC COBOLには含まれているが,VAX COBOLには含まれていない X/OPENの予約語を示します。

AUTO EXCLUSIVE REQUIRED
AUTOMATIC FOREGROUND-COLOR RETURN-CODE
BACKGROUND-COLOR FULL REVERSE-VIDEO
BLINK HIGHLIGHT SECURE
EOL LOWLIGHT UNDERLINE
EOS MANUAL

コマンド行修飾子/RESERVED_WORDS=NOXOPENを指定すると, これらの予約語は予約語でない単語として扱われます。


11.3.6 デバッガ・サポートの違い

DEC COBOLのデバッガ・サポートは,VAX COBOLといくつかの点で異なります。


11.3.7 DECset/LSEサポートの違い

DEC COBOLはDECset/LSE Program Design Facility,/DESIGN修飾子, デザイン・コメント,および疑似コード・プレースホルダをサポートしていません。


11.3.8 DBMSサポート

DEC COBOLのOracle DBMSサポートには,プログラムをDEC COBOLとVAX COBOLのどちらで開発しているかに応じて,いくつかの違いがあります。 DEC COBOLでマルチストリームOracle DBMS DMLを使用する際には, 異なるソース・ファイルからは異なるスキーマまたはストリームにアクセスする必要があります。


11.4 Digital Fortran for OpenVMS Alphaと OpenVMS VAXシステムとの互換性

この節では,Digital Fortran for OpenVMS AlphaシステムとDigital Fortran 77 for OpenVMS VAX Systems (以前の名前はVAX FORTRAN) の互換性について,次の分野に分けて説明します。


11.4.1 言語機能

Digital Fortran for OpenVMS Alphaには,ANSI FORTRAN-77とISO/ANSI Fortran 9xの標準機能が含まれており,さらにこれらのFortran標準機能に対して, Digital Fortran 77 for OpenVMS VAX Systemsの拡張機能も含まれています。 たとえば,次の拡張機能が含まれています。

拡張機能と言語機能の詳細については, Fortran言語の参照マニュアルを参照してください。このマニュアルには, FORTRAN-77標準の拡張機能が示されています。


注意
Digital Fortran for OpenVMSでは,DEC Fortran for OpenVMS Alphaと ISO/ANSI Fortran 90標準でサポートされる FORTRAN-77言語の拡張機能の大部分がサポートされます。互換性については, 『DEC Fortran 90 User Manual for OpenVMS Alpha Systems』を参照してください。

この節のこの後の部分では,Digital Fortran 77 for OpenVMS VAX Systemsと Digital Fortran for OpenVMS Alpha固有の言語機能,各言語で共用されるものの, 異なる方法で解釈される言語機能,Digital Fortran 77 for OpenVMS VAX Systemsには適用されないDigital Fortran for OpenVMS Alpha制限事項, データを移植する場合の検討事項について説明します。


11.4.1.1  Digital Fortran for OpenVMS Alpha固有の言語機能

次の言語機能はDigital Fortran for OpenVMS Alphaでは提供されますが, Digital Fortran 77 for OpenVMS VAX Systemsのバージョン6.4ではサポートされません。


注意
Digital Fortran 90コンパイラを使用しているユーザに対する注意事項ですが, ANSI/ISO Fortran 90標準に準拠したいくつかの機能が Digital Fortran 77では使用できません。

Digital Fortran言語機能についての説明は,『Fortran language reference manual』を参照してください。


11.4.1.2  Digital Fortran 77 for OpenVMS VAX Systems固有の言語機能

次の言語機能はDigital Fortran 77 for OpenVMS VAX Systemsでは使用できますが, Digital Fortran for OpenVMS Alphaではサポートされません。

Digital Fortran 77 for OpenVMS VAX Systemsの特定の機能は, Digital Fortran for OpenVMS Alphaでは使用が制限されているか, またはまったく提供されません。

次の言語機能はDigital Fortran 77 for OpenVMS VAX Systemsでは使用できますが, AlphaアーキテクチャとVAXアーキテクチャとの違いにより,Digital Fortran for OpenVMS Alphaではサポートされません。


11.4.1.3 解釈方法の相違

次の言語機能は,Digital Fortran 77 for OpenVMS VAX SystemsとDigital Fortran for OpenVMS Alphaとで異なる方法で解釈されます。


11.4.2 コマンド行修飾子

Digital Fortran for OpenVMS AlphaとDigital Fortran 77 for OpenVMS VAX Systemsでは,大部分の修飾子が共通ですが, 一部の修飾子はどちらか一方のプラットフォームでしか使用できません。 この節では,Digital Fortran for OpenVMS Alphaと Digital Fortran 77 for OpenVMS VAX Systemsのコマンド行の修飾子の相違点を要約します。

Digital Fortran for OpenVMS Alphaのコンパイル・コマンドとオプションについての詳しい説明は, 『DEC Fortran User Manual for OpenVMS AXP Systems』を参照してください。 Digital Fortran 77 for OpenVMS VAX Systemsのコンパイル・コマンドとオプションについての詳しい説明は 『DEC Fortran User Manual for OpenVMS VAX Systems』を参照してください。

VAXシステムまたはAlphaシステムでコンパイルを開始するには, FORTRANコマンドを使用します。Alphaシステムでは,F90コマンドを使用してDigital Fortran 90コンパイラによるコンパイルを開始します。


11.4.2.1  Digital Fortran for OpenVMS Alpha固有の修飾子

表 11-7はDigital Fortran for OpenVMS Alphaコンパイラ修飾子のうち,Digital Fortran 77 for OpenVMS VAX Systemsのオプションがなく,Digital Fortran 77 for OpenVMS VAX Systemsのバージョン6.4でサポートされない修飾子を示しています。

表 11-7 Digital Fortran 77 for OpenVMS VAX Systems にない
Digital Fortran for OpenVMS Alpha 修飾子
:(クリックで表示)


11.4.2.2  Digital Fortran 77 for OpenVMS VAX Systems固有の修飾子

この節では,Digital Fortran 77 for OpenVMS VAX Systemsコンパイラのオプションのうち, Digital Fortran for OpenVMS Alpha修飾子に対応するオプションがないものをまとめます。

表 11-8は,Digital Fortran 77 for OpenVMS VAX Systemsのバージョン6.4固有のコンパイル・オプションを示しています。

表 11-8 Digital Fortran for OpenVMS Alpha でサポートされないDigital Fortran 77 for OpenVMS VAX Systems 修飾子

Digital Fortran 77 for OpenVMS VAX
Systems修飾子
説明
/BLAS=(INLINE,MAPPED) Digital Fortran 77 for OpenVMS VAX Systemsが Basic Linear Algebra Subroutines (BLAS)を認識し, これらをインラインまたはマッピングするかどうかを指定する。 Digital Fortran 77 for OpenVMS VAX Systemsの場合にのみ使用できる。
/CHECK=ASSERTIONS アサーション・チェックを許可または禁止する。 Digital Fortran 77 for OpenVMS VAX Systemsに対してのみ使用できる。
/DESIGN=[NO]COMMENTS
/DESIGN=[NO]PLACEHOLDERS
設計情報を確認するためにプログラムを解析する。
/DIRECTIVES=DEPENDENCE 指定されたコンパイラ・ディレクティブがコンパイル時に使用されるかどうかを指定する。 Digital Fortran 77 for OpenVMS VAX Systemsに対してのみ使用できる。
/PARALLEL=(MANUALまたは
AUTOMATIC)
並列処理をサポートする。
/SHOW=(DATA_DEPENDENCIES,
DICTIONARY,LOOPS)
リスト・ファイルに次の情報を登録するかどうかを制御する。

  • ベクタ化または自動分解を禁止するデータ依存性と, 依存解析の対象とならないループに関する診断情報(DATA_DEPENDENCIES)。

  • インクルードしたCommon Data Dictionaryレコードからのソース・ライン (DICTIONARY)。

  • コンパイル後のループ構造に関するレポート(LOOPS)。
DATA_DEPENDENCIESおよびLOOPSキーワードはDigital Fortran 77 for OpenVMS VAX Systemsに対してのみ使用できる。
/VECTOR ベクタ処理を要求する。 Digital Fortran 77 for OpenVMS VAX Systemsに対してのみ使用できる。
/WARNINGS=INLINE コンパイラが組み込みルーチンに対する参照のインライン・コードを生成できないときに, 情報診断メッセージを印刷するかどうかを制御する。Digital Fortran 77 for OpenVMS VAX Systemsに対してのみ使用できる。

要求された(手作業)分解に関連するすべてのCPAR$ディレクティブと特定の CDEC$ディレクティブ,およびそれに関連する修飾子またはキーワードも Digital Fortran 77 for OpenVMS VAX Systems固有です。『DEC Fortran Language Reference Manual』を参照してください。

Digital Fortran 77 for OpenVMS VAX Systems のコンパイル・コマンドとオプションに関する詳しい説明は『DEC Fortran User Manual for OpenVMS VAX Systems』を参照してください。


11.4.3  トランスレートされた共有可能イメージとの相互操作性

Digital Fortran for OpenVMS Alphaを使用すれば,イメージ起動時(実行時) にトランスレートされたイメージと相互操作可能なイメージを作成できます。

トランスレートされた共有可能イメージの使用を可能にするには, 次の操作を実行します。

作成された実行可能イメージには, 最終的な実行可能イメージが共有可能イメージと相互操作できるようなコードが含まれます。 たとえば,Digital Fortran 77 for OpenVMS VAX Systems RTL (FORRTL)が Digital Fortran for OpenVMS Alpha RTL (DEC$FORTRTL) と協調動作できるようにするためのコードが含まれます。ネイティブなプログラム (Digital Fortran for OpenVMS Alpha RTL)とトランスレートされたプログラム( Digital Fortran 77 for OpenVMS VAX Systems RTL)は,ファイルをオープンする RTLがそのファイルのクローズも実行するのであれば, 同じユニット番号に対して入出力を実行できます。

プログラムでは,組み込み名を使用しなければならず(接頭辞を除く), 完全な名前(fac$xxxx)でルーチンを呼び出すわけではありません。

プログラムは,完全な( fac$xxxx)名前によってルーチンを呼び出すのではなく, 内部名(接頭辞を除く名前)を使用しなければなりません。ただし, fac$xxxxという名前を使用できる1つの例外があります。 トランスレートされたイメージ・プログラムでは,FOR$RABシステム関数を EXTERNALとして宣言できます。ネイティブなAlphaプログラムでは, FOR$RABを内部関数として使用しなければなりません。


11.4.4  Digital Fortran 77 for OpenVMS VAX Systemsデータの移植

レコード・タイプは,Digital Fortran 77 for OpenVMS VAX Systemsでも Digital Fortran for OpenVMS Alphaでも同じです。必要な場合には, EXCHANGEコマンドと/NETWORK修飾子および /TRANSFER=BLOCK修飾子を使用してデータを移植してください。 コピー操作でファイルをStream_LFフォーマットに変換するには, /TRANSFER=BLOCKのかわりに/TRANSFER=(BLOCK,RECORD_SEPARATOR=LF)を使用するか, またはEXCHANGEコマンドで/FDL修飾子を使用して, レコード・タイプや他のファイル属性を変更します。

フォーマッティングされていない浮動小数点データを変換しなければならない場合には, Digital Fortran 77 for OpenVMS VAX Systemsプログラム(VAXハードウェァ)が REAL*4またはCOMPLEX*8データをF浮動小数点フォーマットで格納し,REAL*8または COMPLEX*16データをD浮動小数点またはG浮動小数点フォーマットで格納し, REAL*16データをH浮動小数点フォーマットで格納することを念頭においてください。 Digital Fortran for OpenVMS Alphaプログラム( Alphaハードウェアで実行されるプログラム)は,REAL*4,REAL*8,COMPLEX*8, およびCOMPLEX*16データをそれぞれ, 表 11-9に示すフォーマットのいずれかで格納します。

表 11-9  VAXシステムとAlphaシステムでの浮動小数点データ

データ宣言 VAXフォーマット Alphaフォーマット
REAL*4とCOMPLEX*8 VAX F浮動小数点フォーマット IEEE S浮動小数点またはVAX F浮動小数点フォーマット
REAL*8とCOMPLEX*16 VAX D浮動小数点またはG浮動小数点フォーマット IEEE T浮動小数点,VAX D浮動小数点[1] またはVAX G浮動小数点フォーマット
REAL*16とCOMPLEX*32 VAX H浮動小数点 Digital Fortran for OpenVMS Alphaではサポートされない。 おそらくRTLルーチンCVT$CONVERT_FLOATを使用して変換しなければならない。
[1] Alphaシステムでは,演算を実行するときに VAX D浮動小数点フォーマット使用することは望ましくない。このような場合には, Digital Fortran for OpenVMS Alphaの変換ルーチンを使用する変換プログラムで D浮動小数点フォーマットをIEEE T浮動小数点(またはVAX G浮動小数点)フォーマット に変換することを考慮しなければならない。


11.5  DEC Pascal for OpenVMS AlphaシステムとVAX Pascalの互換性

この節では,DEC Pascalと他のDECのPascalコンパイラを比較し, VAXシステムとAlphaシステムのDEC Pascalの違いを示します。 これらの機能の完全な説明については,『DEC Pascal Language Reference Manual』 を参照してください。


11.5.1 DEC Pascalの新機能

表 11-10は以前VAX Pascal では提供されていなかった機能を示します。

表 11-10 DEC Pascal の新機能 :(クリックで表示)


11.5.2 動的条件ハンドラの設定

DEC Pascalでは,LIB$ESTABLISHの代わりに使用するために,ESTABLISHと REVERTという組み込みルーチンが提供されます。 LIB$ESTABLISHを宣言して使用しようとすると,コンパイル時に警告が出されます。


11.5.3  レコード・ファイルに対する省略時のアラインメント規則の変更

DEC Pascalでは,フィールド・アラインメントの位置や,POS,ALIGNED, DATA属性およびデータ・コンパイラ切り替えの位置を上書きすることが可能です。


11.5.4 あらかじめ宣言されている名前の使用方法

互換性を維持するためにDEC Pascalは,表 11-11 に示されるあらかじめ宣言されている名前を含むプログラムをコンパイルすることができますが, 弊社では以下のように識別子を置き換えて使用されることをお勧めします。

表 11-11  あらかじめ宣言されている名前の使用方法

識別子 望ましい使用法
ADDR ADDRESS機能をご使用ください
ALFA TYPE ALFA = PACKED ARRAY [1..10]OFCHARと同じ
BITAND UAND文と同じ
BITNOT UNOT文と同じ
BITOR UOR文と同じ
BITXOR UXOR文と同じ
EXIT BREAK文と同じ
FIRST,FIRSTOF LOWER機能と同じ
HBOUND UPPER機能と同じ
IN_RANGE サブレンジ・チェックができない場合のみ有効。 IN_RANGE(X)は(X>LOWER(X))AND(X<UPPER(X))と同じ
INTSET TYPE INTSET = SET OF 0 .. 255;と同じ
LAST, LASTOF UPPER機能と同じ
LBOUND LOWER機能と同じ
LSHFT LSHIFT機能と同じ
MESSAGE WRITELN(ERR,expression)と同じ
NEXT CONTINUE文と同じ
NULL empty文と同じ
REMOVE DELETE_FILEプロシージャと同じ
RSHFT RSHIFT機能と同じ
SIZEOF SIZE機能と同じ
STLIMIT コンパイルするが,エラーを返さない
UNIV_PTR TYPE UNIV_PTR=POINTER;と同じ


11.5.5 プラットフォームに依存する機能

DEC Pascalはコンパイルされたプラットフォームと同じプラットフォーム( オペレーティング・システムとハードウェアの組み合わせ) でのみ環境ファイルを使用できます。

さらに,VAXシステムでのみサポートされるDEC Pascalの機能を以下に示します。

以下にAlphaシステムでのみサポートされるDEC Pascalの機能を示します。


11.5.6 古い機能

この節では,サポートされてはいても使用が勧められない機能について説明します。 これらは,弊社の他のPascalコンパイラとの互換性のためにのみ提供されます。


11.5.6.1 /OLD_VERSION修飾子

/OLD_VERSION修飾子は,コンパイラにVAX Pascalバージョン1.0 の言語の定義を使用して,VAX Pascalバージョン1.0 とその後のバージョンの違いを解決させます。この修飾子を指定すれば, 既存のプログラムを引き続き使えます。


11.5.6.2 /G_FLOATING修飾子

/G_FLOATING修飾子は,コンパイラにDOUBLE型の値に対して G_floatingの表現と命令を使用することを指定します。 [[NO]G_FLOATING]属性はOpenVMS VAXシステムでも OpenVMS Alphaシステムでも指定できます。

/G_FLOATING修飾子の使用が, ソース・プログラムやモジュール内で指定された倍精度属性と矛盾するときは, エラーとなります。 倍精度数の受け渡しを行うルーチンやコンパイル単位間で複数の浮動小数点フォーマットを混在させることはできません。 すべてのOpenVMS VAXプロセッサがG浮動小数点データ型をサポートするわけではありません。

これより前に,コンパイラが浮動小数点データ型を指定する方法だった, /FLOAT修飾子の説明も参照してください。/FLOAT修飾子は, AlphaシステムのみでサポートされるIEEE浮動小数点データ型も選択できます。


11.5.6.3 OVERLAID属性

OVERLAID属性はコンパイル単位で宣言された変数へ, 記憶領域がどのように割り当てられるかを指定します。 コンパイル・ユニットでOVERLAIDが指定されると, プログラムやモジュール・レベルで宣言された変数は(STATICまたは PSECT属性を持たない限り),すべての他の上書きされたコンパイル・ユニットで, 静的変数の記憶領域を上書きします。

この属性は,VAX Pascalバージョン1.0 で提供された分割コンパイル機能を用いているプログラムでの使用のみを対象としています。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]