6.1 での変更点

この節では、6.1 で ILE RPG に対して行われた機能強化について説明します。

THREAD(*CONCURRENT)
モジュールの制御仕様書に THREAD(*CONCURRENT) が指定されていると、次のように複数のスレッドで並行して実行できる機能が提供されます。
  • 複数のスレッドが同時にモジュールで実行できる。
  • デフォルトでは、各スレッドが静的変数の独自のコピーを持つように 静的変数が定義される。
  • 個々の変数は、STATIC(*ALLTHREAD) を使用してすべてのスレッドで共用されるように定義できる。
  • プロシージャー開始仕様書で SERIALIZE を指定することによって、一度に 1 つのスレッドのみがプロシージャーを実行できるように個々のプロシージャーを直列化することができる。
RPG サイクルを使用しないメイン・プロシージャーを定義する機能

サブプロシージャーは、制御仕様書で MAIN キーワードを使用して、 プログラム入力プロシージャーとして識別することができます。これにより、RPG サイクルを使用するモジュールが存在しない場合でも RPG アプリケーションを開発することができます。

サブプロシージャーで定義されるファイル

ファイルは、サブプロシージャーでローカルに定義できます。ローカル・ファイルへの 入出力は、データ構造を使用してのみ実行できます。I 仕様書および O 仕様書はサブプロシージャーで 許可されず、コンパイラーは外部記述ファイルの I 仕様書および O 仕様書を生成しません。 デフォルトでは、ローカル・ファイルは自動記憶域に関連付けられます。 サブプロシージャーが戻るときに、ファイルがクローズされます。 STATIC キーワードを使用して、ファイルに関連付けられる記憶域が静的であることを 示すことができるため、サブプロシージャーのすべての呼び出しは同じファイルを使用します。 また、サブプロシージャーが戻ったときにファイルが開いている場合は、 そのサブプロシージャーへの次の呼び出しのためにファイルは開いたままになります。

修飾レコード様式

ファイルが QUALIFIED キーワード付きで定義される場合、レコード様式は MYFILE.MYFMT のようにファイル名で修飾する必要があります。修飾ファイルには コンパイラーによって生成される I 仕様書および O 仕様書はありません。入出力は データ構造を介してのみ行われます。

他のファイルのように定義されるファイル

ファイルは、LIKEFILE キーワードを使用して、他のファイル仕様書と同じ設定を使用するように 定義することができます。これは、ファイルをパラメーターとして渡すときに 重要です。ファイルが外部記述される場合、 QUALIFIED キーワードは暗黙となります。新規ファイルへの入出力は、 データ構造を介してのみ実行できます。

パラメーターとして渡されるファイル

プロトタイプ・パラメーターは、 LIKEFILE キーワードを使用して、ファイル・パラメーターとして定義できます。同じ LIKEFILE 定義を介して関連付けられたファイルは、パラメーターとしてプロシージャーに渡される場合があります。 呼び出されたプロシージャーまたはプログラム内で、サポートされるすべての操作をそのファイルに 実行することができます。入出力はデータ構造を介してのみ実行できます。

EXTDESC キーワードと EXTFILE(*EXTDESC)

EXTDESC キーワードは、ファイルの外部記述を取得するためにコンパイラーがコンパイル時に使用するファイルを識別します。ファイル名は、「LIBNAME/FILENAME」または「FILENAME」のいずれかの形式のリテラルとして指定されます。 これにより、ファイルに対するコンパイル時指定変更が不要になります。

EXTFILE キーワードが特殊値 *EXTDESC を許可するように拡張されました。この特殊値は、EXTDESC によって指定されたファイルを実行時にも使用するように指示するものです。

外部記述データ構造のライブラリーを指定するための EXTNAME

EXTNAME キーワードが、リテラルを使用して外部ファイルのライブラリーを指定できるように拡張されました。 EXTNAME('LIBNAME/FILENAME') または EXTNAME('FILENAME') がサポートされています。 これにより、ファイルに対するコンパイル時指定変更が不要になります。

EXFMT は結果データ構造を許可する

EXFMT 命令が、結果フィールドにデータ構造を指定できるように拡張されました。 データ構造は、 使用タイプ *ALL を使用して、レコード様式の外部記述データ構造 (EXTNAME(file:fmt:*ALL) として、またはレコード様式の LIKEREC (LIKEREC(fmt:*ALL) を使用して定義する必要があります。

データ構造、文字、UCS-2 およびグラフィック変数の制限の拡大
  • データ構造のサイズは最大 16,773,104 とすることができる。
  • 文字定義の長さは最大 16,773,104 とすることができる。(この制限は 可変長文字定義では 4 少ない。)
  • UCS-2 定義の長さは最大 8,386,552 UCS-2 文字とすることができる。 (この制限は可変長 UCS-2 定義では 2 少ない。)
  • グラフィック定義の長さは最大 8,386,552 DBCS 文字 とすることができる。(この制限は可変長グラフィック定義では 2 文字 少ない。)
  • VARYING キーワードは、長さの接頭部を保持するために使用されるバイト数を 示す 2 または 4 のいずれかのパラメーターを許可します。
%ADDR(varying : *DATA)

%ADDR 組み込み関数が、*DATA を 2 番目のパラメーターとして使用して可変長フィールドのデータ部分のアドレスを取得できるように拡張されました。

DIM および OCCURS の制限の拡大

配列または複数回繰り返しデータ構造は、合計サイズが 16,773,104 より大きくなければ、最大 16,773,104 要素を持つことができます。

文字、UCS-2 および DBCS リテラルの制限の拡大
  • 文字リテラルの最大長が 16380 文字になりました。
  • UCS-2 リテラルの最大長が 8190 文字 (UCS-2) になりました。
  • 図形リテラルの最大長が 16379 文字 (DBCS) になりました。
ファイルおよび定義のための TEMPLATE キーワード

ファイルおよび変数の定義が、他のファイルまたは変数を定義するのに名前が LIKEFILE、LIKE、または LIKEDS キーワードと一緒にのみ使用されることを指示するように、TEMPLATE キーワードをコーディングすることができます。 コンパイラーは、コンパイル時にテンプレート定義のみを使用して他のファイルおよび変数を定義し、それらのファイルや変数に関連するコードを生成しないので、プロトタイプ呼び出しのタイプを定義する際にはテンプレート定義が便利です。

テンプレート・データ構造では、データ構造およびそのサブフィールドに対して INZ キーワードをコーディングでき、それにより INZ(*LIKEDS) の使用が容易になります。

一部の UCS-2 規則の緩和
コンパイラーが文字値、UCS-2 値、およびグラフィック値の間の暗黙的な変換を行うため、多くの場合、%CHAR、%UCS2、または %GRAPH のコーディングは不要となります。 この機能拡張は、V5R3 および V5R4 の PTF でも利用することができます。 暗黙的な変換の現在のサポート対象は以下のとおりです。
  • EVAL および EVALR による代入
  • 式の中の比較演算。
  • 固定形式演算 IFxx、DOUxx、DOWxx、WHxx、CASxx、 CABxx、COMP を使用した比較。
  • 変換命令 MOVE および MOVEL に関しては、暗黙的な変換がすでにサポートされています。

UCS-2 変数の初期化が、%UCS2 組み込み関数を使用せずに文字リテラルまたは図形リテラルを使用して行えるようになりました。

コンパイル済みオブジェクトからの未使用変数の除去

新しい値 *UNREF と *NOUNREF が、CRTBNDRPG コマンドおよび CRTRPGMOD コマンドの OPTION キーワードと、制御仕様書の OPTION キーワードに追加されました。 デフォルトは *UNREF です。*NOUNREF は、参照されない変数を RPG モジュールに生成しないよう指示します。 これにより、プログラム・サイズは削減でき、 インポートされた変数が参照されない場合、モジュールをプログラムまたはサービス・プログラムに バインドするためにかかる時間を削減できます。

PCML をモジュールに保管可能

Program Call Markup Language (PCML) を、ストリーム・ファイルだけでなく、モジュールにも保管できるようになりました。 RPG プログラマーは、PGMINFO コマンド・パラメーターまたは制御仕様書の新規 PGMINFO キーワード、あるいはその両方の組み合わせを使用することにより、PCML 情報の保管先を選択することができます。 PCML 情報がモジュール内に置かれた場合は、後で QBNRPII API を使用して取り出すことができます。 この拡張は V5R4 の PTF によっても使用できますが、制御仕様書キーワードを介してのみ可能です。

表 1. V5R4 以降に変更された言語要素
言語単位 要素 説明
制御仕様書キーワード OPTION(*UNREF | *NOUNREF) 未使用の変数はモジュールに生成してはならないことを指定します。
THREAD(*CONCURRENT) 新規パラメーター *CONCURRENT では、複数のスレッドで 同時に実行可能です。
ファイル仕様書のキーワード EXTFILE(*EXTDESC) EXTDESC キーワードの値を EXTFILE キーワードでも使用するよう指定します。
組み込み関数 %ADDR(varying-field : *DATA) 現在は、可変長変数のデータ部分のアドレスを取得するために使用できます。
定義仕様書キーワード DIM(16773104) 配列は最大 16773104 要素を持つことができます。
EXTNAME('LIB/FILE') ファイル名のリテラルを許可します。リテラルにはファイルのライブラリーを 含むことができます。
OCCURS(16773104) 複数回繰り返しデータ構造は最大 16773104 要素を持つことができます。
VARYING {(2|4)} 長さ接頭部のバイト数を示すパラメーターを 取ることが可能になりました。
定義仕様書 長さ入力 データ構造、およびタイプ A、C、または G の定義に対して最大 9999999 と することができます。 (より長い項目を定義するには、LEN キーワードを 使用する必要があります。)
入力仕様書 長さ入力 英数字フィールドの場合は最大 99999 で、 UCS-2 および図形フィールドの場合は 99998 とすることができます。
演算仕様書 長さ入力 英数字フィールドの場合は最大 99999 とすることができます。
命令コード EXFMT フォーマット { result-ds } 結果入力にデータ構造を持つことができます。
表 2. V5R4 以降の新しい言語要素
言語単位 要素 説明
制御仕様書キーワード MAIN(subprocedure-name) プログラムのプログラム入力プロシージャーを指定します。
PGMINFO(*NO | *PCML { : *MODULE } ) プログラム情報をモジュールに直接置くかどうかを示します。
ファイル仕様書のキーワード STATIC サブプロシージャーへの呼び出し間で、ローカル・ファイルがプログラム状態を 保存することを示します。
QUALIFIED ファイルのレコード様式名は FILE.FMT のようにファイル名で修飾されていることを示します。
LIKEFILE(ファイル名) ファイルは他のファイルと同じように定義されることを示します。
TEMPLATE ファイルは後の LIKEFILE 定義でのみ使用されることを示します。
EXTDESC(constant-filename) 外部定義用にコンパイル時に使用される外部ファイルを 指定します。
定義仕様書キーワード STATIC(*ALLTHREAD) 静的変数の同じインスタンスが、モジュールで実行中の すべてのスレッドによって使用されることを示します。
LIKEFILE(ファイル名) パラメーターがファイルであることを示します。
TEMPLATE 定義は LIKE 定義または LIKEDS 定義に対してのみ使用されることを示します。
LEN(長さ) データ構造、または定義 A、C、または G の長さを指定します。
プロシージャー仕様書キーワード SERIALIZE プロシージャーが一度に 1 つのスレッドのみを実行できることを示します。