REDUCE オプションは、埋め込みバイトに上書きすることになったとしても、構造体へのヌル・ストリングの割り当てを減らしてより単純な操作にすることをコンパイラーに許可します。
また REDUCE オプションは、構造体に POINTER フィールドが含まれていても、一致する構造体の割り当てを減らして単純な集合移動にすることをコンパイラーに許可します。
.-REDUCE---. >>-+-NOREDUCE-+------------------------------------------------><
NOREDUCE オプションを指定した場合、コンパイラーは構造体に対するヌル・ ストリングの割り当てを分解して、構造体の基本メンバーに対して ヌル・ストリングを連続して割り当てるようになります。
REDUCE オプションを使用すると、ヌル・ストリングを構造体に 割り当てるために生成されるコードの行数が少なくなり、 その結果として通常はコンパイルが高速になり、コードの実行速度が大きく向上します。しかし、埋め込みバイトはゼロにリセットされることがあります。
例えば次の構造体では、field12 と field13 の間に 1 バイトの埋め込み があります。
dcl
1 sample ext,
5 field10 bin fixed(31),
5 field11 bin fixed(15),
5 field12 bit(8),
5 field13 bin fixed(31);
ここで、割り当て sample = ’’; について考えてみます。
NOREDUCE オプションを指定した場合、4 つの割り当てが生成され、埋め込みバイトは変更されません。
一方 REDUCE を指定した場合、割り当てが減って 1 つの操作になりますが、埋め込みバイトはゼロにリセットされます。
NOREDUCE オプションを指定すると、コンパイラーは OS PL/I コンパイラーや PL/I for MVS コンパイラーに近い動作をします。 これらのコンパイラーは、構造体に POINTER フィールドが含まれていなければ、一致する構造体の割り当てを減らして単純な集合移動にします。 NOREDUCE オプションを指定すると、このコンパイラーは同じように動作するようになります。