PowerToys v0.100.0、.NET 10移行で性能向上とインストーラー小型化
Microsoftのユーティリティツール「PowerToys」の最新版v0.100.0がリリースされた。リリースノートによると、.NET 10(.NET Version 10)への移行により、パフォーマンスが向上し、インストーラーのサイズが15%削減された。これによりダウンロード時間が短縮され、ユーザー体験が改善される。
.NETのバージョン管理とサポートポリシー
.NETは現在、毎年メジャーバージョンアップが行われ、2年または3年でサポートが終了するサイクルを採用している。Microsoftの公式サポートポリシーによれば、アクティブな.NETバージョンが1つ、メンテナンスバージョンが2つ存在し、そのうち1つは3年の寿命を持つLTS(Long Term Support)版である。LTS版はバージョン番号が偶数になる傾向がある(例:.NET 6、.NET 8、.NET 10)。
.NETの仕様は事前に公開され、ユーザーからのフィードバックを受けて改善される。バージョン番号はメジャー、マイナー、パッチの3レベルで管理され、メジャーバージョン(例:.NET 10)間には破壊的な非互換性が存在する可能性がある。ただし、その影響はごく狭い特定分野に限られ、多くのプログラムには影響しない。
破壊的変更の実例:JapaneseCalendarの修正
例えば、.NET 11の破壊的変更として、日本語カレンダーの明治元年の日付(JapaneseCalendar.MinSupportedDateTimeプロパティ)が修正される。.NET 10までは、日本語カレンダーの最も古い日付として1868年9月8日(旧暦・慶応4年9月8日)が返されていたが、.NET 11からは正しい新暦(グレゴリオ暦)の1868年10月23日が返されるようになる。これにより、JapaneseCalendar.MinSupportedDateTimeを参照するアプリケーションに影響が生じる可能性があるが、参照していなければ問題はない。
.NETの仕組み:CLRとJITコンパイル
.NETはアプリケーション開発のためのAPIフレームワークであり、多くのアプリケーションが.NETベースで構築されている。WindowsのWin32 APIの上に構築された第2のAPIとも言える。さらに、CLR(Common Language Runtime)という仕組みを採用し、.NET対応言語はCLRの仮想コードでアプリケーションを構成する。実行時にはJIT(Just-In-Time)コンパイルでネイティブコードに変換されるか、インストール時に事前コンパイルされるため、仮想コードでありながらネイティブコードに近い速度で実行できる。ただし、C言語などのコンパイラ系言語と比較すると、最適化に時間をかけられる範囲が限定的である。
.NETエコシステムの進化とC#、PowerShellへの影響
.NETのメジャーバージョン更新に合わせて、C#やPowerShellなどの.NETベースの言語や.NET SDKもバージョンアップする。メジャーバージョンアップ前には必ずプレビュー版が提供され、これらの言語もプレビュー版が用意される。C#は.NETのメイン言語であり、その更新がなければ最新の.NETを利用した開発が行えない。PowerShellは.NETの機能をほぼ利用でき、C#コードをPowerShell側で記述してオブジェクトとしてアクセスできるため、毎年最新の.NETでビルドされたPowerShellがリリースされる。
C#では、バージョンアップごとに簡易な最適化で大きな速度改善を実現する仕組み(例:固定配列をスタック上に配置するなど)が段階的に導入されている。これにより、JITや事前コンパイルの限界を補い、パフォーマンス向上が図られている。
タイトル「ネットの中の島々」について
本記事のタイトルは、ブルース・スターリングのSF小説『ネットの中の島々』(原題:Islands in the Net、1988年)に由来する。執筆当時、インターネットは存在したが商用化前であり、現在のようなイメージはなかった。多国籍企業や海賊、ロッジ、ヘミングウェイ風のタイトルなど、アメリカの断片を寄せ集めたような作風が特徴である。



