RPG

162. OS Ver6.1 からの新しいバインド方法

OS Ver6.1 からは、サービス・プログラムのバインド方法にオプションが追加されている。

サービス・プログラムを、いつ活動化するかというオプションである。

例えば、CRTPGM コマンドにおいて

 CRTPGM OBJLIB/PGM001 MODULE(QTEMP/PGM001) BNDSRVPGM((OBJLIB/MYSRVPGM)) AUT(*ALL)

などと指定してビルドしていたのを

 CRTPGM OBJLIB/PGM001 MODULE(QTEMP/PGM001) BNDSRVPGM((OBJLIB/MYSRVPGM *IMMED)) AUT(*ALL)

*DEFER (遅延) を指定して、

 CRTPGM OBJLIB/PGM001 MODULE(QTEMP/PGM001) BNDSRVPGM((OBJLIB/MYSRVPGM *DEFER)) AUT(*ALL)

と指定することができる。

この *DEFER オプションが新しい機能であり、これまでは PGM001 がロードされると同時に

下位の使用しているサービス・プログラムも同時にメモリにロードされていたのであるが、

*DEFER を指定するとサービス・プログラムはその関数が必要となってから、

初めてロードされるようになる。

これは従来が スタティック・リンク(静的リンク) であったのに対して、

ダイナミック・リンク(動的リンク) が可能になったことを意味している。

多くのサービス・プログラムを参照しているときに、従来では滅多に使用しない関数であっても

サービス・プログラムがメモリ内にロードされてしまっていたが、*DEFER を指定すると

サービス・プログラム内の関数が必要となった時点で初めて、そのサービス・プログラムが

メモリ内にロードされることになるのである。

これは上位のプログラムが通常では必要なサービス・プログラムだけで少ないメモリで

快適に動作することを期待することができる。

大規模なシステムを構築するときには機能別に多くのサービス・プログラムに分割して

設計すると効果的になることは間違いない。

残念なことにこの機能は Ver6.1 からであるが、もっと早くにリリースされていても

良かったと思える機能である。