CL

69. CRTCLPGM ではなく CRTBNDCL でコンパイルを

CLPのコンパイルは圧倒的に CRTCLPGMコマンドによってコンパイルされていると思われるが

CRTCLPGM によってコンパイルされて作成された *PGM DSPPGM コマンドによって表示すると

次のようにプログラム・タイプが 「OPM」 ( = Original Program Model ) と表示される。

次に全く同じプログラムを同じソースを使って CRTBNDCL コマンドを使ってコンパイルすることもできる。

このときは作成された *PGM のプログラム・タイプは 「ILE」 ( = Integlated Language Enviroment ) となる。

何がちがうのだろうか ?

CRTCLPGMRTVCLSRC 可能 = *YES (これが省略値) でコンパイルした場合は

RTVCLSRC コマンドによって元の CLPソースを抽出することができるが、CRTBNDCL でコンパイルされた

*PGM は、そのようなデコンパイルはできない。

では CRTCLPGM のほうが良いのかというとそうではない。

最も大きな違いはマルチスレッド環境下における動作である。

  • CRTCLPGM …… スレッド・セーフではない。
  • CRTBNDCL …… スレッド・セーフである。

の違いが明確にある。

今のジョブは意図的に環境を変えない限りは、マルチスレッド: *NO として動作している。

しかし、一般的な他のOSプラットフォームと比べてみるとマルチスレッドが使えない、シングル・タスクの

環境自体がオールド・スタイルすぎるのである。

将来を見据えるのであれば CLP のコンパイルはこれからは CRTCLPGM ではなく、CRTBNDCL によって

コンパイルすべきではないだろうか ?