CLPのコンパイルは圧倒的に CRTCLPGMコマンドによってコンパイルされていると思われるが
CRTCLPGM によってコンパイルされて作成された *PGM をDSPPGM コマンドによって表示すると
次のようにプログラム・タイプが 「OPM」 ( = Original Program Model ) と表示される。
次に全く同じプログラムを同じソースを使って CRTBNDCL コマンドを使ってコンパイルすることもできる。
このときは作成された *PGM のプログラム・タイプは 「ILE」 ( = Integlated Language Enviroment ) となる。
何がちがうのだろうか ?
CRTCLPGM で RTVCLSRC 可能 = *YES (これが省略値) でコンパイルした場合は
RTVCLSRC コマンドによって元の CLPソースを抽出することができるが、CRTBNDCL でコンパイルされた
*PGM は、そのようなデコンパイルはできない。
では CRTCLPGM のほうが良いのかというとそうではない。
最も大きな違いはマルチスレッド環境下における動作である。
- CRTCLPGM …… スレッド・セーフではない。
- CRTBNDCL …… スレッド・セーフである。
の違いが明確にある。
今のジョブは意図的に環境を変えない限りは、マルチスレッド: *NO として動作している。
しかし、一般的な他のOSプラットフォームと比べてみるとマルチスレッドが使えない、シングル・タスクの
環境自体がオールド・スタイルすぎるのである。
将来を見据えるのであれば CLP のコンパイルはこれからは CRTCLPGM ではなく、CRTBNDCL によって
コンパイルすべきではないだろうか ?