RPG

188. OS Ver7.1 からの省略時の活動化グループ

OS V5R3M0 から CRTPGM コマンドの活動化グループ(ACTGRP) パラメータの
省略値は、それまでの *NEW から *ENTMOD に変更された。
活動化グループを *ENTMOD でコンパイルすると、 *PGM の活動化グループは
「QILE」 という名前の固定値として作成されてしまっていた。
これは大きな問題であり QILE で作成された *PGM は一旦、実行されると
明示的に RCLACTGRP (活動化グループの再利用)コマンドによって
削除してやらないとメモリ内に留まり続けるのである。
従って、次に同じプログラムを実行するとフィールド値は前の値のままで
開始されるし、*INZSR も実行されない。

これは RPG III などでお馴染みの「プログラムは終了するとメモリ内からは解放される」
という 「活動化グループ *NEW」 の挙動とは全く異なるものである。

このサイトでは *ENTMOD は明示的に *NEW に変更してコンパイルすべきであると
再三警告してきたが、弊社のユーザーでも時々誤って *ENTMOD のままで
コンパイルしている例が見つかる。
米国では *ENTMOD に変更されてからユーザーは *NEW に明示的に変更してコンパイルすることが
常識となっていた。
これに IBM がようやく気づいたのが OS Ver7.1 になってからのことである。
OS Ver7.1 では活動化グループは *ENTMOD のままではあるが、 *ENTMOD でコンパイルしても
プログラムの活動化グループは QILE ではなく *NEW として生成されるのである。
ちょっとずるい気もするがようやく IBM も自分の大きなミスに気づいたというところだろうか ?

ただし現行の OS V5R3M0 および V5R4M0, Ver6.1 のユーザーには、この問題は残っている。

*ENTMOD *NEW に変更してコンパイルすること !!

を忘れてはいけない。