日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページサイズの拡大に対するアプリケーションの対応
第 6 章:共用データの整合性の維持
第 7 章:アプリケーションデータ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:OpenVMS I64コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム

OpenVMS
OpenVMS VAX から OpenVMS I64 への
アプリケーションの移行


目次 索引

第 9 章
OpenVMS I64 コンパイラ

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

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

コンパイラの相違点は,OpenVMS VAX で動作する以前のバージョンのコンパイラと最新版のコンパイラの違いと,VAX,Alpha,および I64 コンピュータで動作するバージョンの違いの 2 つに大きく分けることができます。 OpenVMS I64 コンパイラは,OpenVMS VAX および OpenVMS Alpha の対応するコンパイラと互換性を維持するように設計されています。この後の節に示すように,互換性を維持するためにいくつかの修飾子が提供されます。

各言語は言語標準規格に準拠し, OpenVMS VAX の大部分の言語拡張機能がサポートされています。コンパイラは OpenVMS VAX システムの場合と同じデフォルトのファイル・タイプを使用して出力ファイルを作成します。たとえば,オブジェクト・モジュールのファイル・タイプは .OBJ です。しかし,OpenVMS VAX システムのコンパイラでサポートされていた機能のうち,一部の機能は OpenVMS I64 システムでは利用できません。

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

9.1 I64 システムと VAX システム間の Ada の互換性

OpenVMS システムでは,以下の 2 つの Ada コンパイラが利用できます。

  • HPE Ada は弊社より提供され,OpenVMS VAX および OpenVMS Alpha で利用できます。 Ada 83 言語標準規格に準拠しており,以前は VAX Ada,DEC Ada,および Compaq Ada と呼ばれていました。 HPE Ada は OpenVMS I64 では利用できません。

  • GNAT Pro は,Ada Core Technologies 社より提供されます。これは,OpenVMS Alpha および OpenVMS I64 で利用でき, Ada 95 言語標準規格に準拠しています。 GNAT Pro は,VAX 以外の他の多数のプラットフォームでも利用できます。

表 9-1 に Ada コンパイラの比較を示します。

表 9-1 OpenVMS での Ada 言語のサポート
会社名 製品名 言語標準規格
HP HPE Ada Ada 83
Ada Core GNAT Pro Ada 95

GNAT Pro は Ada 95 コンパイラで,HPE Ada は Ada 83 コンパイラです。一般に,Ada 95 は Ada 83 との上位互換性が高いため, Ada 83 プログラムは変更なしまたは軽微な変更で Ada 95 で動作します。

VAX で Ada を使用しており,アプリケーションを I64 に移植する場合は,コンパイラを HPE Ada から GNAT Pro に変更する必要があります。

Ada アプリケーションを VAX から I64 に移植する際には,以下の方法が利用できます。

  • GNAT Pro を使用して直接 I64 に移植する

  • HPE Ada を使用して Alpha に移植し,その後 I64 に移植する

  • GNAT Pro を使用して Alpha に移植し,その後 I64 に移植する

移植するプログラムは再コンパイルしなければなりません。 Ada イメージは VAX から I64 にトランスレートすることはできません。

詳細は,『Ada Technical Overview and Comparison』を参照してください。このドキュメントでは,HPE Ada と GNAT Pro の互換性を詳細に比較しており,次の場所から入手できます。


http://h41379.www4.hpe.com/commercial/ada/ada_index.html 

このドキュメントは,Ada がインストールされているシステムの ADA$EXAMPLE:DEC_ADA_OVERVIEW_AND_COMPARISON.* ディレクトリにもあります。

GNAT Pro for I64 をインストールすると,『GNAT Pro User's Guide』がマニュアル領域にインストールされます。このマニュアルでは,HPE Ada との互換性と,Ada 83 および Ada 95 の互換性について説明しています。

GNAT Pro についての詳細は,次に示す Ada Core 社の Web ページを参照してください。


http://www.gnat.com 

問い合わせ先は sales@adacore.comです。

9.1.1 タスクに関する相違点

VAX 上のタスクの実装は,Alpha および OpenVMS I64 とは異なっています。 Alpha と I64 はどちらも DECthreads を使用しますが, DECthreads は VAX では使用できません。

9.1.2 Ada を使用したイメージのトランスレート

Ada イメージは,別のマシン・ターゲットにトランスレートすることはできません。 HPE Ada イメージも GNAT Pro イメージも,Alpha や I64 にトランスレートすることはできません。

9.2 VAX BASIC と HPE BASIC の互換性

HPE BASIC は,VAX システムで動作する VAX BASIC を元にしており,高い互換性があります。しかし,以降の項で説明するように,いくつかの相違点もあります。ここで説明する情報は,両方の BASIC 製品と互換性のある BASIC アプリケーションを開発する場合や, VAX BASIC アプリケーションを OpenVMS I64 および OpenVMS Alpha オペレーティング・システム上の HPE BASIC に移行する場合に役立ちます。

9.2.1 HPE BASIC では利用できない VAX BASIC の機能

VAX BASIC の以下の機能は,I64 システムおよび Alpha システムでは利用できません。

  • プログラム開発のための,BASIC 固有の機能を提供する VAX BASIC 環境, RUN コマンド,イミディエイト・モード

  • 各行を入力した後に構文チェックを行うことを指定する /SYNTAX_CHECK 修飾子

  • ANSI Minimal BASIC 標準規格を強制する /ANSI_STANDARD 修飾子

  • PDP-11 BASIC/PLUS2 と互換性のない VAX BASIC プログラムの機能を有効にする /FLAG=BP2COMPATIBILITY 修飾子

  • I64 BASIC/Alpha BASIC でサポートされていない VAX BASIC プログラムの機能を有効にする /FLAG=AXPCOMPATIBILITY 修飾子

  • Program Design Facility (PDF) のサポートを有効にする /DESIGN 修飾子。 /DESIGN を指定すると,コンパイラはプログラムのコンパイルを行わない。

  • Programming with VAX BASIC Graphics』に記載されている, Graphics 文,変換機能,その他の機能

  • 浮動小数点データ用の HFLOAT VAX 浮動小数点形式。また,DECLARE 文や REAL 関数などのさまざまな組み込み関数で, HFLOAT キーワードは指定できない。

  • サイズが明示的に宣言されていない浮動小数点データ変数を HFLOAT と見なす /REAL_SIZE=HFLOAT 修飾子



9.2.2 VAX BASIC では利用できない HPE BASIC の機能

HPE BASIC の以下の機能は,VAX BASIC では利用できません。

  • IEEE 浮動小数点データ型 SFLOAT (32 ビット),TFLOAT (64 ビット),および XFLOAT (128 ビット) と,整数データ型 QUAD (64 ビット) のサポート

  • デフォルトの整数データ型のサイズをクォドワード (64 ビット) に設定する /INTEGER_SIZE=QUAD 修飾子

  • デフォルトの浮動小数点データ型のサイズを IEEE 浮動小数点データ型のいずれかに設定する /REAL_SIZE={ SFLOAT | TFLOAT | XFLOAT } 修飾子

  • 個々のコンパイル単位をオブジェクト・ファイル中で個別のモジュールにするかどうかを制御する /SEPARATE_COMPILATION 修飾子

  • コンパイラが VAX BASIC の例外動作をエミュレートするための追加コードを生成するかどうかを制御する /SYNCHRONOUS_EXCEPTIONS 修飾子

  • 自然にアラインされていない RECORD フィールド,COMMON および MAP 内の変数, RECORD 配列が見つかったら警告するようにコンパイラに指示する /WARNINGS=ALIGNMENT 修飾子

  • ターゲット・マシン・アーキテクチャに応じて,より効率の良いコードを生成することをコンパイラに許可する /ARCHITECTURE 修飾子

  • コンパイラが行う最適化のレベルを制御する /OPTIMIZE=(LEVEL=, TUNE=) 修飾子



9.2.3 VAX BASIC と HPE BASIC の動作の相違点

ここでは,VAX BASIC と HPE BASIC の動作の相違点について説明します。

HPE BASIC では,3 種類の IEEE 浮動小数点データ型 SFLOAT,TFLOAT,および XFLOAT がサポートされています。これは,ベース・ハードウェアでもサポートされています。 Alpha アーキテクチャでは, VAX の DOUBLE (D 浮動小数点) データ型をサポートしていません。また,Intel Itanium アーキテクチャでは,VAX の浮動小数点データ型 (SINGLE (F 浮動小数点),DOUBLE (D 浮動小数点),GFLOAT,HFLOAT) のハードウェアによるサポートは行っていません。

表 9-2 浮動小数点データ型の対応
VAX BASIC HPE BASIC (Alpha) HPE BASIC (I64) IEEE
SINGLE (F 浮動小数点) F 浮動小数点 SFLOAT SFLOAT
DOUBLE (D 浮動小数点) GFLOAT TFLOAT TFLOAT
GFLOAT GFLOAT TFLOAT TFLOAT
HFLOAT XFLOAT XFLOAT XFLOAT

浮動小数点データは,宣言されたデータ型でメモリに格納されますが,データの演算を行う前にアーキテクチャでサポートされている型に変換されます。結果は,メモリに格納する前に必要なデータ型に変換されます。この変換処理によって精度が低下する可能性があります。

9.2.3.1.1 HPE BASIC での (DOUBLE) D 浮動小数点データ型の使用

Alpha ハードウェアは D 浮動小数点データ型を完全にサポートしていないため, HPE BASIC では BASIC DOUBLE 演算 (+,- など) を GFLOAT で行います。その結果,約 3 ビットの精度が失われます。

9.2.3.1.2 HPE BASIC での VAX 浮動小数点データ型の使用

Intel Itanium ハードウェアは VAX 浮動小数点データ型をサポートしていないため, VAX 浮動小数点データは,演算の前にすべて対応する IEEE 浮動小数点データ型に変換されます。関係するデータ型によっては,精度が失われます。

9.2.3.1.3 HFLOAT データ型の暗黙的な使用

VAX BASIC では,ソース・コードで明示的な使用が指定されていない場合でも,中間的な計算を HFLOAT データ型で行う場合があります。一般に,値が大きな DECIMAL データと浮動小数点データの間で,データ型が混在する演算を実行する場合にこの処理が行われます。

Alpha プラットフォーム用の HPE BASIC は,これらの操作を GFLOAT で実行し, I64 プラットフォーム用の HPE BASIC は,これらの操作を TFLOAT で実行します。その結果,精度がいくらか失われる可能性があります。この相違点の原因となるソース・コードが見つかると,コンパイル時に次の警告メッセージが出力されます。


OPEPERGFL, operation performed in GFLOAT, loss of precision possible 

9.2.3.1.4 CDD レコード中の HFLOAT データ

HPE BASIC は,CDD レコード中の HFLOAT データを, CDD レコード中に見つかったその他のサポートされていないデータ型と同様に, 16 バイトの文字列を含むグループにマッピングします。

VAX BASIC および HPE BASIC for Alpha では,浮動小数点のデフォルトのサイズは SINGLE (VAX F 浮動小数点) であり, HPE BASIC for I64 でのデフォルトは SFLOAT です。

HPE BASIC および VAX BASIC では,実パラメータを値で渡すことができますが,値渡しの仮パラメータを使用できるのは HPE BASIC だけです。

HPE BASIC と VAX BASIC の配列パラメータの処理には,以下の相違点があります。

  • サブプログラムまたは関数に配列全体が渡された場合, HPE BASIC も VAX BASIC もパラメータ・チェックを行います。渡された配列が,サブプログラムまたは関数が期待するものに一致しない場合は,コンパイラはエラー・メッセージ "Arguments don't match" を出力します。 VAX BASIC では,配列が参照されるたびにこのチェックが行われます。 HPE BASIC では,サブプログラムまたは関数の先頭で一度だけこのチェックが行われます。
    HPE BASIC では,配列パラメータはより効率的に処理されます。 HPE BASIC と VAX BASIC の配列パラメータの処理方法には,以下の違いがあります。

    • HPE BASIC では,サブプログラムまたは関数がパラメータ・リスト中で配列を宣言している場合には,そのサブプログラムまたは関数を呼び出す際には,呼び出し元のプログラムは配列を渡さなければなりません。配列以外を渡すと,予期しないエラーが発生します。たとえば,配列の代わりにヌル・パラメータを渡すと,メモリ管理違反となり,プログラムは異常終了します。 VAX BASIC では,サブプログラムまたは関数内で配列にアクセスしていない場合は,ヌルを渡してもかまいません。

    • HPE BASIC では,サブプログラムは "Arguments don't match" エラーをトラップすることはできません。通知されたエラーは,呼び出し元のプログラムでだけトラップできます。

  • 配列全体を記述子によって渡す場合, VAX BASIC は DSC$K_CLASS_A 記述子を作成しますが, HPE BASIC は DSC$K_CLASS_NCA 記述子を作成します。
    呼び出し元のプログラムと呼び出されるサブプログラムは NCA 記述子を使用するため,ほとんどの BASIC アプリケーションではこれに気づきません。しかし,記述子の各フィールドを使用しているプログラムでは, HPE BASIC で生成される記述子を扱うための変更が必要になります。
    DSC$K_CLASS_A 記述子と DSC$K_CLASS_NCA 記述子についての詳細は,『OpenVMS Calling Standard』を参照してください。

  • VAX BASIC では,10 進配列全体をサブプログラムまたは関数に渡す場合,スケール・チェックや精度チェックが実行されません。
    HPE BASIC のサブプログラムと関数は,記述子によって受け取ったすべての 10 進配列をチェックし,その精度,位取り因数,境界情報が,呼び出し元プログラムのパラメータと一致していることを確認します。
    たとえば,次のプログラムでは,サブプログラム test_func が実行を開始すると,エラー "Arguments don't match" が発生します。


     
    DECLARE DECIMAL(5,2) a(10) 
    CALL test_func (a()) 
    PRINT a(1) 
    END 
     
    SUB test_func (DECIMAL(10,4) b()) 
    b(1) = 12.12 
    END SUB 
    

  • VAX BASIC では,呼び出し元からレコードの配列を受け取ると,最低限のチェックが実行されます。たとえば,次のプログラムでは,渡された配列のサイズがサブプログラムで宣言されたサイズに等しいことはチェックされません。

  • HPE BASIC では,配列要素のサイズが等しいことと,次元数が一致することがチェックされます。次のプログラムでは,サブプログラム test_func が実行を開始すると,エラー "Arguments don't match" が発生します。


    RECORD rec1 
       LONG a 
       LONG b 
    END RECORD 
    DECLARE rec1 a(10) 
    CALL test_func (a()) 
    END 
     
    SUB test_func (rec2 a()) 
    RECORD rec2 
       LONG x 
       LONG y 
       LONG z 
    END RECORD 
    a(2)::x = 1 
    END SUB 
    

  • VAX BASIC では,記述子パラメータとして受け取った配列に対する境界チェックが必ず実行されます。
    HPE BASIC では,/CHECK=NOBOUNDS 修飾子が指定されていると,記述子パラメータとして受け取った配列に対するチェックを実行しません。このようにすると,パラメータとして受け取った配列は他のすべての配列と整合性があります。



HPE BASIC では,DEF ルーチンまたは WHEN ハンドラ内から DEF* ルーチンを呼び出すことはできません。呼び出そうとすると,次のエラー・メッセージが表示されます。


 BASIC-E-DEFSNOTALL, DEF* reference not allowed in DEF or handler 

HPE BASIC では,式の中から呼び出された DEF* ルーチンに最も高い優先順位が与えられます。そのため,DEF* ルーチンの呼び出しが最初に評価されます。同じ式の中で使用されている変数の値を DEF* ルーチンが直接変更すると,式の結果が影響を受けます。式の中の DEF* 呼び出しの順序がコンパイラによって変わる場合は,次の警告が表示されます。


BASIC-W-DEFEXPCOM, expression with DEF* too complex, moving <name> 
invocation 

このエラーを避けるには,式を単純化します。

HPE BASIC では,/LINES 修飾子は ERL 関数だけに影響を与え,実行時エラー・メッセージ中に BASIC の行番号を表示するかどうかを決定します。 HPE BASIC と VAX BASIC には以下の違いがあります。

  • /NOLINES 修飾子がデフォルトです。

  • 対象のない RESUME 文を使用するために /LINES を使用する必要はありません。

  • ほとんどの行に行番号があるプログラムで /LINES を使用すると,実行時の性能が低下します。


目次 索引

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