6.1 での変更点

この節では、6.1 の ILE RPG における機能強化について説明します。

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

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

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

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

修飾レコード様式

QUALIFIED キーワードを指定してファイルが定義されている場合には、レコード様式は MYFILE.MYFMT というファイル名を使用して修飾する必要があります。 修飾ファイルには、コンパイラーによって生成される入力仕様および出力仕様がありません。 入出力を実行するには、データ構造を使用する必要があります。

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

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(可変 : *DATA)

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

DIM および OCCURS の制限の拡大

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

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

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

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

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

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

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

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

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

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

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