技術情報 - COBOL一般 - 旧版のCOBOL製品からの互換性

Micro Focus COBOLは過去20年以上に渡って、PCやUNIXでのアプリケーション開発の主流開発言語であり続けて来ました。過去、Level II COBOL、COBOL/2 など16bit版COBOL製品で開発された COBOLアプリケーションを新しいプラットフォームに移植したり、スタンドアロンアプリケーションとして開発されたものを、分散型に設計変更するために、最新の Micro Focus製品 での再コンパイルが必要となります。
ここでは、Level II COBOL、COBOL/2、16bit版 COBOL V3.1Jの既存アプリケーションの移植性に関する注意事項を解説します。

Micro Focus のアプリケーション互換性に対する方針

Micro Focusでは、ユーザーのシステム開発への投資の保護と、新しいテクノロジの早期の吸収という2つの相反する要求を両立させるために、COBOL製品のバージョンアップに際しての旧版のCOBOLで開発されたアプリケーションの互換性に関して、次のような方針をとっています:

  • ソースコードの互換性は基本的に保証する。例外としては、コンパイラのバグ修正によって同じプログラムの動作が変わってしまうもの、非常に旧弊な使用法のサポートを廃止するものなどであり、このような場合でも基本的には互換オプションなどを用意する。
    ソース非互換が発生するような変更は、必ず「互換性ガイド」などに記載する。
    なお、COBOLの構文・意味論上正しくないプログラムの動作に関しては、互換性は保証しない。
  • INT/GNTコードの上位互換性は保たれるように設計する。旧版で作成されたINT/GNTコードを新版のRTSで稼動させることに対する設計上の問題点は無い。但し、このような組み合わせでの品質保証は行わないため、万一問題が発生したとしてもMicro Focusは障害とは認識しない。
  • 実行形式モジュールの上位互換性は、マイナーリリースに関しては互換性があるように設計する。但し、このような組み合わせでの品質保証は行わないため、万一問題が発生したとしてもMicro Focusは障害とは認識しない。V3.1からV3.2のようなメジャーリリースでは、機能追加、障害改修、性能向上などのために実行形式モジュールの上位互換性が保たれないような設計変更も有り得る。

16bit版 COBOL製品からの移行

1) まとめ

  • COBOL言語の構文上はほとんど互換性があり、非互換の部分については、互換オプションが用意されている。
  • COBOLの実行時動作はほとんど互換性があり、非互換箇所は明らかになっている。互換オプションも何種か用意されている。
  • Level II COBOLで作成された索引編成ファイルは、そのままでは読めない。コンバートする必要がある。
  • オペレーティングシステムの相違により、一部サポートできない機能や動作の互換性が無いものがある。

2) 構文上の非互換

非互換項目の詳細は、製品に添付の 「互換性ガイド」のようなマニュアルに記述されています。以下に、そのいくつかの例を記します。

新しく追加された予約語
COBOL V3.1J以降に新たに追加された予約語がある。これらをたまたま利用者語として使っていたプログラムはコンパイルエラーを引き起こす。
チェッカー指令 MF(5)、MF(6)などを使用することによってこれらの語を予約語扱いとしないようにできる。
但し、新予約語に関連するCOBOLの新しい言語要素が使えなくなってしまうので、プログラムを新規に書き直すことが推奨される。
指標項目の演算
Level II COBOL では OCCURS INDEXED BY項目に対して算術演算が可能。V3.1J以降では、ANSI規格に準拠してエラーとなる。
チェッカー指令 OLDINDEX を指定することによって可能とすることができる。
STRING/UNSTRING文でのPIC N項目とPIC X項目の混在
日本語COBOL/2の最近のバージョンの一部では、STRING文とUNSTRING文内でPIC XとPIC Nの混在を許していた。現在は、MIA COBOL規格等に準拠してエラーとなる。チェッカー指令 OLDSTRMIX を指定することによって可能とすることができる。

3) 実行時動作の非互換

非互換項目の詳細は、製品に添付のオンラインマニュアル「互換性ガイド」に記述されています。以下に、そのいくつかの例を記します。

ACCEPT FROM DAY-OF-WEEK文の曜日
COBOL/2 では 日曜日は 0 を返していた。V3.1J以降では、ANSI規格に準拠して 7 を返す。
これはコンパイラのバグ修正であるため、互換オプションは用意されていない。
表意定数 HIGH-VALUE
Level II COBOL では X"7F"。V3.1J以降では X"FF"。
PIC N項目における空白文字の扱い
日本語項目の転記・比較で仮定されるパディングの空白は、COBOL/2までは x'2020' だった。V3.1J以降では、MIA COBOL規格などに準拠して、全角の空白(Shift JISでは x'8140')が仮定される。

4) データファイルの非互換

Level II COBOL, COBOL/2, COBOL V3.1J、V4.0J、V5.0J で作成された順・相対ファイルは、NetExpressでも扱えます。
Level II COBOL V2.1 以前の版で作成された索引ファイルは互換性がありません。一旦テキストファイルに変換し、COBOLプログラムからREAD/WRITEして、再構築する必要があります。
Level II COBOL V2.5.4 で作成された索引ファイルは、

       REBUILD 旧ファイル.dat,新規ファイル.dat /s:lii

でコンバートすれば使用できます。

5) OSの違いによる非互換

MS-DOS下で稼動していたCOBOLアプリケーションを Windows 95, 98 や Windows NT, 2000へ移行すると、OSがサポートしない機能が実現できないことがあります。
Micro Focus では、できる限りこのような OS の相違に起因する非互換を COBOLの機能によって吸収するように努めていますが、以下に述べる問題は解決できていません。

キャラクタベースアプリケーションからのIME漢字入力
2.2 Windows 95/98におけるDOSエミュレーションの制限事項に詳述します。
COBOLアプリケーションのバッチファイルからの連続実行
2.2 Windows 95/98におけるDOSエミュレーションの制限事項に詳述します。
日本語の印刷とプリンタ制御コード
2.1 印刷帳票の16bit環境からの互換性に詳述します。
COM:ポートへの入出力
MS-DOS下では、COBOLプログラムから通常のCOBOLファイルとして、COM:ポートのREAD/WRITE が可能でしたが、Windowsでは COM:ポートは通常のファイルとして扱うことができないため、COBOL入出力文からも READ/WRITEできません。

戻る

-----