Pull Request on 2026年06月07日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。



#129100 [Wasm R2R] Report tracked GC vars as untracked in GC info

概要

WebAssembly JITにおいて、追跡されたGC変数(tracked GC vars)をGC情報では未追跡(untracked)として報告し、適切にゼロ初期化するようにしました。Wasm JITは追跡されたGCスロットのライフタイム情報を出力しないため(noTrackedGCSlotsがtrueの場合)、この修正により、(liveness)追跡されたGC変数の正確な処理を実現しています。

変更内容

  • src/coreclr/jit/codegencommon.cpp: 8行追加。Wasm環境でのGC変数のゼロ初期化処理を改善
  • src/coreclr/jit/gcencode.cpp: 6行追加、2行削除。GC情報エンコーディング時に、追跡されたGC変数を未追跡として適切に報告するロジックを調整

パフォーマンスへの影響

影響なし

関連Issue

#128234

その他

Wasm R2R(Read-ahead-of-time)コンパイラのGC追跡メカニズムに関連する修正で、ランタイムのGC処理の正確性を向上させます。


#129089 Delete MapViewOfFile/test1 PAL test (uses removed FILE_FLAG_NO_BUFFERING)

  • 作成者: @Copilot
  • 作成日時: 2026年06月07日 04:15:04(UTC)
  • マージ日時: 2026年06月07日 06:36:42(UTC)
  • ラベル: area-PAL-coreclr

概要

PAL(Platform Abstraction Layer)ヘッダから削除された FILE_FLAG_NO_BUFFERING を使用していた MapViewOfFile/test1 テストを削除しました。このテストはWindows以外のすべてのプラットフォームでコンパイル失敗を引き起こしていたため、テスト定義ファイルと共に削除されています。

変更内容

  • src/coreclr/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/MapViewOfFile.cpp を削除(244行)
  • CMakeLists.txt、compilableTests.txt、paltestlist.txt、wasm/index.html からテストエントリを削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはテスト削除のみで、ランタイムやライブラリの機能的な変更は含まれていません。削除の理由は FILE_FLAG_NO_BUFFERING がPALヘッダから削除されたことに伴う、クロスプラットフォーム互換性の問題解決です。


#129081 Remove dead prioritized-wait path from Unix WaitSubsystem

  • 作成者: @Copilot
  • 作成日時: 2026年06月06日 21:00:58(UTC)
  • マージ日時: 2026年06月07日 02:44:31(UTC)
  • ラベル: area-System.Threading

概要

Unix WaitSubsystem から未使用の優先待機(prioritized wait)パスを削除するコード削減変更です。内部APIから prioritize パラメータを完全に除去し、FIFO(先入れ先出し)の公平な待機方式のみをサポートするように統一しました。公開APIには影響なし。

// Before
public void RegisterWait(int waitedCount, bool prioritize, bool isWaitForAll)
{
    if (prioritize)
        waitedListNodes[i].RegisterPrioritizedWait(waitedObjects[i]!);
    else
        waitedListNodes[i].RegisterWait(waitedObjects[i]!);
}

// After
public void RegisterWait(int waitedCount, bool isWaitForAll)
{
    waitedListNodes[i].RegisterWait(waitedObjects[i]!);
}

変更内容

  • WaitSubsystem.Unix.cs: Wait(...) と SignalAndWait(...) メソッドから prioritize パラメータを削除、内部呼び出し時の prioritize: false 指定を削除
  • WaitSubsystem.HandleManager.Unix.cs: IWaitableObject インターフェースの Wait_Locked(...) から prioritize を除去、Wait() 拡張メソッドを更新
  • WaitSubsystem.ThreadWaitInfo.Unix.cs: RegisterWait(...) メソッドから prioritize パラメータを削除、優先待機分岐(RegisterPrioritizedWait 呼び出し)を完全削除
  • WaitSubsystem.WaitableObject.Unix.cs: Wait_Locked(...) と静的 Wait(...) から prioritize を削除
  • NamedMutex.Unix.cs: Wait_Locked メソッド署名を新インターフェースに合わせて更新

パフォーマンスへの影響

影響なし。変更前後で動作は同じ(すべての呼び出し箇所が既に prioritize: false を使用していたため、実質的に機能していない死コードの削除)。ただし条件分岐を削除することでわずかなコード最適化が期待できます。

関連Issue

なし

その他

  • この変更は内部実装の整理であり、公開APIには影響しません
  • Copilot により自動生成されたPull Requestです
  • すべての prioritize 関連の死コードと LIFO 待機パスが削除され、コードの複雑性が削減されます

#129075 [Wasm R2R] Bypass dynamic LDVIRTFTN helper

概要

Wasm R2R コンパイルで仮想関数ポインタ検索(ldvirtftn)の処理を修正しました。Wasm は CORINFO_HELP_READYTORUN_VIRTUAL_FUNC_PTR ヘルパーに対応していないため、ReadyToRun 固有の最適化パスをバイパスし、代わりに標準的なランタイム CORINFO_HELP_VIRTUAL_FUNC_PTR ヘルパーを使用するようにルーティングします。

変更内容

  • src/coreclr/jit/importer.cpp: impImportLdvirtftn 内の ReadyToRun IsAot() 高速パスを !TARGET_WASM で条件付けし、Wasm ターゲット時には標準的なランタイムヘルパーを使用するように修正(+5/-2)

パフォーマンスへの影響

影響なし。Wasm では元々 DelayLoad_Helper_Obj スタブが未実装のため、この変更により正しいコードパスへの誘導が行われます。

関連Issue

なし

その他

この変更は Wasm AOT/R2R コンパイルの機能性を確保するための修正であり、ランタイムの内部実装領域(JIT インポーター)に限定されています。


#129073 [Wasm RyuJit] Zero init gc shadow stack slots in the prolog

概要

WebAssembly上でのRyuJIT実行時にGC参照スロットをプロローグで明示的にゼロ初期化するためのPRです。単一のmemory.fill命令を使用して、シャドウスタック上のGC参照スロットをゼロ初期化します。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: WASM固有のCodeGen::genZeroInitFrame実装を追加し、memory.fillを使用したプロローグフレームゼロ初期化を実装。ブロック初期化ヘルパーを到達不可能としてマーク。
  • src/coreclr/jit/codegencommon.cpp: WASMでゼロ初期化が必要な場合は常にブロック初期化を使用するようgenCheckUseBlockInit()を更新。WASMプロローグでlvMustInitローカル変数からゼロ初期化バイト範囲を計算するロジックをWASM固有の実装に変更(特定のWASMフレームヘッダーローカルはスキップ)。
  • src/coreclr/jit/compiler.hpp: WASM向けの新規関数シグネチャを追加。

パフォーマンスへの影響

単一のmemory.fill命令への統一により、複数の初期化操作と比較してWASM実行時のプロローグ生成がより効率的になることが期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

この変更はコンパイラのバックエンド実装であり、パブリックAPIへの影響はありません。WASMランタイムでのGCセーフティ確保に関連した内部実装の改善です。


#128997 [WASI][Mono] Upgrade WASI SDK / wasmtime / WASIp2 to 0.2.8 and fix sockets for new wasi-libc

概要

Mono WASI ツールチェーンを WASI SDK 33.0、wasmtime 45.0.0、WASIp2 0.2.8 にアップグレードし、wasi-libc の新しいディスクリプタテーブル設計(タグ付き合併からファットポインタ+vtable 設計、遅延 pollable 生成)に対応する変更です。System.Net.Sockets のソケットイベントループを更新し、廃止された Node.js ラン スクリプトを削除し、WASI ハンドラが非対応のテストシナリオをスキップします。

変更内容

ツールチェーン / ビルドインフラ

  • WASI SDK バージョンを 25.0 から 33.0 へ、wasmtime を 27.0.0 から 45.0.0 へ、wit-bindgen を 0.32.0 から 0.57.1 へ更新
  • バージョンチェックを StartsWith マッチングに変更(パッチリリース互換対応)
  • Node.js ベースの CMAKE_CROSSCOMPILING_EMULATOR を削除、廃止された -lwasi-emulated-pthread リンクフラグを削除

ランスクリプトクリーンアップ

  • node.mjs / run-node.sh 生成ターゲットを削除(wasmtime 経由の実行に統一)

WASIp2 バインディング再生成(0.2.0 → 0.2.8)

  • wit-bindgen 0.57.1 による命名規則変更に対応(get() → Get()、DNS_TIMEOUT → DnsTimeout など)
  • System.Net.Http と System.Private.CoreLib の生成コードを更新

ソケット実装の更新

  • SystemNative_GetWasiSocketDescriptor: ディスクリプタデータポインタと getsockopt(SO_TYPE) で判定したソケットタイプを返却
  • 新規 SystemNative_WasiSubscribeSocketPollable: wasi-libc の subscribe インポートを呼び出し、遅延 pollable を具体化
  • SocketPal.Wasi.cs: wasi-libc の tcp/udp ソケット構造体レイアウトを更新(フィールド再配置、型変更)
  • SocketAsyncEngine.Wasi.cs: BeforePollHook でネイティブの socketType を判定し、新規 EnsurePollable ヘルパーで遅延サブスクライブ

テスト調整

  • System.Net.Http テスト: [SkipOnPlatform(TestPlatforms.Wasi)] で認証、プロキシ、証明書検証、同期送信、バージョン選択などの非対応シナリオをスキップ
  • System.Net.Sockets テスト: Socket.Blocking、DualMode シナリオをスキップ

パフォーマンスへの影響

影響なし。互換性維持および新しいツールチェーン対応が主眼で、パフォーマンス関連の変更は含まれていません。

関連Issue

なし

その他

WASIp2 インターフェースの大幅なバージョン更新に伴い、生成コード(System.Net.Http: ~6600行追加、System.Private.CoreLib: ~200行追加)が増加していますが、これは自動生成による内部実装の変更です。破


#128788 Add async startup validation for Microsoft.Extensions.Options

概要

Microsoft.Extensions.Optionsに非同期スタートアップ検証機能を追加します。新しいIAsyncValidateOptions<T>インターフェースとIAsyncStartupValidatorにより、Host.StartAsync()実行時に非同期検証パイプラインが動作します。既存の同期パス(IOptions<T>.Value、OptionsFactory.Create())は完全に同期のままであり、既存の動作に影響を与えません。

// 非同期検証の例
services.Configure<MyOptions>(configuration)
    .Validate(async (options, ct) => 
    {
        var isValid = await ValidateAsync(options);
        return isValid;
    });

変更内容

System.ComponentModel.Annotations(DataAnnotations):

  • AsyncValidationAttribute — 非同期検証属性の新しい基底クラス
  • IAsyncValidatableObject — 非同期検証可能オブジェクトの新規インターフェース
  • Validator — 8個の新しい非同期メソッド追加(TryValidateObjectAsync等)

Microsoft.Extensions.Options:

  • IAsyncValidateOptions<T> — Task<ValidateOptionsResult>を返す非同期検証インターフェース
  • IAsyncStartupValidator — ホストレベルの非同期スタートアップ検証インターフェース
  • AsyncValidateOptions<TOptions> (0~5依存関係版) — ラムダベースの非同期検証クラス
  • OptionsBuilder<T>に非同期Validateオーバーロード追加(0~5依存関係)
  • StartupValidator — IAsyncStartupValidatorも実装(同期検証後に非同期検証を実行)
  • ValidateOnStart() — 非同期検証エントリ登録に対応

Microsoft.Extensions.Options.DataAnnotations:

  • DataAnnotationValidateOptionsAsync<T> — Validator.TryValidateObjectAsyncを呼び出し、[ValidateObjectMembers]/[ValidateEnumeratedItems]を再帰的に処理
  • ValidateDataAnnotationsAsync() 拡張メソッド追加

Microsoft.Extensions.Hosting:

  • Host.StartAsync() — IAsyncStartupValidatorを優先して使用、利用不可時はIStartupValidatorにフォールバック

パフォーマンスへの影響

影響なし。非同期検証はHost.StartAsync()実行時にのみ別ステップで実行されます。同期パス(IOptions<T>.Value、OptionsFactory.Create())は影響を受けません。遅延検証と実行時リロードは非同期検証に影響されません。

関連Issue

#128100 フォローアップ: #128656 ソースジェネレータサポート追跡: #128882

その他

  • スコープ外: IAsyncOptions<T>、IAsyncOptionsSnapshot<T>、IAsyncOptionsMonitor<T>の実装は見送り(IOptions<T>.ValueがC#プロパティでありOptionsCacheがLazy<T>を使用するため)
  • スコープ外: IOptionsMonitor<T>での実行時非同期再検証(OnChangeコールバックは同期のまま)
  • スコープ外: [OptionsValidator]ソースジェ

#128735 Skipping EDI in the runtime-async case as well

  • 作成者: @rcj1
  • 作成日時: 2026年05月29日 00:22:06(UTC)
  • マージ日時: 2026年06月07日 22:35:41(UTC)
  • ラベル: area-System.Diagnostics

概要

スタックトレースの整形処理において、runtime-async メソッドに対して EDI(Exception Dispatcher Indicator)境界を非表示にする変更です。コンパイラ生成の非同期ステートマシンと同様に、runtime-async メソッドでも --- End of stack trace from previous location --- という境界表示をスキップし、スタックトレースの可読性を向上させます。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs: StackTrace.ToString メソッド内の EDI 境界スキップ条件を拡張し、MethodImplAttributes.Async フラグを持つ runtime-async フレームもスキップ対象に追加(2行変更)
  • src/libraries/System.Diagnostics.StackTrace/tests/StackTraceTests.cs: runtime-async フレームに対する EDI 境界非表示動作を検証するテストケースを追加(32行追加)

パフォーマンスへの影響

影響なし

関連Issue

#128723

その他

本変更は .NET 11 で runtime-async 機能の導入に伴い、スタックトレース出力が .NET 10 との互換性を保つための修正です。公開API(System.Diagnostics.StackTrace)の動作変更に該当します。


#127695 Enhance collectible assembly handling in XmlSerializer

概要

XmlSerializerにおけるcollectible型の処理を改善するPRです。特にジェネリックコンテナ(List<T>や配列)に含まれるcollectible型に対して、適切なAssemblyLoadContext (ALC) にシリアライザーキャッシュを関連付けることで、メモリリークを防ぎcollectible アセンブリの正常なアンロードを実現します。

変更内容

  • Compilation.cs: FindCollectibleAssemblyヘルパーメソッドを追加。ジェネリック引数と要素型を再帰的に走査して、対象型に関連付けられたcollectible アセンブリを特定します。シリアライザー生成時やキャッシュ参照時に、t.Assemblyだけに依存せず、このメソッドで見つけたcollectible アセンブリを使用するよう更新されました。
  • ContextAwareTables.cs: ロジック調整により、non-collectible型かつnon-collectible ALCの場合のみデフォルトテーブルを使用し、collectible型またはcollectible ALCの場合はConditionalWeakTableを使用することでリソース管理を改善します。
  • XmlSerializerTests.cs: List<T>と配列内のcollectible型が正常に処理され、メモリリークなくアンロード可能であることを検証する新テストXml_CollectibleTypeInGenericContainerと関連ヘルパーメソッドを追加。
  • CodeGenerator.cs: 新しいアサーション機能をサポートするためusing System.Diagnostics;ディレクティブを追加。

パフォーマンスへの影響

影響なし

関連Issue

#100518

その他

  • 破壊的変更なし。内部実装の改善です。
  • collectible アセンブリを使用するシナリオ(動的なAssemblyLoadContextの作成と破棄)での信頼性が向上します。

目次