出来事の日付:2026年11月10日。
Microsoftは.NET 11で予定する大幅なランタイム変更の詳細を示した。プロセッサーの最低要件の引き上げ、事前コンパイルで対象とする機能の拡大、ランタイムが管理する非同期実行のプレビューなどが含まれる。リリース向けに提供されたドキュメントはリリース候補版2までの内容を反映したものであり、開発者は正式版が出るまでは仕様をリリース前のものとして扱うべきだ。
互換性への最も直接的な変更は、x86-64システムに関するものだ。.NET 11はWindows、Linux、Appleの各プラットフォームで、最低要件をx86-64-v1からx86-64-v2へ引き上げる。これにより、従来の要件に加え、SSE3、SSSE3、SSE4.1、SSE4.2、POPCNT、CX16などの命令をプロセッサーが備える必要がある。Microsoftによると、この変更は.NETを、Intel、AMD、現行のWindowsバージョンが引き続きサポートするハードウェアに合わせるものだ。古いCPUで起動したアプリケーションは、不足している必須命令を示すメッセージとともに動作に失敗する場合がある。
事前コンパイルしたアプリケーションコードを配布するReadyToRunコンパイルは、WindowsとLinuxで、より上位のx86-64-v3機能セットを対象にできる。このセットにはAVX、AVX2、BMI1、BMI2、FMAおよび関連する命令が含まれる。その対象に満たない場合でも、サポート範囲内のマシンであればソフトウェアを実行できるが、起動時のJIT(実行時)コンパイルが増える可能性がある。AppleプラットフォームのReadyToRunの対象は変わらない。
Arm64の扱いはOSごとに異なる。Linuxは幅広い機器に対応する最低要件を維持し、Raspberry Piなどのデバイスへの対応を保つ一方、ReadyToRunの対象にはLSE命令セットを追加する。WindowsはArm64の最低要件を引き上げてLSEを必須とし、ReadyToRunの対象もより新しいものに設定する。Microsoftによると、Apple siliconは関連する機能をすでに備えているため、最低要件の変更は不要だ。
もう一つの大きな追加機能であるRuntime Async V2は、中断と再開の処理を、コンパイラーが生成するステートマシンクラスからランタイムへ移すプレビュー機能だ。Microsoftによると、この手法は実行中のコールスタックを分かりやすくし、awaitの境界をまたぐデバッガーの動作を改善するとともに、メモリー割り当てや継続処理のオーバーヘッドの一部を減らす。.NETのランタイムライブラリー自体も新たな方式で構築されており、機能は内部で幅広く使われることになる。
開発者はプロジェクト設定を通じてランタイムの非同期処理を有効にでき、UseRuntimeAsyncをfalseに設定して無効にすることもできる。この実装は、通常のJITコンパイルだけでなくNativeAOTとReadyToRunにも対応する。また、引き継いで保持する暗黙の状態がない場合は、ExecutionContextのキャプチャーと復元を省くことができ、高スループットの非同期コードで処理を減らせる。
これらの変更は、.NETが非常に古いハードウェアへの対応を手放す代わりに、ランタイムの簡素化と標準のコード生成の強化を進めると同時に、現代のアプリケーション開発で最も一般的な実行パターンの一つについて、より根本的な再設計を試していることを示している。.NET 11を評価するチームは、リリース候補版を採用する前に、配備先のCPUと診断ツールの両方をテストする必要がある。



