CL

90. 正しい ILE-CLP のコンパイルの方法

RPG の「219. ILE-RPG の正しいコンパイルの方法」でも説明したように
省略値のいうとおりにコンパイルしたのでは活動化グループが *NEW ではなく
*DFTACTGRP 、つまり QILE という名前の活動化グループとなってしまい、
同じジョブで複数回、実行されたときに前の変数値の前残りが発生してしまって
予測できない障害を発生する可能性がある。

これは IBM が旧リリースでは CRTBNDRPGCRTBNDCL*NEW でコンパイルするようにしていたのを
あるとき突然、*DFTACTGRP に省略値を変更してしまったのである。

このことは米国ユーザーではよく知られており、一般的には *NEW に変更してコンパイルすることが
公然の事実としてよく知られている。

日本国内ではまだ知らない人も多いかも知れないので
CRTBNDCL コンパイラーについてここで説明することとする。

CRTBNDCL コマンドの実行においては「省略時の活動化グループ」(→OS のリリースによっては
IBM の翻訳ミスで活動化グループを活性化グループとなっている場合もある。) を *YES から *NO に変更して
活動化グループ・パラメーターを QILE から *NEW に変更する。

                     バインド CL PGM の作成  (CRTBNDCL)                      
                                                                               
 選択項目を入力して,実行キーを押してください。                                
                                                                               
 プログラム  . . . . . . . . . . > GETPTFCL       名前                         
  ライブラリー  . . . . . . . . . . . >   SPOOLWTR     名前 , *CURLIB               
 ソース・ファイル  . . . . . . . > QCLLESRC       名前                         
  ライブラリー  . . . . . . . . . . . >   R610SRC      名前 , *LIBL, *CURLIB        
 ソース・メンバー  . . . . . . .   *PGM           名前 , *PGM                  
 テキスト ' 記述 ' . . . . . . .   *SRCMBRTXT                                  
                                                                               
 省略時の活動化グループ  . . . . > *NO           *YES, *NO                     
 活動化グループ  . . . . . . . . > *NEW           名前 , *STGMDL, *NEW, *CALLER
 ストレージ・モデル  . . . . . .   *SNGLVL       *SNGLVL, *TERASPACE           
                                                                               
                  追加のパラメーター                                           
                                                                               
 権限  . . . . . . . . . . . . . > *ALL           名前 , *LIBCRTAUT, *CHANGE...

※ CRTBNDCL は使用する機会は少ないかも知れない。
CRTBNDCL は SEU のソース・タイプ CLLE をコンパイルするコマンドである。
もちろん CRTCLMOD + CRTPGM でもかまわないのであるが、これらをひとつでコンパイルできる
コマンドである。
CRTBNDCL は、サービス・プログラムのバインドを指定することはできないが
IBM 提供のサービス・プログラムはサービス・プログラムやバインド・ディリクトリーの指定なしに
バインドすることができる。
従ってこのようなときには CRTCLMOD+ CRTPGM よりも CRTBNDCL によってコンパイルすることが多い。