一般的なシステム制限
このページでは、InterSystems IRIS® のシステム制限のいくつかを示します。
識別子の名前の制限については、"識別子のルールとガイドライン" を参照してください。
その他のシステム全体の制限は、"構成パラメータ・ファイル・リファレンス" を参照してください。
文字列長の制限
文字列の値の長さには、3,641,144 文字という制限があります。
Important:
“文字列” は、入出力デバイスからの読み取りの結果に限られないことを理解することが重要です。その他のコンテキストでも、文字列は出現します。例えば、結果セット (SQL クエリ、多数の項目を含む $LIST の構築、または XSLT 変換などの出力として返される) の行に含まれるデータのコンテキストにも文字列が出現します。
クラスの制限
以下の制限はクラスにのみ適用されます。
クラス継承階層
制限 : 50。1 つのクラスは最大 50 階層までのサブクラスを作成できます。
クラスおよびルーチンの制限
以下の制限はクラスとルーチンに適用されます。
クラス・メソッド参照
制限 : 1 ルーチンまたは 1 クラスあたり 32768 の一意の参照。
以下は、メソッド名が同じでもクラス名が異なるため、2 つのクラス・メソッド参照としてカウントされます。
Do ##class(c1).abc(), ##class(c2).abc()
クラス名参照
制限 : 1 ルーチンまたは 1 クラスあたり 32768 の一意の参照。
例えば、以下は 2 つのクラス名参照としてカウントされます。
Do ##class(c1).abc(), ##class(c2).abc()
同様に、以下も、2 つのクラス参照としてカウントされます。これは、%FileOpens in a new tab から %Library.FileOpens in a new tab への正規化がコンパイル時ではなく実行時に行われるためです。
Do ##class(%File).Open(x)
Do ##class(%Library.File).Open(y)
インスタンス・メソッド参照
制限 : 1 ルーチンまたは 1 クラスあたり 32768。
X と Y が OREF の場合、以下は、1 つのインスタンス・メソッド参照としてカウントされます。
Do X.abc(), Y.abc()
多次元プロパティへの参照は、インスタンス・メソッドとしてカウントされます。これはコンパイラがこれらを区別できないためです。例えば、以下の文を考えてみます。
Set var = OREF.xyz(3)
コンパイラは、この文が xyz() メソッドを参照しているか、または多次元プロパティ xyz を参照しているかを区別できません。そのため、コンパイラはこれを、インスタンス・メソッド参照としてカウントします。
行数
制限 : 1 ルーチンあたり 65535 行 (コメント行を含む)。この制限は、INT 表現のサイズに適用されます。
リテラル (ASCII)
制限 : 1 ルーチンまたは 1 クラスあたり 65535 の ASCII リテラル。
ASCII リテラルは、どの文字も $CHAR(255) を超えない 3 つ以上の文字を含む引用符付き文字列です。
ASCII リテラルと Unicode リテラルは別々に処理され、個別の制限があります。
リテラル (Unicode)
制限 : 1 ルーチンまたは 1 クラスあたり 65535 の Unicode リテラル。
Unicode リテラルは、1 つ以上の文字が $CHAR(255) を超える引用符付き文字列です。
ASCII リテラルと Unicode リテラルは別々に処理され、個別の制限があります。
パラメータ数
制限 : サブルーチン、メソッド、またはストアド・プロシージャあたり 255 のパラメータ。
プロパティ読み取り参照
制限 : 1 ルーチンまたは 1 クラスあたり 32768。
この制限は、以下の例のように、プロパティの値の読み取りに関するものです。
Set X = OREF.prop
プロパティ設定参照
制限 : 1 ルーチンまたは 1 クラスあたり 32768。
この制限は、以下の例のように、プロパティの値の設定に関するものです。
Set OREF.prop = value
ルーチン参照
制限 : 1 ルーチンまたは 1 クラスあたり 65535。
この制限は、ルーチンまたはクラスの一意の参照 (^routine) の数に適用されます。
ターゲット参照
制限 : 1 ルーチンまたは 1 クラスあたり 65535。
ターゲットは label^routine (ラベルとルーチンの組み合わせ) です。
ターゲット参照はルーチン参照としてもカウントされます。例えば、以下は 2 つのルーチン参照と 3 つのターゲット参照としてカウントされます。
Do Label1^Rtn, Label2^Rtn, Label1^Rtn2
変数 (プライベート)
制限 (ObjectScript) : 1 プロシージャあたり 32763。
変数 (パブリック)
制限 (ObjectScript) : 1 ルーチンまたは 1 クラスあたり 65503。
変数名やその他の識別子の長さ制限の詳細は、"識別子のルールとガイドライン" を参照してください。
その他のプログラミング制限
以下のテーブルに、コードを記述する際に関連するその他の制限を示します。
{} による入れ子
制限 : 32767 レベル。
これは、中括弧を使用するあらゆる言語要素の入れ子の最大の深さです。例 : IF { FOR { WHILE {...}}}
グローバル参照、長さ
制限 : 511 文字 (エンコードされた文字数、入力した文字数 511 より少なくなる場合があります)。グローバル参照という用語は、グローバルの名前と、その添え字をすべて合わせたものを指します。詳細は、"グローバルの使用法" の "グローバル参照の最大長" を参照してください。