RPG

299. 活動化グループとは(1)

LR をオンにしないで元の親プログラムに戻ると、その子プログラムはメモリに留まり続けて、
次に呼び出したときは素早く実行され変数値も維持されている
ということは良く知られているがこのメモリ管理をさらに発展して
拡張したのが活動化グループという概念である。

例えば、活動化グループ(ACTGRP):*CALLERという設定は
これと同じであり一度、呼び出されて実行すると呼び出し側の親プログラムが
終了するまでメモリに留まり続ける。

*CALLERの活動化グループの典型的な例はサービス・プログラム(*SRVPGM)である。
サービス・プログラム(*SRVPGM)とはメイン・ルーチンを持たない関数の集まりの
プログラムであり各々の関数が親プログラムから呼び出されることを使用目的としている。
これは Windows の DLL (ダイナミック・リンク・ライブラリー)と同じことである。
従ってサービス・プログラム(*SRVPGM)は一般的に活動化グループが*CALLERとして作成される。

次に RPG III などで使用していたような呼び出されると毎度プログラムの
メモリが初期化されて実行される活動化グループは*NEWである。
最近の i5/OS のリリースでは CRTPGM などの活動化グループは*ENTMOD
初期値になっているが、これはQILEという名前の活動化グループである。
これは明示的な名前で与えられた活動化グループのひとつであり、
QILEが終了しないとQILEで実行されたプログラムのメモリはクリヤーされない。
*NEWとは少し違うのでこのあたりに IBM の誤解があるようである。
米国IBM ユーザーでは*ENTMODではなく明示的に*NEWを指定することが
常識になっている。
IBM も初めは*NEWとして出荷していたのだから、
*NEWでいいのではないかと思われる。