RPG

86. 実行環境を分割する活動化グループとは?

ILE になって活動化グループという概念が導入されたが、活動化グループをひとくちで
説明すると実行環境を分割する仕組みのことである。
活動化グループのことをある程度、学習した人であれば最上位の *PGM*NEW
活動化グループとして作成され、*SRVPGM*CALLER として作成されることは
ご存知であろう。
*CALLER とは、その呼び出し親PGM の活動化グループとしてメモリ内に留まり続けて
親の活動化グループの消滅とともに自分自身も消滅するものである。
それでは名前つきの活動化グループはどうなるのであろうか?
V5R3M0 からは CRTPGM*NEW ではなく、QILE という名前で作成されるようになった。
このような名前つきで作成された*PGMLRON にせずに RETURN で終了すると
メモリ内に留まり続ける。

同じJOB内で別の*PGM が名前つきの *PGM*SRVPGM を再呼び出しすると
呼び出された名前つきの活動化グループは、内部的には以前のフィールド値などが
残ったままで起動されることになる。
そこで IBM では ANSI-C言語などのメモリー割り振り(malloc) と同じようなメモリ割り振りの
仕組みを ILE で提供するようになった。
親PGM 別に別々のメモリーの変数を使用できるようにするためである。
しかし、やってみるとわかることであるが、これはかなり大掛かりな仕掛けが必要となってしまう。
それよりは活動化グループの名前を実行時に動的に与えることができるような仕組みがあれば
と筆者は期待している。
名前つきの活動化グループは完全に実行環境を同一JOB内で分離するものであるが
動的に名前を与えることができれば、メモリ・アロケーションのような面倒な手間が不要と
なるからである。