コンパイラ ディレクティブは Curl® コンパイラの動作を変更します。
たとえば、ディレクティブを使用して特定の種類のエラーを有効または無効にしたり、
コード パフォーマンスの基準を示すことができます。
この章ではコンパイラ ディレクティブについて説明します。
ディレクティブを指定するには 2 通りの方法があります。
構文: | {compiler-directives
list-of-compiler-directives
}
|
説明: | |
たとえば、次のパッケージ宣言にはコンパイラ ディレクティブが含まれています。
{package MY-PACKAGE,
{compiler-directives
careful? = true
}
}
構文: | {with-compiler-directives
list-of-compiler-directives
do
code-block
}
| |
value 式と同様に、
with-compiler-directives 式は
最後に実行された式の値を返します。たとえば、次の式では
any
データ型のオブジェクトに対してメソッドを呼び出します。
{with-compiler-directives
allow-any-calls? = true
do
let some-object:any = {some-function}
{some-object.foo}
}
現在サポートされているコンパイラ ディレクティブは次のとおりです。
- allow-any-calls?
この ブール値 のディレクティブは、
any データ型の変数に対してコードにクラス
メンバの呼び出しを含めることができるかどうかを示します。
any データ型の使用とは、Curl® 実行環境
(RTE) がコンパイル時ではなく実行時にデータ型のチェックを
実行することを意味します。実行時のデータ型のチェックの短所は、
エラーが検出されない可能性があること、ランタイム リソースの
要求が増加することなどです。
true の場合、このような呼び出しが許可されます。
false の場合、このような呼び出しは許可されません。
このディレクティブの既定値は true です。 - allow-deprecated?:bool = false
もし設定された場合は、コンパイラは非奨励のAPIの使用をチェックしません。 - allow-implicit-any-casts?
この ブール値 の
ディレクティブは、any データ型の値に対してコードに暗黙的な
キャストを含めることができるかどうかを示します。any データ
型の値の暗黙的キャストは、実行時にパフォーマンスの負担が生じ、
実行時のタイプ エラーを引き起こす可能性があります。
true の場合、このような値の暗黙的キャストが許可されます。
false の場合、このような値の暗黙的キャストは許可されません。
このディレクティブの既定値は trueです。 - allow-implicit-any-declarations?
この ブール値
のディレクティブは、データ型を指定しない宣言をコードに
含めることができるかどうかを示します。宣言でデータ型が指定されていない場合、
既定で any データ型と見なされます。これは、変数、
パラメータおよび戻り値に対して適用されます。any
データ型を使用すると、実行時にパフォーマンスの負担が生じ、
実行時のタイプエラーを引き起こす可能性があります。
true の場合、データ型を指定しない宣言が許可されます。
false の場合、このような宣言は許可されません。
このディレクティブの既定値は true です。 - allow-some-implicit-casts?
このブール値ディレクティブは、以下のような暗黙的なキャストが行われるかどうかを示します。:
- 非定数の String値から、列挙型の値への暗黙的なキャスト。例えば
{proc {s:String}:FontStyle
{return s}
}
あるいは、このようなキャストを行う為には明示的にasaを使用するか、EnumType.new-from-nameのようなメソッドを使用してください。
コンパイル時に定数文字列からの暗黙キャストが許可されます。 - #proc型から、非#proc型への暗黙的なキャスト。例えば
{proc {p:#{proc {}:void}}:{proc {}:void}
{return p}
}
あるいは、このようなキャストを行うために明示的にasaまたは、non-nullまたは、unchecked-non-nullを使用してください。 - for 範囲ループにおけるend-rangeとstep-valueの暗黙的なダウンキャスト。例えば、
{for i = 1 to 5.5 step 1.1 do ...}
このケースにおける反復値は、1によって、int型と推定されます。ですから、ステップ値1.1と終了値 5.5はキャストされなければなりません。
このディレクティブは、このようなキャストを暗黙的に行います。
あるいは、このようなキャストを行う為には明示的に、asaを使用してください。
このディレクティブは、下で説明されるallow-implicit-downcasts?ディレクティブによって暗黙的に定義されます。
このコンパイラディレクティブは、5.0APIからの実装です。
主として3.0APIから5.0APIへの移行をしやすくすることを目的にしています。
このディレクティブの既定値はtrueです。 - allow-implicit-downcasts?
この ブール値
のディレクティブは、暗黙的なダウンキャストをコードに含めることが
できるかどうかを示します。暗黙的なダウンキャストとは、
スーパークラスからサブクラス、または、ひとつの数値タイプから別の数値タイプ
(変換時に正確な値が保たれない可能性がある)への暗黙的変換です。
2 つのクラス型の暗黙的なダウンキャストは実行時にパフォーマンス コストが生じ、実行時のタイプエラーを引き起こす可能性があります。2 つの数値型の暗黙的なダウンキャストでは、実行時のパフォーマンス コストおよびタイプエラーは発生しませんが、多少精度を欠く可能性があります。
true の場合、コード内の暗黙的なダウンキャストが許可され、allow-some-implicit-casts?ディレクティブにはtrueがセットされます。
false の場合、コード内の暗黙的なダウンキャストは許可されません。
asa を使用して明示的にキャストする必要があります。
このディレクティブの既定値は false です。 - allow-implicit-open?
この ブール値のディレクティブは、
コードで既定のサブクラス属性 (open) を暗黙的に使用できるかどうかを
示します。有効なサブクラス属性は open, sealed および
final です。サブクラス属性を指定しない場合、アイテムは既定で
open になります。open 属性とは、クラスを含むパッケージの
外側のサブクラスがクラスまたはそのメンバをオーバーライドできることを示します。
true の場合、定義で既定のサブクラス属性の暗黙的な使用が許可されます。
false の場合、すべての定義に明示的なサブクラス属性を含める必要があります。
サブクラス属性を明示的に指定すると、コンパイラでコードが最適化される可能性が増加します。
このディレクティブの既定値は true です。 - allow-import-locations?
これが false に設定され、現在のコンパイル ユニット (アプレット、パッケージまたはスクリプト) でそのメタデータに manifest が指定されている場合、import ステートメントで明示的な location を指定するとエラーが生成されます。詳細は import を参照してください。このディレクティブの既定値は true です。 - allow-implicit-package-protection?
この ブール値 のディレクティブは、
コードが既定のアクセス属性 (package) を暗黙的に使用できるかどうかを示します。
有効なアクセス属性は public、package、private または
protected です。アクセス属性を指定しない場合、定義は package
プロテクトを使用します。
true の場合、定義で既定のアクセス属性の暗黙的な使用が許可されます。
false の場合、すべての定義に明示的なアクセス属性を含める必要があります。
このディレクティブの既定値は true です。 - allow-useless-compares?:bool = true
これは、コンパイラが「無益な」比較について警告するかどうか制御します。具体的には、false に設定すると以下の場合について警告します。
- null と null にはならないタイプの値の比較
- 結果が true または false になる数的比較
(例: uint8 と -1 の比較)
- allow-slow-spliced-arguments?
この ブール値 のディレクティブは、
残余引数の高度な使用をコードに含めることができるかどうかを示します。
残余引数の高価な使用とは、残余引数が受け取り側の関数の残余引数と同じ位置にない場合、
また受け取り側の関数がキーワード引数を取る場合に、残余引数の関数への引渡しを行なうこと
を意味します。
true の場合、残余引数の高価な使用が許可されます。
false の場合、残余引数の高価な使用は許可されません。
このディレクティブの既定値は true です。 - strict-serialization?
このブール値のディレクティブは、transientでないフィールドを含むシリアル化できないクラスを継承している serializable と記述されたクラスに対し、エラーを生成するかどうかをコントロールします。 詳細は「シリアル化」を参照してください。 このディレクティブの既定値は false です。 このディレクティブはバージョン 6.0 のAPIから採用されました。 以前は、このようなエラーは検出されませんでした。 - fast?
この ブール値 のディレクティブは、他のディレクティブを多数設定して、
コード内のコンストラクトの 遅延の可能性を削減します。他のディレクティブが
Curl® 言語の将来のバージョンに追加されるため、このディレクティブの
詳細は今後変更する可能性があります。
現時点では、このディレクティブを true に設定すると、以下の指定と同じになります。
allow-any-calls? = false
allow-implicit-any-casts? = false
allow-implicit-any-declarations? = false
allow-implicit-downcasts? = false
allow-slow-spliced-arguments? = false
- safe?
この ブール値 のディレクティブは、
他のディレクティブを多数設定してランタイム エラーの可能性を削減します。
他のディレクティブが Curl 言語の将来のバージョンに追加されるため、この
ディレクティブの詳細は今後変更する可能性があります。現時点では、
現時点では、このディレクティブを true に設定すると、以下の指定と同じになります。
allow-any-calls? = false
allow-implicit-any-casts? = false
allow-implicit-any-declarations? = false
allow-some-implicit-casts? = false
allow-implicit-downcasts? = false
strict-serialization? = true
- careful?
この ブール値 のディレクティブは、
他のディレクティブを多数設定して、コンパイル時にコードの問題
エリアが推奨レベルにおいて検出されるようにします。他のディレクティブが
Curl 言語の将来のバージョンに追加されるため、このディレクティブの
詳細は今後変更する可能性があります。現時点では、このディレクティブの
設定は次のとおりです。
fast? = true
safe? = true
- stringent?
この ブール値 のディレクティブは、
他のディレクティブを多数設定して、コンパイル時にコードの問題
エリアが最大限に検出されるようにします。他のディレクティブが
Curl 言語の将来のバージョンに追加されるため、このディレクティブの
詳細は今後変更する可能性があります。現時点では、このディレクティブの
設定は次のとおりです。
careful? = true
allow-implicit-open? = false
allow-implicit-package-protection? = false
- allow-implicit-float-to-double-casts?
この ブール値 のディレクティブは、暗黙的なダブル キャストをコードに含
めることがきるかどうかを示します。
暗黙的なダブル キャストとは、
浮動小数点表現(float)から
(double)表現への暗黙的な数値変換のことです。暗黙的なダブル キャストでは、
サイズの大きな double 表現のオーバーヘッドによる遅いコード パスを隠すことが
できます。
true の場合、暗黙的なダブル キャストが許可されます。false の場合、
暗黙的なダブル キャストは許可されません。
このディレクティブの既定値は true です。
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.