静的読み取り専用フィールドと静的コンストラクターのサポート
Burst では、すべての静的フィールドとすべての静的コンストラクターをコンパイル時に評価します。1 つの構造体の静的フィールドと静的コンストラクターはすべて一緒に評価されます。
Burst のコンパイル対象となる構造体に読み取り専用ではない静的フィールドがある場合、コンパイルエラーが発生します。Burst がサポートしているのは、読み取り専用の静的フィールドだけだからです。
Burst で静的フィールドまたは静的コンストラクターを評価できなかった場合、その構造体のすべてのフィールドとコンストラクターがエラーになります。
コンパイル時の評価に失敗した場合、Burst ではフォールバックとして、ランタイムに 1 回呼び出される初期化関数にすべての静的初期化コードをコンパイルします。つまり、コードには Burst との互換性が必要であり、コンパイル時の評価に失敗した場合はコンパイルに失敗します。
例外として、静的な読み取り専用の配列フィールドを配列コンストラクターまたは静的データから初期化する場合に限り、このフィールドを初期化できます。
static readonly int[] MyArray0 = { 1, 2, 3, .. };
static readonly int[] MyArray1 = new int[10];
言語のサポート
Burst では、外部関数と関数ポインターの呼び出しはサポートされません。
静的な読み取りフィールドとコンストラクターでは、以下の基本言語を使用可能です。
- マネージ配列
- 文字列
- 限定的な intrinsic のサポート:
Unity.Burst.BurstCompiler.IsEnabled
Unity.Burst.BurstRuntime.GetHashCode32
Unity.Burst.BurstRuntime.GetHashCode64
- ベクトル型のコンストラクション
- 限定的な intrinsic アサーションのサポート:
UnityEngine.Debug.Assert
NUnit.Framework.Assert.AreEqual
NUnit.Framework.Assert.AreNotEqual
- シンプルな throw パターン。評価時に例外がスローされるとコンパイルエラーになります。