新しいPowerToys v0.100.0のリリースノートをみると、.NET 10に切り替えたことでパフォーマンスが向上し、インストーラーが15%小さくなってダウンロード時間が短縮した、とある。.NET 10とは、Microsoftの.NET Ver.10のこと。.NETに関しては、過去記事「窓辺の小石(119) .NETから一言」で簡単に解説した。現在では、.NETは毎年バージョンアップされ、2年または3年でサービス終了というサイクルを保っている。これについては以下に解説がある。
■.NET および .NET Core の公式サポート ポリシー
https://dotnet.microsoft.com/ja-jp/platform/support/policy/dotnet-core#cadence
これによれば、ある時点では、アクティブな.NETバージョンが1つあり、2つのメンテナンスバージョンが存在する。そのうち1つは、3年の寿命を持つLTS版で、これは、バージョン番号が偶数になる(表01)。また、.NETの仕様は、事前に公開され、ユーザーからフィードバックを受ける。
.NETの配布バージョンは、メジャー、マイナー、パッチの3レベルで管理される。このうちメジャーバージョンを使って「.NET 10」などと表現する。基本的にメジャーバージョン間には、破壊的な非互換性が存在する。とはいっても、多くのプログラムに影響するようなものではなく、ごく狭い特定分野における非互換性であり、通常は、互換性が保たれている。
たとえば、.NET 11の破壊的変更に挙げられているものの1つとして、日本語のカレンダーによる明治元年の日付(JapaneseCalendar.MinSupportedDateTimeプロパティ)がある。.NET 10までは、日本語カレンダーの最も古い日付となる「明治元年」の西暦表現として1868年9月8日が返されていた。この日付は、旧暦(慶応4年9月8日)によるものなので、正しくは、新暦(グレゴリオ暦)の10月23日となる。.NET 11からは、1868年10月23日が返り、日本語カレンダーは、1868年10月23日よりも後の日付のみを受け付ける。
アプリケーションがJapaneseCalendar.MinSupportedDateTimeを参照しているなら、影響が生じるが、逆に言うと、この日付を参照していなければ、なんの問題もない。.NETのメジャーバージョンの違いとなる破壊的変更とは、この程度のものである。
.NETは、アプリケーション開発のためのAPI フレームワークであり、最近では、多くのアプリケーションが.NETベースになってきている。Windowsには、Win32というAPIセットがあるのだが、.NETは、その上に作られている、いわば第2のAPIといえる。単なるAPIセットの提供だけではなく、CLR(Common Language Runtime)という仕組みを使い、.NET対応言語は、CLRの仮想コードでアプリケーションを構成する。これをJITで実行中にネイティブコードに変換して実行する、あるいは、インストール時にネイティブコードにコンパイルするようになっているため、仮想コードを利用しながら、ネイティブコードに近い速度での実行が可能になる。最終的に実行されるバイナリコードとしては、x64やARM64といったプロセッサの機械語コードなのだが、コンパイラ系言語と比較すると、「最適化」に大きな時間を掛けることが難しい。コンパイルしたものを実行ファイルとして配布するC言語などでは、コンパイル段階で、最適化に必要なだけ時間をかけられる。これに比べると、.NETのJITや事前コンパイルの最適化は、限定的だ。
さて、.NETは、毎年メジャーバージョンが更新されるが、それに合わせて、C#やPowerShellといった.NETをベースにした言語や.NET SDKもバージョンアップする。また、メジャーバージョンアップの前には、必ず、プレビュー版が出るが、これらの言語もプレビュー版が用意される。C#は、.NETのメイン言語なので、これが更新されないと、メジャーバージョンアップした.NETを利用して開発が行えない。
PowerShellは、.NETの機能をほとんど利用できるように作られていて、C#のコードをPowerShell側で記述してオブジェクトとしてアクセスすることなどが可能、このため、毎年最新の.NETでビルドされたPowerShellがリリースされる。
前述のように、JITやプリコンパイルでは、最適化に限界があり、また、言語仕様による最適化の度合いもある。このため、C#などでは、バージョンアップごとに、簡易な最適化で大きな速度改善ができるような仕組み(たとえば固定配列をスタック上に配置するなど)の導入を段階的にすすめている。
今回のタイトルネタは、ブルース・スターリングの「ネットの中の島々」(原題Islands in the Net, 1988)である。執筆時インターネットはすでに存在していたが、商用化前なので、今、多くの人が思い浮かべる「ネット」というイメージがない時代に書かれた。多国籍企業とか、海賊とか、ロッジとか、ヘミングウェイっぽいタイトルとか、なんだか、アメリカの断片の寄せ集め的な感じがある。

