ニュース

Microsoft、「.NET 8」をリリース ~「PGO」とネイティブ「AoT」でパフォーマンス向上

3年間の長期サポートを保証したLTS版、「C# 12」の言語強化も

Microsoft、「.NET 8」をリリース

 米Microsoftは11月14日(現地時間)、「.NET 8」をリリースした。「.NET 6」に続く新しい長期サポート(LTS)リリースで、3年間のサポートが保証される。

 「.NET 8」は、クロスプラットフォーム対応のアプリ開発フレームワーク「.NET」の最新版。パフォーマンス、安定性、セキュリティの面で数千もの改善が行われたほか、開発者の生産性とイノベーションのスピードを向上させるプラットフォームとツールの強化が含まれる。

 なかでも主眼は、負荷に応じてオンデマンドでスケールする高トラフィックサービスを構築するための技術スタック「.NET Aspire」と、OpenAIの「GPT」に代表される大規模言語モデル(LLM)を.NETアプリに直接統合できるようにしたことだ。時代の要請に即した強化が行われている。

 パフォーマンス面では、「PGO」とネイティブ「AoT」への対応が目玉。

 「PGO」(Dynamic Profile-Guided Optimization)は「.NET 6」で導入されたコードジェネレーターで、まず一度高速なコンパイルを行い(Tier 0)、その動作を解析(プロファイル)した結果を利用して、さらに最適化のためのコンパイルを行う(Tier 1)。Tier 0には処理を観察するコードが含まれるため、少し起動時間が長くなるが、Tier 1まで実行されれば大幅なパフォーマンス向上が見込める。同社によると、アプリケーションのパフォーマンスが最大20%向上するとのこと。

 「.NET 8」ではこの「PGO」が既定で有効化されている。AVX-512命令セットがサポートされ、512ビットのベクトルデータに対して並列演算を実行できるようになったことや、プリミティブ型がフォーマットおよびパース可能な新しいインターフェイスを実装し、トランスコーディングのオーバーヘッドなしにUTF-8として直接扱えるようになったことも、パフォーマンス向上に寄与しているようだ。

「ASP.NET Core」アプリでの改善。1秒あたりリクエスト(RPS)は30万を超え、24%向上

 一方の「AoT」(Ahead-Of-Time)は、インタープリターで実行される中間言語(IL)コードではなく、ネイティブコードへコンパイルする手法。JIT(ジャストインタイム)コンパイラーが実行時にコードをコンパイルするのを待ったり、JITコンパイラーとILコードを一緒にデプロイする必要がなくなり、ファイルサイズの削減、メモリ消費量の削減、スタートアップ時間の短縮といったメリットが得られる。JITコンパイラーが許可されていない制限環境で実行できるのも利点だ。

「AoT」コンパイルによるパフォーマンス改善
「AoT」対応の「ASP.NET Core」アプリテンプレート

 さらに、「.NET 8」では「C# 12」がサポートされる。「C# 12」ではざまざまな言語機能の改善が行われているが、なかでもコレクション式(List<int>やint[]、Span<int>など)の記法が統一され、シンプルになったのは恩恵が大きいだろう。コンパイラーによる最適化も効く。新しいスプレッド演算子(..)を利用すれば、新しいコレクションに複数のコレクションを含めるのも簡単だ。

「C# 12」ではコレクション式の記法が統一。新しいスプレッド演算子(..)も利用可能に

 そのほかにも「Blazor」や「.NET MAUI」といったフレームワークでも機能強化や改善が図られている。

 「.NET 8」は、同日リリースされた「Visual Studio 2022」v17.8との組み合わせでポテンシャルを発揮する。また、先日一般提供が開始された「Visual Studio Code」向けの拡張機能「C# Dev Kit」でもサポートされており、macOS/Linuxや「GitHub Codespaces」などで手軽に「.NET 8」を始めることができる。