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 からであるが、もっと早くにリリースされていても
良かったと思える機能である。