先月、Microsoftは.NET 9の5番目のプレビューをリリースした。今年後半にリリースが予定されているこのフレームワークの新バージョンは、Standard Term Support(STS)リリースであり、2024年11月12日から2026年5月12日までの18ヶ月間、複数のOS上でサポートされる。このプレビュー版では、パフォーマンスが改善され、AI機能の強化、優先順位付けされた非バインドチャンネル、SearchValues
による部分的な文字列検索、OpenTelemetryのより柔軟なアクティブリンクなどの機能が提供される。
このリリースのもっとも重要な特徴の1つは、TensorPrimitives
と Tensor<T>
型のアップデートによるAI機能の拡張である。TensorPrimitive
クラスは、値のスパンに対して数値演算をするために静的メソッドを提供する。この更新により、クラスが公開するメソッドのスコープが大幅に拡張され、40個(.NET 8)から約200個のオーバーロードが追加された。パフォーマンスに関しては、SIMDに最適化された実装により、多くの演算が高速化されている。
前のリリースで導入された新しいTensor<T>
型は、(ML.NETのような)AIライブラリとの効率的な相互運用を提供することを目的としている。また、インデックス作成とスライス操作を提供することで、データ操作を可能にしている。さらに、TensorTensorPrimitives
上に構築されているため、TensorPrimitives
のアップデートの恩恵を受ける。
このリリースのもう1つの興味深いアップデートは、優先順位付けされた無制限チャネルである。無制限チャネルとは、格納できるアイテムの数に制限がないスレッドチャネルを指す。新しい優先順位付きチャネルは、System.Threading.Channels
ライブラリにCreateUnboundedPrioritized<T>
メソッドが追加されたことで提供される。新しいメソッドによって作成されたチャネルは、Comparer<T>.Default
またはファクトリメソッドに提供されたカスタムIComparer<T>
のいずれかに従って、その要素を順序付ける。以下の例では、チャネルに書き込まれた順序が異なっていても、1から5までの数字を順番に出力している。
using System.Threading.Channels;Channel<int> c = Channel.CreateUnboundedPrioritized<int>();await c.Writer.WriteAsync(1);await c.Writer.WriteAsync(5);await c.Writer.WriteAsync(2);await c.Writer.WriteAsync(4);await c.Writer.WriteAsync(3);c.Writer.Complete();while (await c.Reader.WaitToReadAsync()){ while (c.Reader.TryRead(out int item)) { Console.WriteLine(item); }}
出典:Microsoft
.NET 8で導入されたSearchValues
型は、スパン内の検索に最適化されたソリューションを提供する。.NET 9では、この型はより大きな文字列内の部分文字列の検索をサポートするように拡張された。これは、基礎となるプラットフォームのSIMDサポートを利用するために最適化された別の実装である。その結果、(Regex
のように)この機能を実装の一部として使用する、より高いレベルの型も最適化される。
System.Diagnostics.Activity.AddLink
メソッドの追加により、OpenTelemetryのアクティビティリンクがより柔軟になった。これは、アクティビティオブジェクト
の作成後に、アクティビティオブジェクト
を他のトレースコンテキストにリンクさせるもので、OpenTelemetry の仕様により合致している。
特に、新しいTask.WhenEach
メソッドは、awaitforeach
を使って、タスク
の完了を繰り返し実行可能だ。また、TypeDescriptor
クラスのトリミングサポート、ECMA-335型名を解析するための新しいTypeName
クラス、Spanoverloads
でのparams
のパフォーマンス向上も含まれている。
このリリースの詳細については、こちらを参照してほしい。.NET 9 Preview 5はLinux、macOS、Windowsで利用可能だ。