![]() | 拡張言語機能 | 保護違反エラーへの対処 | ![]() |
この章では、Server Express で各種パラメータに適用されるサイズ上の制限と、開発時に留意すべき COBOL の構文およびプログラミング関連の制限について説明します。これらの制限は、いずれも X/Open CAE (共通アプリケーション環境 ) の COBOL 言語移植性ガイド (XPG4) で定義されている制限と同等、または多少緩やかに設定されています。
Server Express では、使用する環境に応じて留意すべき 3 種類の制限があります。つまり、COBOL コンパイラによる制限、COBOL ランタイムシステムによる制限、および外部要因による制限です。
COBOL コンパイラとそれが生成する中間コードは、オペレーティングシステムやハードウェア環境に依存しません。そのため、これらに関する制限もすべての環境で共通であり、どの環境においてもその限界を超えることはできません。しかし、COBOL ランタイムシステムによる制限は、コンパイラよりやや厳しくなることがあります。これは、ランタイムシステムの構造や動作が、オペレーティングシステムやハードウェアによって間接的に影響を受ける場合があるためです。さらに、オペレーティングシステムやハードウェアの構成により、コンパイラおよびランタイムシステムより厳しい制限が課せられる場合もあります。
ファイル、レコード、およびそのサイズに関する制限については、『ファイル操作』の『ファイル処理制限』の章を参照してください。
次では、コンパイラ、ランタイムシステム、および外部要因による制限を具体的に示します。いずれの説明でも、Server Express システムで使用する各種パラメータとその上限サイズまたは上限値をカテゴリごとの一覧を示します。左側の列にパラメータ、右側の列に許容される上限値とその単位を示しています。
COBOL コンパイラとそれが生成する中間コードは、オペレーティングシステムやハードウェア環境に依存しません。そのため、コンパイラによる制限はすべての環境で共通であり、どの環境でもその限界を超えることはできません。
ランタイムシステムやオペレーティングシステムによる制限は、コンパイラによる制限より厳しい場合がありますから、次のコンパイラ関連の制限に加え、以降で紹介するランタイムシステムとオペレーティングシステムによる制限も考慮する必要があります。
英数字/集団項目 | 256 MB |
英数字編集/数字編集項目 | 最大 32 個の構成部分のそれぞれに文字型の編集項目を 16 個まで格納可能。合計サイズは最大 512 バイト。 |
数字項目 | 18 桁 |
COMP/COMP-5 型 | 8 バイト |
EXTERNAL データ項目 | 特に制限なし |
ファイルレコード | 62 KB |
ACCEPT FROM CONSOLE | 上限サイズはオペレーティングシステムに依存。『Server Express ユーザガイド』の『Terminfo データベースおよび端末装置』を参照。 |
全画面の DISPLAY/ACCEPT | 画面の文字数 - 1 (画面の最終文字は使用不可) |
ANSI DISPLAY | 制限なし |
英数字定数 | 160 バイト |
PICTURE 文字列 | 30 文字 |
PICTURE 文字列繰返し表記 (PIC X(n) の n など) | 256,000,000 |
PROGRAM-ID 名 | 30 文字 |
入口点名 | 30 文字 |
開発者定義語 | 30 文字 |
外部ファイル名 (プログラムのソースファイル、オブジェクトファイル、コピーファイル、データファイルなど) | 100 文字。後述の『ファイル名』を参照。 |
動的にロード可能なプログラム名 | 100 文字またはシステムの上限値 (いずれか小さい方)。最初の 30 文字が一意であること。 |
CALL 文 | 255 |
手続き部のヘッダー | 255 |
ENTRY 文 | 255 |
合計サイズ | 制限なし |
データ部 | 256 MB |
手続き部 | 816 MB |
COBOL 区分化 | 16 MB |
1 つのファイル内のレコード | 制限なし (ファイルの種類にかかわらず共通) |
ソースの行数 | 999,999 |
データおよびプロシージャ名 | 64,000 |
ホスト変数 | 8,000 またはデータベースシステムの上限値 (いずれか小さい方) |
定数 | 制限なし |
COPY 仮原文内の語 | 65,000 |
COPY REPLACING 文内の BY 句 | 65,000 |
固定形式行全体 | 80 バイト |
有効な固定形式行 | 72 バイト |
フリー形式行 | 160 バイト |
プログラム内の USE GLOBAL AFTER 文の数 | 20 |
合計サイズ | 制限なし |
OCCURS 句のネスト | 制限なし |
画面節の内部 | 特に制限なし |
次元数 | 16 |
画面節の OCCURS 句 | 項目数と項目の階層の両方、または一方によって左右されるため、特定の上限値は明示できない。ただし、上限を超えるとプログラムのコンパイルでエラーが発生する。 |
COBOL アプリケーションを実行するオペレーティングシステムやハードウェアによっては、COBOL ランタイムシステムが構造や動作面で影響を受け、コンパイラの場合より制限が厳しくなることがあります。次にランタイムシステムによる制限を示します。これらの制限に加え、オペレーティングシステムによる制限を考慮する必要があります。
IF (コンパイル済みコードのみ) | 255 |
PERFORM | 22 以上
『PERFORM のネスト』を参照。 |
CALL | ランタイムシステムによる制限は特になし。オペレーティングシステムが割り当てるスタックの容量に左右される。 |
プログラムの実行およびアニメート時 | COBCONFIG 変数で調整可能。 |
オペレーティングシステムやハードウェアの構成とパラメータ設定は、COBOL アプリケーションに直接的な影響を与えます。これらの要因による制限を正確に把握するためには、実際にオペレーティングシステムとハードウェアの構成を調べる必要があります。ここでは、影響を受ける可能性の高い項目を示します。
CALL のネスト | オペレーティングシステムが割り当てるスタックの容量に左右される。 |
データとプロシージャの合計サイズ | 利用可能なメモリの空き容量によって左右される。 |
並行してロードできる副プログラム数 | 利用可能なメモリの空き容量によって左右される。 |
環境変数 | アプリケーションの実行中には最大 64 KB のメモリを環境変数に使用できる (ただし、物理メモリの空き容量によっては 64 KB 未満)。 |
コマンド行の長さ | コマンド行の最大長はオペレーティングシステムによって異なる。 一部のツールはコマンド行を 128 文字までに制限しているが、ユーザ側で開発するアプリケーションではオペレーティングシステムによる上限値を優先すべきである。 |
ここでは、Server Express に実装されていない COBOL 構文と、その他の開発環境による制限について説明します。開発時には、実装されていない構文に十分に注意する必要があります。
次の COBOL 構文は、『言語リファレンス』では言及されていますが、Server Express ではサポートされていません。
どちらの項目も ANSI 規格では定義されていません。
次の OS/VS COBOL 構文はサポートされていません。
ALTER 文の使用はできる限り避け、使用する場合も十分に注意するようにしてください。正しく使用しないと予想外の問題が生じる可能性があります。区分化したプログラムでは、1 つの区分から他の区分を変更すべきではありません。ただし、そのように変更しても、コンパイル時にエラーは通知されません。コンパイラは該当する区分を検出すると、そのコードを変更します。
入口点は、プログラム内でいくつかの処理単位に分ける手段の 1 つです。ENTRY 文で定義された入口点は、PROGRAM-ID で指定したおもな入口点が呼び出されない限り、呼び出されることはありません (ただし、プログラムが静的にリンクされている場合を除く)。
ネストしたプログラムでは ENTRY 文は使用できません。
入口点の詳細については、『プログラムの呼び出し』と『複数の言語による開発』の章を参照してください。
COBOL プログラムは、各ファイルをファイル名を使用して識別します。この場合のファイル名とは、ユーザが定義した名前です。COBOL システムの外部でも同様にファイル名が使用されますが、この場合のファイル名とはオペレーティングシステムで定義されている形式の文字列です。DOS、Windows、および OS/2 で使用されるファイル名の形式は共通です。UNIX で使用される形式も類似していますが、同じではありません。DOS 形式のファイル名がドライブ、パス、基本名、および拡張子で構成されるのに対し、UNIX 形式はパスと名前で構成されます。
Server Express では、外部ファイル名は 100 字までに制限されます。その他に制限はありませんが、オペレーティングシステムにファイル名を正しく処理させるためにも、アプリケーションの実行時にはオペレーティングシステムによる制限に従う必要があります。一部のオペレーティングシステムでは 100 文字を超えるファイル名を付けることも可能ですが、そのようなファイル名を COBOL アプリケーションで直接使用することはできません。
UNIX 環境でも、基本名と拡張子を含む DOS 型のファイル名は便利です。COBOL アプリケーションでは、そのようなファイル名を使用するかを開発段階で選択できます。Server Express のユーティリティでは DOS 型のファイル名が使用されます。CBL_SPLIT_FILENAME と CBL_JOIN_FILENAME の 2 つのライブラリルーチンも、オペレーティングシステム間の移植性を高めるため、DOS 型のファイル名に対応しています (詳細については、『ライブラリルーチン』の章を参照してください)。UNIX 環境で DOS 型のファイル名を使用する場合、ファイル名はパス、基本名、および拡張子で構成されます。
パス、基本名、および拡張子の最大長は、いずれも 100 文字までです。
ただし、オペレーティングシステムによる制限が COBOL システムによる制限より厳しい場合には、前者が優先されます。詳細については、使用しているオペレーティングシステムのマニュアルを参照してください。
局所記憶節 (LOCAL-STORAGE SECTION) の最大サイズはオペレーティングシステムによって異なります。パフォーマンスと処理効率を向上させるためにも、局所記憶節には不要な記述を避け、できる限り小さくまとめるべきです。
ネストを含むプログラムには、局所記憶節は記述できません。
PERFORM の標準的なネスト階層数は、.int ファイルで 100 レベルまで可能です。 .gnt ファイルでの上限レベルは、オペレーティングシステムが割り当てたメモリの容量に左右されます。
アニメート可能な PERFORM のネストは 254 レベルまでです。アニメート中に上限レベルに達すると、Animator は ズームモードの指定にかからわず、それを超えたレベルを無視します。
ANSI 規格では、数値の桁数は 10 進数で 18 桁までに制限されており、それを超える桁は無効です。
Server Express は、次のいずれかの状態を検出すると、けたあふれ条件 (ON SIZE ERROR) が成立します。
コアヒープの上限サイズは、ディスクの空き容量によってのみ制限されます。
Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用している固有の商標および商品名は国際著作権法で保護されています。
![]() | 拡張言語機能 | 保護違反エラーへの対処 | ![]() |