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