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
でいいのではないかと思われる。