操作によっては、生成されたコードのシーケンスが非常に長くなる場合があります。これには、以下の操作が含まれます。
- 長さが一定しない操作や開始位置が一定しない操作を含む || (連結)。
- 大きいテーブル (通常 256 バイト) をビルドする VERIFY、TRANSLATE などの特定の BUILTIN では、特定のランタイム評価引数を避けます。たとえば、すべてのカンマとピリオドを空白に変換する以下の TRANSLATE の例では、最初の使用法の方が 2 番目よりもはるかに効果的に動作します。
- target = TRANSLATE(source, ' ', ',.');
- target = TRANSLATE(source, two_blanks, comma_period); DCL (two_blanks init(''), comma_period init(',.')) char(2) static;
- オペランド型に対する操作の例:
DCL f fixed bin(31) init(1111);
DCL c char(8);
c = ‘1234’;
f = f + c;
追加の前に、文字から固定バイナリに変換する必要があります。
その他の例:
c = c + f;
c を文字から (固定バイナリに) 変換し、追加後に変換し直す必要があります。その場合、c を固定 BIN (31) として宣言します。
- 反復 DO 文では、BY 値が負になっている場合、制御変数が TO の値以下になるまで、BY 値の単位で減らされます。つまり、BY 値が符号付き定数でない限り、コンパイラはデクリメントおよびインクリメント ループを処理できるコードを生成する必要があります。可能であれば、BY に定数値を使用します。