CL

84. 使えるか? *PRV コンパイル

■ *PRV コンパイルができるためには ?

CRTCLPGM コマンドを始めとしてコンパイル・コマンドには
一般的に次のように

     ターゲット・リリース : *PRV 

キー・ワードが用意されている。

CLプログラム作成(CRTCLPGM)

これは ひとつ前の世代の OS をターゲット・リリースとして
コンパイルすることを意味している。
*PRV の指定は、ひとつ前の世代を意味しているが
明示的に OS を指定すれば 2つ前の世代まで戻って
ターゲット・リリースを指定することが可能である。
例えば現在の OSリリースが Ver6.1 であるとすると
V5R3M0, V5R4M0 を指定することができる。(もちろん Ver6.1 も)
この 旧い2世代の OS が指定することができるのは、
この OS Ver6.1 には

  ライブラリー : QSYSV5R3M0
                  QSYSV5R4M0

が導入されているからである。
これらの導入がなければ *PRV コンパイルはできない。

■ *PRV オブジェクトは有効か ?

次に *PRV コンパイルで作成されたオブジェクト(プログラム)は *PRV OS 上で
果たして正常に動作するのであろうか ?
この OS で初めて搭載された機能をこのプログラムが使っている場合、
過去の *PRV OS 上で、その機能が存在している可能性があるとは言えないからだ。

  結論は、 どちらとも言えない。つまり動作する保証はない。

というものである。
良くしたもので新しい OS で初めて搭載された機能を使ったプログラムを
*PRV コンパイルした場合であっても *PRV オブジェクトが過去の *PRV OS 上でも
正しく動作する場合もあることが検証によって判明している。

しかし *PRV コンパイルでコンパイルは正常に完了して *PRV オブジェクトを作成することが
できるものの、実際に *PRV OS で実行させてみると正しく動作しないケースも過去に発見されている。

従って

*PRV コンパイルではコンパイルが成功しても動作させてみないとわからない。

というのが結論である。
弊社の製品には *PRV コンパイルは一切、使用していない。
たとえ動作が成功した場合であっても予想以外のトラブルを避けるためにである。

国内製品の中には旧いリリースの OS で開発して上位のOS でも「多分、使えますよ」として
謳って販売している会社もある。
輸入品ソフトの販売会社では「IBM は上位互換を保証しているから、うちの製品も大丈夫です」
と堂々と謳っている会社もある。
しかし、IBM はどこにも上位互換など保証などしていないのだ。
輸入ソフトウェアの大半は OS API を使用している。 OS API は IBM が予告なくパラメータ数などを
変更するので上位互換などあり得ない。
API を使っていなくても過去の旧い RPG プログラムでさえ再コンパイルしないと動作しない場合が
あることが既に実証されている。

やはり現存する OS でキッチリ動作確認してから販売すべきである。
輸入製品販売会社やいつまでも古い OS での開発会社は、無責任な広告は控えるべきであろう。