日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページ・サイズの拡大に対するアプリケーションの対応
第 6 章:共有データの整合性の維持
第 7 章:アプリケーション・データ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:アプリケーションのトランスレート
第 10 章: ネイティブなイメージとトランスレートされたイメージの間の相互操作性の確認
第 11 章:OpenVMS Alpha コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム
OpenVMS Alpha オペレーティング・システム | HPE 日本

OpenVMS Alpha
オペレーティング・システム
OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行


目次 索引



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

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

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

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

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 などが格納されています。

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

  • RMS 構造体
    以前は,FAB,NAM,RAB,XABALL などの RMS 構造体は,たとえば "struct RAB {..." などのように,適切な .H ファイルで定義されていました。 OpenVMS Alpha バージョン 1.0 で提供される .H ファイルでは,これらの構造体は "struct rabdef {..." として定義されています。この違いを補正するために,"#define RAB rabdef" という形式の行が追加されました。しかし,この変更のためにソースを変更しなければならない状況が 1 つだけあります。これらの構造体のいずれかを指すポインタを格納したプライベート構造体を使用しており,そのプライベート構造体が RMS 構造体を定義する前に定義されている場合には (ただし,使用されません),次のようなコンパイル時エラーが発生します。


    %CC-E-PASNOTMEM, In this statement, "rab$b_rac" is not a member of "rab". 
    


    このエラーを回避するには,プライベート構造体より前に RMS 構造体が定義されるように,ソース・ファイルを変更します。通常は, "#include" 文を移動します。

  • LIB (特権インタフェース) 構造体
    これまで歴史的には,LIB の 3 つの構造体 (NFBDEF.H,FATDEF.H,および FCHDEF.H) は .H ファイルとして提供されてきました。 OpenVMS Alpha バージョン 1.0 とバージョン 1.5 では,これらのファイルは .H ファイルとして提供されていました (新しい SYS$STARLET_C.TLB にはありません)。 OpenVMS Alpha 7.2 では,すべての LIB 構造体と定義を格納した SYS$LIB_C.TLB ファイルが追加されました。これらの 3 つの .H ファイルは .TLB の一部として提供されるようになり,個別には提供されなくなりました。これらのファイルで既存の変則的な状態を保存しようとする試みは行われていないため,ソースを変更しなければならない可能性があります。LIB からの構造体と定義は特権インタフェースのみに対するものであり,したがって変更が必要です。

  • "variant_struct" と "variant_union" の使用 新しい .H ファイルでは,variant_struct と variant_union が常に使用されます。一方,以前は一部の構造体が struct と union を使用していました。したがって,データ構造体内のフィールドを参照するときに,中間の構造体名を指定することはできません。
    たとえば,


    AlignFaultItem.PC[0] = DataPtr->afr$r_pc_data_overlay.afr$q_fault_pc[0]; 
    


    という文は,次のようになります。


    AlignFaultItem.PC[0] = DataPtr->afr$q_fault_pc[0]; 
    

  • メンバのアライメント
    SYS$STARLET_C.TLB の各 .H ファイルは, "#pragma member_alignment" の状態を保存し,復元します。

  • 表記規則 SYS$STARLET_C.TLB の .H ファイルは,以前は VAXCDEF.TLB で部分的にしか準拠していなかった表記規則に準拠しています。すべての定数 (#defines) は大文字の名前を使用します。すべての識別子 (ルーチン,構造体メンバなど) は小文字の名前を使用します。VAXCDEF.TLB との違いがある場合には,互換性を維持するために以前のシンボル名も使用できますが,今後は新しい表記法に従うようにしてください。

  • .H ファイルにアクセスするための Librarian ユーティリティの使用
    OpenVMS Alpha をインストールするときに,SYS$STARLET_C.TLB の内容は別の .H ファイルに抽出されません。DEC C コンパイラは, #include 文の形式とは無関係に,SYS$STARLET_C.TLB の内部からこれらのファイルにアクセスします。個々の .H ファイルを調べる場合には,次の例に示すように,Librarian ユーティリティを使用できます。


    $ LIBRARY /EXTRACT=AFRDEF /OUTPUT=AFRDEF.H SYS$LIBRARY:SYS$STARLET_C. 
    TLB
    

  • SYS$STARLET_C.TLB に含まれている追加の .H ファイル
    STARLET ソースから作成された .H ファイルの他に, SYS$STARLET_C.TLB には,CMA.H など,DECthreads をサポートするための .H ファイルも含まれています。



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

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

  • 次の例に示すように#endif文の後に指定したテキスト。


    #ifdef a 
       .
       .
       .
    #endif a  
    


    テキストを削除するか,または次の例に示すようにテキストをコメント区切り文字で囲んでください。


    #endif /* a */ 
    

  • 文字列定数の変更は常に問題となるプログラミング方法ですが,VAX Cでは受け付けられていました。DEC C for OpenVMS Alphaシステムでは,すべての文字列定数は読み込み専用プログラム・セクションに格納されるため,変更できません。

  • 構造体を初期化する値は中括弧({})で囲まなければなりません。


    array[SIZE] = NULL;   /* accepted by VAX C */ 
    array[SIZE] = {NULL}; /* required by DEC C */ 
    

  • シンボルの再定義には,警告レベルの診断メッセージが示されるようになりました。


    #define x  a 
    #define x  b   /* generates a warning message in DEC C */ 
    

  • テキスト・ライブラリの使用は望ましくありません。VAX Cではサポートされましたが,テキスト・ライブラリを移植することはできません。


    #include  stdio    
    


    このような場合には,かわりに次の構文を使用してください。


    #include <stdio.h> 
    

  • 外部変数は1回だけ宣言しなければなりません。これはこの変数の定義です。他のモジュールでは, externセマンティックを使用して宣言することにより,その変数を使用できます。

  • VAX C コードを再コンパイルする場合には,アプリケーション全体を再コンパイルする場合も,1 つ以上のモジュールを再コンパイルする場合も,外部シンボルにとくに注意する必要があります。1 つの外部シンボル・モデルをサポートする VAX C コンパイラと異なり,DEC C コンパイラは 4 つのモデルをサポートします。DEC C コンパイラで生成される省略時の外部シンボルは,1 つの VAX C 外部シンボルと同じではありません。
    さらに,このようなコードをリンクする場合には,リンカが変更されているため, C コード・モジュールを再コンパイルしたときに /SHARE 修飾子を指定しなかったときは,関連するリンカ修飾子を指定しなければなりません。



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 にはない以下の言語拡張仕様と機能を含んでいます。

  • コンパイル・コマンド行を使って,またはソース・ディレクティブを使って個々のレコードに対してアラインメントを選択することができます。 Alpha データ・アラインメントを選択してパフォーマンスを最適化するか, VAX COBOL のデータ・アラインメントを選択して VAX COBOL との互換性を実現することになります。

  • 単精度および倍精度データ項目に IEEEまたは VAX 浮動小数点データ型を選択する修飾子。

  • ネイティブな OpenVMS Alpha イメージがトランスレートされた VAX イメージを,またトランスレートされた VAX イメージがネイティブな OpenVMS Alpha イメージを呼び出せるコードを生成するための修飾子。

  • 『X/Open Portability Guide』で定義された新たな COBOL の予約語を認識する修飾子。

  • 数値の表示項目で,すべての空白をゼロに変更する修飾子。

  • COMPの同義語としてのCOMP-5とCOMP-X。

  • READ PRIORとSTART LESS。

  • 他の COBOL コンパイラと DEC COBOL の間でのプログラムの移植のサポート(/RESERVED_WORDS=FOREGN_EXTENSIONS)。

  • X/OpenのASSIGN TO,LINE SEQUENTIAL,RETURN-CODE,SCREEN SECTION, FILE-SHARING,およびRECORD-LOCKING。

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

  • VAX COBOL の/STANDARD=V3修飾子の機能のサブセットをサポートします。

  • VAX COBOL バージョン5.1と互換性のあるファイル状態値をサポートします。これは, VAX COBOL のバージョン5.0とそれ以前のバージョンとは異なります。

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

  • DECset/LSE Program Design Facility,/DESIGN修飾子,デザイン・コメント,疑似コード・プレースホルダ。

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

  • COPY FROM DICTIONARY

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』を参照してください。

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

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

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

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

  • 基本標準(ANSI-85,JIS-88)に対する DECの構文拡張

  • 4つのオプション・モジュールのうちの2つ

  • 基本標準の必須モジュールに含まれる,旧式の言語要素

  • ベンダのインプリメンテーションの違いのために,基本標準の必須モジュールから省略された言語要素

  • 日本語に関連するMIA拡張要素とは異なる,DEC 固有の日本語機能

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

省略時の設定はNOMIAです。

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

  • /ALIGNMENT

  • /CHECK=DECIMAL

  • /CONVERT=LEADING_BLANKS

  • /FLOAT=D_FLOAT

  • /FLOAT=G_FLOAT

  • /FLOAT=IEEE_FLOAT

  • /OPTIMIZE[=LEVEL=n]

  • /RESERVED_WORDS=FOREIGN_EXTENSIONS

  • /RESERVED_WORDS=[NO]XOPEN

  • /SEPARATE_COMPILATION1

  • /TIE

  • /VFC1



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

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

表 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 修飾子である

注意

1 この修飾子に対する DEC COBOL の動作は, VAX COBOL の省略時の動作に近くなるように設計されています。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項