Pull Request on 2026年01月22日

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

注意点

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


目次

  1. #123488 [NET] Remove unnecessary Keyword property from internal log events
  2. #123487 [release/10.0] Use AzureLinux3 for evaluate-paths-job.yml
  3. #123486 Use AzureLinux3 for evaluate-paths-job.yml
  4. #123485 Deny unmasked frame receive for WebSocket Server
  5. #123481 [release/10.0] Source code updates from dotnet/dotnet
  6. #123480 Disable generic recursion test on native AOT
  7. #123479 Change Fact to ConditionalFact(RefEmitSupported) in bug_445388.cs
  8. #123476 Be careful about getExactClasses of variant types
  9. #123474 Revert "Fix up hijacking on arm32 (preserve async continuation register)"
  10. #123473 Disable NTLM tests failing in native AOT outerloops
  11. #123467 [main] Update dependencies from dotnet/runtime-assets
  12. #123466 Add interp support for field addr via helper
  13. #123453 [release/10.0] Change pool in evaluate-paths
  14. #123434 JIT: Always use CallInfo method handle for devirtualization
  15. #123413 Fix regression caused by special marker type optimization
  16. #123409 [RuntimeAsync] FindMethod, FindMethodByName, Delegate_BindToMethodName should skip async variants.
  17. #123402 Add small int return value conversion to call stubs
  18. #123385 [browser] Include WasmAssembliesFinal in ReferenceCopyLocalPaths
  19. #123373 Avoid executing unnecessary tasks when computing properties for NativeAOT.
  20. #123365 Fix IndexOfAnyInRange inconsistent behavior with invalid ranges across vectorized/scalar paths
  21. #123350 [browser][coreCLR] JitInfoIsPopulated
  22. #123338 [main] Update dependencies from dotnet/xharness
  23. #123329 [browser][ST] IsSingleThreaded and ThrowIfSingleThreaded
  24. #123309 Fix ilasm/ildasm roundtrip constraint duplication issue
  25. #123307 Bring a few jithelpers to new unwind plan
  26. #123262 [Wasm RyuJit] Wasm stack arg preliminaries
  27. #123218 Add support for socks5h proxy scheme
  28. #123215 [wasm][coreclr] Implement portable RhExceptionHandling_FailedAllocation
  29. #123101 Implement ICorDebugProcess12::GetAsyncStack
  30. #123098 Tweak the interpreter detection in DynamicOptimization
  31. #122964 Trim UnixFileSystemTypes to the values .NET runtime cares about.
  32. #122942 Fix up hijacking on arm64 (preserve async continuation register)
  33. #122878 Crossgen2: Support Writing R2R Metadata into Wasm Data Sections in Wasm Object Writer
  34. #122822 Optimize AllocHeap: use new/delete with 4KB blocks and static allocation
  35. #120823 Upgrade build to use CMake 3.26
  36. #120632 Add comprehensive unit tests for Microsoft.Extensions.Hosting projects
  37. #119575 Implement ZStandard Stream, Encoder, Decoder
  38. #119462 Refactor Span<T>.ToArray
  39. #116574 Optimise Guid.DecodeByte
  40. #114605 Undo a few JIT layout workarounds
  41. #106795 Provide support for alternative rounding modes for division and remainder of division
  42. #106374 add support for parallel Connect

#123488 [NET] Remove unnecessary Keyword property from internal log events

  • 作成者: @ManickaP
  • 作成日時: 2026年01月22日 12:52:19(UTC)
  • マージ日時: 2026年01月22日 18:06:32(UTC)
  • ラベル: area-System.Net

概要

System.Net ライブラリの内部ログイベントから冗長な Keywords プロパティを削除しました。KeywordsLogLevel と重複した情報のみを含んでいたため、削除することで dotnet trace でのログ収集時にマスキングフラグ(:0xf)の指定が不要になり、ツールの使用性が向上します。

変更前:

dotnet trace collect -p <pid> --providers Private.InternalDiagnostics.System.Net.Security:0xf,...

変更後:フラグ指定なしで同等の収集が可能に

変更内容

  • NetEventSource.Common.cs: Keywords クラス定義(Default、Debug 定数)を削除
  • NetEventSource.Security.cs: 27 個のセキュリティ関連イベント属性から Keywords パラメータを削除
  • NetEventSource.Security.Windows.cs: 8 個の Windows セキュリティ関連イベント属性から Keywords パラメータを削除
  • NetEventSource.Http.cs: 8 個の HTTP 関連イベント属性から Keywords パラメータを削除
  • NetEventSource.Sockets.cs: 4 個のソケット関連イベント属性から Keywords パラメータを削除
  • NetEventSource.WebSockets.cs: 14 個の WebSocket 関連イベント属性から Keywords パラメータを削除
  • EventSourceTestLogging.cs: 3 個のテストイベント属性から Keywords パラメータを削除

パフォーマンスへの影響

影響なし。本変更は診断用ロギング基盤の簡素化であり、ランタイムパフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

  • 9 ファイルの変更、合計 130 行の修正
  • 手動テスト済み
  • 破壊的変更ではなく、内部実装の整理

#123487 [release/10.0] Use AzureLinux3 for evaluate-paths-job.yml

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年01月22日 12:30:14(UTC)
  • マージ日時: 2026年01月22日 21:03:57(UTC)
  • ラベル: Servicing-approved area-Infrastructure

概要

CI/CDパイプラインのevaluate-paths-job.ymlで使用されるLinuxイメージをAzureLinux3に更新するバックポート。release/10.0ブランチへのポート対象。

変更内容

  • eng/pipelines/common/evaluate-paths-job.yml
    • 2行の追加、2行の削除(計4行の変更)
    • Linux環境で実行されるパス評価ジョブで使用されるコンテナイメージをAzureLinux3に更新

パフォーマンスへの影響

影響なし。ビルドパイプラインの設定変更のため、ランタイムのパフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

  • 本PRは#123486のrelease/10.0ブランチへのバックポート
  • テンプレート内の"Customer Impact"、"Regression"、"Testing"、"Risk"セクションは記入されていません
  • レビュワー: @akoeplinger

#123486 Use AzureLinux3 for evaluate-paths-job.yml

  • 作成者: @akoeplinger
  • 作成日時: 2026年01月22日 11:53:18(UTC)
  • マージ日時: 2026年01月22日 12:12:45(UTC)
  • ラベル: needs-area-label

概要

Azure Pipelines のパイプラインジョブ設定を更新し、evaluate-paths-job.yml で使用するビルドエージェントを Ubuntu 22.04 から Azure Linux 3 に変更しました。これはパイプラインインフラストラクチャの統一化を目指す継続的な取り組みの一部です。

変更内容

  • eng/pipelines/common/evaluate-paths-job.yml (+2/-2)
    • パブリックビルドプールの ImageOverride 設定を Azure Linux 3 イメージをターゲットするよう更新
    • インターナルビルドプールの ImageOverride 設定を Azure Linux 3 イメージをターゲットするよう更新

パフォーマンスへの影響

影響なし。これはビルドエージェントの OS イメージ変更であり、evaluate-paths-job 自体のパフォーマンス特性に直接的な影響はありません。

関連Issue

関連 PR: https://github.com/dotnet/runtime/pull/123450

その他

  • このPRはPR #123450 のフォローアップです
  • Azure Pipelines インフラストラクチャの統一化推進の一環と考えられます
  • パイプライン定義の変更のみで、実際のランタイムコードへの変更はありません

#123485 Deny unmasked frame receive for WebSocket Server

  • 作成者: @liveans
  • 作成日時: 2026年01月22日 10:27:49(UTC)
  • マージ日時: 2026年01月22日 13:07:54(UTC)
  • ラベル: area-System.Net

概要

RFC 6455仕様への準拠を強化するため、WebSocketサーバーが受け取ったマスクされていないフレームを拒否する検証ロジックを追加しました。RFC 6455によれば、クライアントはサーバーに送信するすべてのフレームをマスクする必要があり、サーバーはマスクされていないフレームを拒否すべきです。

変更内容

  • ManagedWebSocket.cs: サーバー側の検証ロジックを追加し、マスクされていないフレームを拒否するようにしました。既存のクライアント側マスク検証に対応するミラー実装です
  • WebSocketTests.cs: サーバーがマスクされていないフレームを適切に拒否し、Aborted状態に遷移することを検証するテストケースを追加しました(+14行)
  • Strings.resx: マスクされていないフレーム拒否時のエラーメッセージリソースを追加しました(+3行)

パフォーマンスへの影響

影響なし。この変更は受信フレームの検証ロジック追加のみであり、パフォーマンス特性に変化はありません。

関連Issue

なし

その他

RFC 6455仕様への準拠強化により、セキュリティ面でのリスクが軽減されます。具体的には、マスクされていないフレームの受け入れは、キャッシュ毒性攻撃(cache poisoning)の可能性があるため、その拒否により防御体制が向上します。この変更はサーバー実装側の堅牢性向上に寄与します。


#123481 [release/10.0] Source code updates from dotnet/dotnet

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年01月22日 09:10:16(UTC)
  • マージ日時: 2026年01月22日 19:21:13(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

これはVMR(Virtual Mono Repository)からのコードフロー更新PRです。.NET 10.0.1xxブランチの最新ビルド(20260121.16)をruntime リポジトリに同期するもので、複数の依存パッケージが更新されています。主にCodeAnalysis、Build Tasks、NETCore.App.Ref、System.Text.Jsonなどのツールチェーン関連パッケージが対象です。

変更内容

  • NuGet.config: ソース設定の更新 (+1/-1)
  • eng/Version.Details.props: バージョン詳細設定の更新 (+39/-39)
  • eng/Version.Details.xml: バージョン詳細定義の更新 (+79/-79)
  • eng/Versions.props: バージョン設定の更新 (+1/-1)
  • global.json: グローバルバージョン定義の更新 (+4/-4)

主要な依存パッケージ更新:

  • Microsoft.CodeAnalysis: 5.0.0-2.26070.104 → 5.0.0-2.26071.116
  • Microsoft.NETCore.App.Ref: 10.0.3 → 10.0.4
  • System.Text.Json: 10.0.3 → 10.0.4
  • System.Reflection.Metadata: 10.0.3 → 10.0.4
  • Microsoft.NET.Sdk.IL: 10.0.3 → 10.0.4
  • NuGet系パッケージ: 7.0.2-rc.7104 → 7.0.2-rc.7216
  • System.CommandLine: 2.0.3 → 2.0.4
  • 16個のMicrosoft.DotNet.Buildタスク関連パッケージが更新

パフォーマンスへの影響

影響なし

このPRは自動生成されたコードフロー更新であり、ビルドツールチェーンと.NETCoreライブラリの保守更新です。

関連Issue

なし

その他

  • このPRはdotnet-maestro[bot]による自動ビルド同期です
  • 生成日時:2026年1月22日 8:30:01 UTC
  • VMRコミット:4f6650138da4e12fda565f4b372155ff11378878
  • 関連するソースリポジトリの変更:efcore、emsdk、sdk、sourcelink、templating、windowsdesktop、winformsが同期されています

#123480 Disable generic recursion test on native AOT

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月22日 08:28:49(UTC)
  • マージ日時: 2026年01月22日 21:30:37(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

Native AOT環境でジェネリック再帰テストが意図せず実行されるようになった問題を修正するPRです。PR #123112以降、このテストがNative AOT対象としてコンパイルされるようになり、TypeLoadExceptionを発生させていました。Native AOT環境ではジェネリック再帰のカバレッジが別途存在するため、このテストをNative AOT環境で無効化する条件付きスキップを追加しています。

変更内容

  • src/tests/JIT/Methodical/inlining/bug505642/test.cs
    • テスト属性を [Fact] から [ConditionalFact(typeof(TestLibrary.Utilities), nameof(TestLibrary.Utilities.IsNotNativeAot))] に変更
    • Native AOT環境以外のプラットフォームでのみテストを実行する条件を追加

パフォーマンスへの影響

影響なし

関連Issue

  • PR #123112(本PRの原因となった変更)

その他

本PR自体はテスト条件の修正であり、テスト実行スキップロジックの追加です。Native AOT環境では既に別途ジェネリック再帰テストのカバレッジが存在するため、重複排除とテスト環境固有の問題回避が目的です。


#123479 Change Fact to ConditionalFact(RefEmitSupported) in bug_445388.cs

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月22日 08:22:26(UTC)
  • マージ日時: 2026年01月22日 10:40:20(UTC)
  • ラベル: needs-area-label

概要

JITテストの動的メソッド処理において、Reflection Emitが利用不可なプラットフォーム(NativeAOTなど)でのテスト失敗を防ぐため、テスト属性を[Fact]から[ConditionalFact(RefEmitSupported)]に変更しました。これにより、Reflection Emit対応プラットフォームでのみテストが実行されるようになります。

// 変更前
[Fact]
public void TestMethod() { ... }

// 変更後
[ConditionalFact(typeof(TestLibrary.Utilities), nameof(TestLibrary.Utilities.IsReflectionEmitSupported))]
public void TestMethod() { ... }

変更内容

  • src/tests/JIT/Methodical/dynamic_methods/bug_445388.cs
    • テスト属性を[Fact]から[ConditionalFact]に変更
    • Reflection Emit非サポート環境では自動的にスキップされるように条件付け

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はPR #123112に関連して発生したテスト実行の問題に対応しています。NativeAOTなどのReflection Emit非サポートプラットフォームで、動的メソッド生成を行うテストが実行されることによる失敗を事前に防ぐプラットフォーム互換性対応です。


#123476 Be careful about getExactClasses of variant types

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月22日 08:11:02(UTC)
  • マージ日時: 2026年01月22日 13:30:08(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

variant型(変位型)に対するgetExactClassesの最適化が不正に動作していた問題を修正します。JITがAction<string>型のパラメータに対してAction<object>型への型チェックを誤ってfalseに最適化していた問題を解決しました。variant型の場合は-1を返すことで、型の正確性が不明な場合の適切な処理を実現します。

変更内容

  • src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs
    • getExactClassesメソッドにvariance(変位)チェックを追加
    • variant型に対して-1を返すように修正し、JITが不正な最適化を行わないようにした

パフォーマンスへの影響

影響なし。この修正は正確性の向上に焦点を当てており、variant型に対する型チェック時の不必要な最適化を防ぐものです。むしろ、不正な最適化による誤動作を解決することで、型安全性を確保します。

関連Issue

修正契機:PR #123112でouterloopテストの追加実行により検出 該当テスト:src/tests/JIT/Methodical/flowgraph/dev10_bug679008/sealedCastVariance.cs

その他

  • 修正対象はNativeAOT(ILCompiler)のJIT統合層
  • Variant型(例:Action<T>)での共変性・反変性に関する型チェックが関連

#123474 Revert "Fix up hijacking on arm32 (preserve async continuation register)"

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月22日 07:13:29(UTC)
  • マージ日時: 2026年01月22日 12:56:31(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

PR #123057で実装されたARM32ハイジャック時の非同期継続レジスタ(r2)保存機能を戻す変更です。アウターループの実行でARM32が一貫してクラッシュしており、その原因がこのPRにあると疑われたため、当該変更を再度検証するための作業です。

変更内容

  • src/coreclr/nativeaot/Runtime/arm/GcProbe.S: GC プローブマクロのスタックフレーム修正を戻す。具体的には、r2レジスタの保存/復元操作を削除し、ハイジャックフィックアップでスレッドポインタをr2ではなくr3で返すように復元
  • src/coreclr/nativeaot/Runtime/unix/unixasmmacrosarm.inc: PTFF_SAVE_R2フラグ定義とそれに関連するコメントを削除

パフォーマンスへの影響

スタックフレームサイズが縮小されるため、わずかにメモリ使用効率が向上する可能性があります。ただし、本変更の主目的は実行時クラッシュの修正であり、パフォーマンス改善よりも安定性復旧が優先されています。

関連Issue

  • PR #123057(本変更で戻される元のPR)
  • ARM32でのアウターループ実行時クラッシュの問題

その他

この変更はARM32プラットフォーム固有の修正です。NativeAOT ランタイムのGCハイジャック機構に関連しており、ARM32での非同期継続処理の信頼性に直結するシステムレベルの変更のため、実装の妥当性については継続的な検証が必要です。


#123473 Disable NTLM tests failing in native AOT outerloops

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月22日 05:45:39(UTC)
  • マージ日時: 2026年01月22日 08:29:22(UTC)
  • ラベル: area-System.Net.Security

概要

Native AOT outerloopビルドで失敗するNTLMテストを無効化するPRです。ActiveIssue属性を追加して、Native AOTプラットフォーム上でのテスト実行をスキップしています。

変更内容

  • ファイル: src/libraries/System.Net.Security/tests/UnitTests/NegotiateAuthenticationTests.cs
    • Package_Unsupported_NTLMテストにActiveIssue属性を追加
    • 変更: +1行/-0行

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはNative AOT環境でのテスト失敗に対応する修正です
  • ActiveIssue属性により、Native AOTプラットフォーム上でのテスト実行が条件付きでスキップされます
  • テストそのもの削除ではなく、属性による条件付き実行制御のため、将来的なNative AOT対応時に復帰が容易です

#123467 [main] Update dependencies from dotnet/runtime-assets

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年01月22日 02:01:20(UTC)
  • マージ日時: 2026年01月22日 17:51:42(UTC)
  • ラベル: area-codeflow

概要

dotnet/runtime-assets からの依存関係を自動更新するPull Requestです。テストデータとランタイムアセットを含む16個のNuGetパッケージを 11.0.0-beta.26064.1 から 11.0.0-beta.26071.1 にバージョンアップしています。この更新には、CILstrip、ファジングテストデータ、各種テストデータアセット、およびランタイム用のUnicodeデータやタイムゾーンデータが含まれています。

変更内容

  • eng/Version.Details.props: バージョン情報の更新(+16行/-16行)
  • eng/Version.Details.xml: 依存関係の詳細定義の更新(+32行/-32行)

更新対象パッケージ:

  • Microsoft.DotNet.CilStrip.Sources
  • Microsoft.DotnetFuzzing.TestData
  • Microsoft.NET.HostModel.TestData
  • System.ComponentModel.TypeConverter.TestData
  • System.Data.Common.TestData
  • System.Drawing.Common.TestData
  • System.Formats.Tar.TestData
  • System.IO.Compression.TestData
  • System.IO.Packaging.TestData
  • System.Net.TestData
  • System.Private.Runtime.UnicodeData
  • System.Runtime.Numerics.TestData
  • System.Runtime.TimeZoneData
  • System.Security.Cryptography.X509Certificates.TestData
  • System.Text.RegularExpressions.TestData
  • System.Windows.Extensions.TestData

パフォーマンスへの影響

影響なし(テストデータとランタイムアセットの更新のため、直接的なパフォーマンス影響はありません)

関連Issue

なし

その他

  • このPull Requestは dotnet-maestro[bot] による自動生成です
  • Build日時:2026年1月21日 UTC
  • runtime-assets リポジトリの commit: 2497df9ce6db7a2b4082cb45b203983f977c6d5b
  • Maestro による依存関係の自動更新メカニズムを使用しています

#123466 Add interp support for field addr via helper

  • 作成者: @janvorli
  • 作成日時: 2026年01月22日 01:37:50(UTC)
  • マージ日時: 2026年01月22日 19:50:41(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

インタープリタコンパイラにEdit and Continue (EnC)シナリオで使用されるヘルパー呼び出し経由のフィールドアドレス取得サポートを追加しました。静的フィールドと実例フィールドの両方に対応し、System.Runtime.Loader.Tests ライブラリのテストがインタープリタ実行時に全てパスするようになります。

// 静的フィールドアドレス取得の例(EnC対応)
CORINFO_FIELD_STATIC_ADDR_HELPER を通じたフィールドアドレス取得が可能に

変更内容

  • src/coreclr/interpreter/compiler.cpp
    • EmitStaticFieldAddressCORINFO_FIELD_STATIC_ADDR_HELPER サポート追加
    • LDFLDA、LDFLD、STFLD操作に CORINFO_FIELD_INSTANCE_ADDR_HELPER サポート追加
    • ヘルパー呼び出し実装で、ロード/ストア操作時の間接参照処理を正確に実装

パフォーマンスへの影響

影響なし。本変更は機能補完であり、既存のパフォーマンス特性に変更はありません。ヘルパー呼び出しはEnC時のみ使用される動的機能のため、通常の実行パスへの影響はありません。

関連Issue

なし

その他

  • 互換性: 破壊的変更なし。インタープリタの対応フィールドアクセス機構を拡張した変更
  • 影響範囲: EnC (Edit and Continue) 機能を使用する開発シナリオで、インタープリタ実行時のフィールドアドレス操作の完全性が向上
  • テスト検証: System.Runtime.Loader.Tests ライブラリのテスト全体がインタープリタ実行で合格確認済み

#123453 [release/10.0] Change pool in evaluate-paths

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年01月21日 23:19:51(UTC)
  • マージ日時: 2026年01月22日 00:03:27(UTC)
  • ラベル: Servicing-approved area-Infrastructure

概要

このPull Requestは、dotnet/runtimeのrelease/10.0ブランチへの バックポート変更です。#123450で実装された「evaluate-paths」ジョブ内のプール設定の変更をバックポートしています。CI/CDパイプラインの構成ファイルの更新となります。

変更内容

  • eng/pipelines/common/evaluate-paths-job.yml
    • evaluate-pathsジョブで使用するプール設定を変更
    • 変更行数: +7行 -1行(合計8行)
    • パイプライン構成の最適化に関連する変更と推定

パフォーマンスへの影響

プール設定の変更であるため、CI/CDパイプラインの実行環境に関連する可能性があります。ただし、提供された情報のみでは具体的なパフォーマンス影響の詳細は確認できません。

関連Issue

#123450(元のPull Request)

その他

  • 本変更はrelease/10.0ブランチへのバックポートです
  • .NET 10+向けのため、バックポート時のターゲットブランチはrelease/X.0形式が適切です
  • レビュワーは jkoritzinsky

#123434 JIT: Always use CallInfo method handle for devirtualization

  • 作成者: @hez2010
  • 作成日時: 2026年01月21日 14:51:56(UTC)
  • マージ日時: 2026年01月22日 15:05:04(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

JIT の後期デバーチャライゼーション時にメソッドハンドルを取得する方法を改善したPRです。従来は GenTree からメソッドハンドルを抽出していましたが、今後は import 時に LateDevirtualizationInfo に保存されたメソッドハンドルを使用することで、デバーチャライゼーション判定を簡潔にしつつ、より確実に処理できるようにしました。これにより #122023 で導入されたデバーチャライゼーション機能の回帰を修正します。

// LateDevirtualizationInfo にメソッドハンドルを保存
struct LateDevirtualizationInfo
{
    CORINFO_METHOD_HANDLE methodHnd;  // 新規追加
    // ...
};

変更内容

  • inline.h: LateDevirtualizationInfo 構造体に methodHnd フィールドを追加
  • importercalls.cpp: import 時に callInfo->hMethod から methodHnd を設定
  • gentree.h: IsDevirtualizationCandidate メソッド署名から pMethHandle 出力パラメータを削除
  • gentree.cpp: IsDevirtualizationCandidate ロジックを簡潔化。GenTree からのメソッドハンドル抽出処理(38行)を削除し、単に IsVirtual() || IsGenericVirtual() の判定のみに(2行)
  • fginline.cpp: メソッドハンドルを出力パラメータではなく gtLateDevirtualizationInfo->methodHnd から直接取得

パフォーマンスへの影響

影響なし。このPRはコード構造の改善であり、実行時パフォーマンスへの直接的な影響はありません。ただし、デバーチャライゼーション判定がより確実になることで、不要な virtual call が削減され、最適化品質が向上する可能性があります。

関連Issue

#123391(デバーチャライゼーション回帰)、#122023(前回の変更による回帰)

その他

この変更は内部 JIT 実装のリファクタリングで、公開 API への影響はありません。


#123413 Fix regression caused by special marker type optimization

  • 作成者: @davidwrighton
  • 作成日時: 2026年01月21日 00:54:39(UTC)
  • マージ日時: 2026年01月22日 23:57:45(UTC)
  • ラベル: area-TypeSystem-coreclr

概要

特別なマーカー型の最適化による2つのリグレッション問題を修正しました。Issue #123254ではVB.NETプログラムで最適化されたインターフェースマップロジックが実装されていなかった問題を、Issue #123318ではMaxGenericParametersForSpecialMarkerTypeを超える場合の型チェック漏れを修正しています。

変更内容

  • clsload.cpp/hpp: 特別なマーカー型の判定ロジックを共通化し、汎用的なヘルパーメソッドを追加
  • methodtablebuilder.cpp: インターフェースマップ展開時の複数の型組み合わせに対応するロジック実装(+100行)
  • siginfo.cpp: 特別なマーカー型判定の条件チェック強化
  • typehandle.h: マーカー型判定用の定数/メソッド追加
  • 回帰テスト: VB.NET(GitHub_123254.vb)とC#(GitHub_123318.cs)の実装テストを追加

パフォーマンスへの影響

影響なし。この修正は型ロード時のインターフェースマップ最適化ロジックの正確な実装であり、既存の高速パスを有効化するものです。特にVB.NETコンパイラ出力に対する最適化パスが機能するようになります。

関連Issue

  • #123254: VB.NETプログラムで最適化されたインターフェースマップ展開が未実装
  • #123318: MaxGenericParametersForSpecialMarkerTypeチェック漏れ

その他

C#とVB.NETコンパイラのメタデータ生成アルゴリズムの違い(VB.NETは最初の2層のインターフェースのみ展開、C#は完全展開)により、VB.NETプログラムが主にこの最適化パスを使用するため、VB.NETのリグレッションテストが重要です。


#123409 [RuntimeAsync] FindMethod, FindMethodByName, Delegate_BindToMethodName should skip async variants.

  • 作成者: @VSadov
  • 作成日時: 2026年01月20日 22:57:38(UTC)
  • マージ日時: 2026年01月22日 18:12:17(UTC)
  • ラベル: area-VM-coreclr runtime-async

概要

内部反射API(FindMethod、FindMethodByName、Delegate_BindToMethodName)がメソッド検索時に非同期バリアント(async variants)をスキップするように修正しました。通常の反射APIと同じ理由で、これらのAPI呼び出し側は非同期バリアントを期待していません。将来的に非同期バリアントの考慮が必要な場合は、既存のフラグ(FM_Flags、DelegateBindingFlagsなど)で対応可能です。

変更内容

  • src/coreclr/vm/memberload.cpp: メソッド検索ロジックを修正し、非同期バリアントをフィルタリングする処理を追加(+47/-30)
  • src/coreclr/vm/comdelegate.cpp: デリゲートバインディングロジックで非同期バリアントのスキップ処理を実装(+5/-1)
  • src/coreclr/inc/clrconfigvalues.h: 不要な設定値を削除(-5)
  • eng/pipelines/common/templates/wasm-coreclr-library-tests.yml: テストパイプライン設定を更新(+1)

パフォーマンスへの影響

影響なし。この変更は検索ロジックのフィルタリング条件追加であり、パフォーマンスに顕著な影響はありません。

関連Issue

#122672

その他

  • これは内部API(RuntimeAsync関連)の修正であり、公開APIには影響しません
  • 既存のフラグメカニズム(FM_Flags、DelegateBindingFlags)により、将来的な拡張性は確保されています

#123402 Add small int return value conversion to call stubs

  • 作成者: @janvorli
  • 作成日時: 2026年01月20日 20:44:07(UTC)
  • マージ日時: 2026年01月22日 15:05:32(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

P/Invoke呼び出しから戻る64ビット未満の整数値の処理に関するバグを修正します。従来は64ビット全体のリターンレジスタ値をインタプリタスタックに書き込んでいましたが、適切なビット数のみを抽出し、符号付き/符号なし型に応じてゼロ拡張または符号拡張する必要があります。

新たに6種類の戻り値型(ReturnTypeI1/U1/I2/U2/I4/U4)に対応した専用のCallJittedMethodXXXスタブを追加することで対応しています。

変更内容

  • src/coreclr/vm/callstubgenerator.h: 6つの新しい戻り値型列挙値を追加(I1/U1/I2/U2/I4/U4)
  • src/coreclr/vm/callstubgenerator.cpp: 型マッピングロジックの更新、新しいスタブの外部宣言追加、switch文への統合
  • アーキテクチャ別アセンブリ実装:
    • AMD64(Windows/Unix): 各6つのスタブ追加(符号/ゼロ拡張対応)
    • ARM64(Windows/Unix): 各6つのスタブ追加(符号/ゼロ拡張対応)
    • RISC-V64: 6つのスタブ追加(符号/ゼロ拡張対応)

パフォーマンスへの影響

直接的なパフォーマンス改善はありませんが、P/Invoke戻り値の誤った処理により発生していたバグが修正されるため、ライブラリテストの正確性が向上します。アセンブリスタブの追加による追加の計算オーバーヘッドは軽微です。

関連Issue

なし

その他

ARM64 Unix向け(src/coreclr/vm/arm64/asmhelpers.S)のCallJittedMethodRetI4スタブに関して、Copilotが重大なバグの可能性を指摘しています。実装の確認が推奨されます。


#123385 [browser] Include WasmAssembliesFinal in ReferenceCopyLocalPaths

  • 作成者: @Copilot
  • 作成日時: 2026年01月20日 15:42:14(UTC)
  • マージ日時: 2026年01月22日 14:03:41(UTC)
  • ラベル: arch-wasm area-Build-mono os-browser

概要

WASM ブラウザプロジェクトの Debug ビルドでデバッグが失敗する回帰を修正します。PR #120330 で WasmAssembliesFinal(AOT/再リンク出力)が ReferenceCopyLocalPaths から削除されましたが、復元されていなかったため、デバッガメタデータの読み込みと下流の MSBuild ターゲットが失敗していました。修正では _ResolveWasmOutputs ターゲットで WasmAssembliesFinalReferenceCopyLocalPaths に戻します。

// Microsoft.NET.Sdk.WebAssembly.Browser.targets
<ReferenceCopyLocalPaths Include="@(WasmAssembliesFinal)" />

変更内容

  • ファイル: src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets
    • _ResolveWasmOutputs ターゲット内で WasmAssembliesFinalReferenceCopyLocalPaths に追加(3行追加)
    • アイテムは既に削除されているため、重複は発生しません

パフォーマンスへの影響

影響なし。ビルド時のアイテムグループの整合性確保のみで、公開/パッケージング成果物には変化なし。

関連Issue

その他

  • 互換性: 公開 API 変更なし。ビルド時のみの変更。
  • 対象環境: .NET 11 WASM ブラウザプロジェクト
  • 影響範囲: Debug ビルド、デバッガメタデータ読み込み、MSBuild ターゲットの互換性維持

#123373 Avoid executing unnecessary tasks when computing properties for NativeAOT.

  • 作成者: @rolfbjarne
  • 作成日時: 2026年01月20日 10:29:19(UTC)
  • マージ日時: 2026年01月22日 07:57:16(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ビルドの不要なタスク実行を最小化し、Windows 上での iOS プロジェクトビルドを可能にするとともに、macOS ビルドのパフォーマンスを改善します。具体的には、xcrun 実行やXcode バージョン検出、ネイティブリンカー検証を条件付きでスキップします。

// 例: SysRoot が既に設定されている場合、xcrun の実行をスキップ
// condition="'$(SysRoot)' == ''" を追加して不要な実行を防止

変更内容

ファイル: src/coreclr/nativeaot/BuildIntegration/Microsoft.NativeCore.Native.Unix.targets

  • SetupOSSpecificProps ターゲット: SysRoot が既に設定されている場合、xcrun の実行をスキップ
  • _SkipiOSLikePlatformValidation フラグを追加し、Windows ビルド時の SysRoot 検証をバイパス可能に
  • Xcode バージョン検出をスキップ: UseLdClassicXCodeLinker が既に設定されている場合は実行不要
  • ネイティブリンカー検証をスキップ: NativeLib=Static の場合は不要な処理を削除

パフォーマンスへの影響

改善: macOS ビルドの高速化。不要なタスク(特に外部プロセス呼び出しの xcrun や Xcode バージョン検出)の実行が削除されるため、ビルド時間が短縮されます。

Windows での iOS ビルド対応: 従来は xcrun not found in PATH エラーで失敗していましたが、この修正により Windows ビルド環境での実行が可能になります。

関連Issue

その他

  • この変更により、iOS SDK チームが設定した SysRoot 値が尊重され、重複した計算が回避されます
  • _SkipiOSLikePlatformValidation=true フラグは、Windows ビルドで存在しないパス検証をスキップするエスケープハッチとして機能します
  • 破壊的変更なし(既存の動作を保持しつつ、不要な処理をスキップ)

#123365 Fix IndexOfAnyInRange inconsistent behavior with invalid ranges across vectorized/scalar paths

  • 作成者: @Copilot
  • 作成日時: 2026年01月19日 23:36:44(UTC)
  • マージ日時: 2026年01月22日 07:31:02(UTC)
  • ラベル: 指定なし

概要

IndexOfAnyInRange および関連 API が無効な範囲(highInclusive < lowInclusive)に対して、ハードウェア組み込み関数の有効・無効によって異なる結果を返す不整合を修正しました。ベクトル化パスでは highInclusive - lowInclusive が符号なし型でラップしてしまい、不正なマッチを引き起こしていました。

ReadOnlySpan<byte> data = [50];
int result = data.IndexOfAnyInRange((byte)200, (byte)100);
// 修正前:組み込み関数有効時は0(不正)、無効時は-1(正正)
// 修正後:両方で-1を返す(一貫性あり)

変更内容

  • MemoryExtensions.cs: 4つのパブリック API エントリポイントに早期検証を追加

    • IndexOfAnyInRange<T> - 無効な範囲では-1を返す
    • IndexOfAnyExceptInRange<T> - 無効な範囲では空スパンは-1、非空スパンは0を返す
    • LastIndexOfAnyInRange<T> - 無効な範囲では-1を返す
    • LastIndexOfAnyExceptInRange<T> - 無効な範囲では空スパンは-1、非空スパンは span.Length - 1 を返す
    • すべてのチェックで lowInclusive.CompareTo(highInclusive) > 0 を使用し、すべての IComparable 型に対応
  • IndexOfAnyInRange.cs: 複数のテストケースを追加

    • 12 の数値型(byte, sbyte, short, ushort, char, int, uint, long, ulong, nint, nuint, TimeSpan)全体での無効範囲テスト
    • Theory ベースのテストで off-by-one エラーを検証
    • ベクトル化・スカラー両パス(入力長 1~64)での一貫性を確認

パフォーマンスへの影響

影響なし

修正はパブリック API 境界における初期検証段階でのみ実施され、追加のチェックは最小限(CompareTo() 1回)です。無効な範囲での処理はまれなケースと想定され、実装は複雑なパフォーマンス最適化を行わない設計です。

関連Issue

dotnet/runtime#123364

その他

  • 修正は API 破壊的変更ではなく、動作の一貫性を確保するもの
  • 検証ロジックを公開 API 境界に一元化することで、6つの内部ヘルパーメソッド全体での重複チェック排除を実現
  • span.IsEmpty を使用した可読性向上

#123350 [browser][coreCLR] JitInfoIsPopulated

  • 作成者: @pavelsavara
  • 作成日時: 2026年01月19日 14:27:15(UTC)
  • マージ日時: 2026年01月22日 09:29:51(UTC)
  • ラベル: arch-wasm os-browser area-CodeGen-Interpreter-coreclr

概要

このPRは、Mono と CoreCLR の両方のインタプリタ実行環境を統一的に検出するため、PlatformDetectionIsInterpreter プロパティを導入し、テストコード全体で使用するよう更新しています。issue #123224 に関連する変更です。

変更内容

  • PlatformDetection.cs: IsInterpreterIsNotInterpreter プロパティを追加。これらは IsMonoInterpreterIsCoreClrInterpreter の両方の確認を統合します
  • JitInfoTests.cs: IsMonoInterpreter の既存チェックに加えて IsCoreClrInterpreter チェックを追加(JIT情報の検証ロジック強化)
  • Utf8JsonReaderTests.cs: TestDepth テストを IsMonoInterpreter から新しい IsInterpreter に変更
  • AssemblyInfo.cs: ActiveIssue 属性を IsMonoInterpreter から IsInterpreter に更新

パフォーマンスへの影響

影響なし。これはテストインフラストラクチャの改善であり、ランタイムパフォーマンスに直接的な影響はありません。

関連Issue

issue #123224

その他

このPRはテストコードの保守性と一貫性を向上させるもので、Mono と CoreCLR の両インタプリタ環境でのテスト実行を適切に条件分岐できるようになります。プロダクションコードの変更は含まれていません。


#123338 [main] Update dependencies from dotnet/xharness

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年01月19日 05:01:37(UTC)
  • マージ日時: 2026年01月22日 07:52:49(UTC)
  • ラベル: area-codeflow

概要

dotnet/xharness への依存関係を更新する自動マージPRです。Microsoft.DotNet.XHarness パッケージ(CLI、TestRunners.Common、TestRunners.Xunit)を v11.0.0-prerelease.26058.2 から v11.0.0-prerelease.26064.3 にアップデートしています。テスト実行ツールチェーンの最新プレリリース版を取り込むものです。

変更内容

  • .config/dotnet-tools.json: dotnet-tools のバージョン指定を更新
  • eng/Version.Details.props: XHarness 関連パッケージの3つのバージョン参照を新しいプレリリース版に更新
  • eng/Version.Details.xml: XHarness パッケージの依存関係メタデータを更新
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System.Runtime.Tests.csproj: テストプロジェクト設定の1行削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動生成されたMaestro依存関係更新PRです(dotnet-maestro[bot]による作成)
  • dotnet/xharness の main ブランチ (コミット 31e0b8e08f) からのアップデートです
  • プレリリース版への更新のため、ビルド・テスト検証が重要です

#123329 [browser][ST] IsSingleThreaded and ThrowIfSingleThreaded

  • 作成者: @pavelsavara
  • 作成日時: 2026年01月18日 17:22:01(UTC)
  • マージ日時: 2026年01月22日 14:35:37(UTC)
  • ラベル: arch-wasm area-System.Threading linkable-framework os-browser

概要

WebAssemblyの単一スレッド(ST)ビルドにおけるトリミング最適化を改善するPRです。ProcessorCountのILLink XML置換をインライン条件付きコンパイルに変更し、FEATURE_SINGLE_THREADEDガードをブロッキング操作の前に追加することで、コード削減を実現しています。また、単一スレッド対応をブラウザのみからブラウザとWASIプラットフォーム両方に拡張しています。

// 変更例:ProcessorCountの条件付きコンパイル化
public static int ProcessorCount
{
    get
    {
#if FEATURE_SINGLE_THREADED
        return 1;
#else
        return GetProcessorCount();
#endif
    }
}

変更内容

  • ILLink.Substitutions.wasm.singlethread.xml - 削除。ProcessorCount置換をインライン条件付きコンパイルに統合
  • System.Private.CoreLib.csproj - 削除ファイルの参照削除、フィーチャーフラグ追加
  • Threading関連ファイル - Parallel.cs、Task.cs、FutureFactory.cs、LowLevelLock.cs等にFEATURE_SINGLE_THREADEDガード追加
  • Environment.cs - ProcessorCountプロパティを条件付きコンパイル内に移動
  • Platform対応 - NativeRuntimeEventSource.Threading.cs、SystemdNotifier.cs、XmlDocumentDecryptor.csにブラウザプラットフォームチェック追加
  • clr.featuredefines.props - 新規フィーチャー定義の追加
  • テストファイル更新 - BlockingCollectionテスト、WebSocketテスト等の調整

パフォーマンスへの影響

改善点:

  • トリミング後のバイナリサイズ削減:ProcessorCount置換のXML解析オーバーヘッド排除
  • ブロッキング操作前のガード化により、未使用のスレッド同期コード削除可能
  • CoreCLRとMono両フレーバーで一貫した最適化が適用可能

具体的な効果:

  • 単一スレッド環境で不要なスレッド池、モニター取得、WaitAll/WaitAnyコードが削減
  • WebAssemblyバイナリサイズの縮小(具体値は計測値なし)

関連Issue

なし

その他

  • 破壊的変更なし:公開APIレベルでの変更はなく、内部実装の最適化のみ
  • FEATURE_SINGLE_THREADEDフラグはWebAssembly ST環境でのみ定義
  • 既存のWASI対応チェック(RuntimeInformation.IsOSPlatform(OSPlatform.Create("WASI")))と並行してブラウザチェック(IsBrowser)を追加し、プラットフォーム判定を一貫化

#123309 Fix ilasm/ildasm roundtrip constraint duplication issue

  • 作成者: @Copilot
  • 作成日時: 2026年01月17日 15:40:32(UTC)
  • マージ日時: 2026年01月22日 01:47:52(UTC)
  • ラベル: area-ILTools-coreclr

概要

ilasm/ildasm のラウンドトリップ処理において、自己参照制約を持つジェネリックインターフェース(例:IEqualityOperators<TSelf> where TSelf : IEqualityOperators<TSelf>)の制約が重複する問題を修正しました。トークンベースの重複検出が失敗する場合、シグネチャベースの比較を追加することで解決しています。

変更内容

  • src/coreclr/ilasm/assembler.cpp (+16)

    • CheckAddGenericParamConstraint 関数を修正
    • トークンが異なる場合、typespec シグネチャの比較を追加
    • 重複する制約の追加を防止
  • src/tests/Regressions/coreclr/GitHub_122933/test122933.cs (+75)

    • 自己参照ジェネリック制約の重複がないことを検証する回帰テストを追加
    • ICompIEq の2つのインターフェースで制約カウントをリフレクションで検証
  • src/tests/Regressions/coreclr/GitHub_122933/Test122933.csproj (+8)

    • テストプロジェクト設定ファイルを追加

パフォーマンスへの影響

影響なし

関連Issue

  • dotnet/runtime#122933

その他

  • TyParFixups なしで作成された typespec がキャッシュされないため、トークンベースの重複検出が失敗していた根本原因
  • この修正により、シグネチャベースの比較により確実な重複排除が可能になります

#123307 Bring a few jithelpers to new unwind plan

  • 作成者: @am11
  • 作成日時: 2026年01月17日 13:55:48(UTC)
  • マージ日時: 2026年01月22日 21:46:31(UTC)
  • ラベル: area-VM-coreclr community-contribution

概要

OSR(On-Stack Replacement)とwrite barriers(書き込みバリア)ジットヘルパーを新しい決定的アンワインドプラン(Rtl*およびPAL_VirtualUnwind関連の呼び出しを廃止)に移行するコミットです。また、未使用と思われるUnwindAndContinueResumeAfterCatchを削除しています。この変更により、複数のアーキテクチャ(AMD64、ARM64、LoongArch64、RISC-V64)にわたる例外ハンドリングとアンワインド処理がより統一された方式で実装されます。

変更内容

  • コア例外処理 (src/coreclr/vm/excep.cpp):アンワインドロジックを大幅に変更(+299/-72行)
  • JITヘルパー (src/coreclr/vm/jithelpers.cpp):ヘルパー実装を簡潔化(+37/-71行)
  • アーキテクチャ別アセンブリ
    • AMD64:AsmMacros.inc に新しいマクロ追加
    • ARM64/LoongArch64/RISC-V64:各プラットフォーム向けアセンブリ定数とヘルパー関数を拡充
    • Unix系プラットフォーム向けマクロ定義も追加(arm64/loongarch64/riscv64)
  • フレーム定義 (src/coreclr/vm/frames.h):新規フレーム定義を追加
  • 例外マクロ (src/coreclr/vm/exceptmacros.h):不要なマクロを削除

パフォーマンスへの影響

Rtl*およびPAL_VirtualUnwind呼び出しの廃止により、例外処理時のプラットフォーム層を経由しない直接的なアンワインド処理が可能になる可能性があります。ただし、具体的なパフォーマンスベンチマーク数値は提供されていません。変更内容から推測される影響は限定的と考えられ、主に例外処理パスの最適化が期待されます。

関連Issue

なし

その他

  • 複数のアーキテクチャにおける統一的なアンワインド戦略への移行で、保守性向上が期待されます
  • UnwindAndContinueResumeAfterCatchの削除については、後で再追加の可能性があるとコメントされており、使用例の確認が必要です
  • このPRは決定的アンワインドプランへの段階的な移行の一部と考えられます

#123262 [Wasm RyuJit] Wasm stack arg preliminaries

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年01月16日 16:56:20(UTC)
  • マージ日時: 2026年01月22日 19:39:47(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT コンパイラに対して、マネージド呼び出し規約のメソッドに隠し引数(スタックポインタとポータブルエントリポイント)を追加するための基盤実装です。また、ローカル変数 0 が常に "this" ポインタであると仮定していたコードを修正し、struct 引数の ABI 分類を実装しています。

変更内容

ファイル 変更内容
src/coreclr/jit/targetwasm.cpp Struct 分類ロジックと単一フィールドのラッパー struct をアンラップするヘルパー関数を実装
src/coreclr/jit/regallocwasm.cpp SP 引数をレジスタ候補として構成し、固定レジスタ割り当てを設定
src/coreclr/jit/morph.cpp マネージドコールに WasmShadowStackPointer 引数を追加(ポータブルエントリポイント用の TODO 含む)
src/coreclr/jit/lclvars.cpp WASM SP と PE 引数を初期化、IL-to-var マッピングを更新、"this" ポインタ参照を修正 (+87/-1)
src/coreclr/jit/gentree.h WASM 固有引数用の WellKnownArg enum 値を追加
src/coreclr/jit/gentree.cpp 非標準引数カウントロジックと WASM SP 引数のローカル変数命名を更新
src/coreclr/jit/compiler.hpp WASM SP 引数が位置 0 にあることを考慮して IL 引数マッピングを更新
src/coreclr/jit/compiler.h lvaWasmSpArg フィールドと初期化関数を宣言

パフォーマンスへの影響

直接的なパフォーマンス測定値は提供されていません。本変更はインフラストラクチャレベルの実装であり、主に ABI 準拠性向上を目的としています。将来的にはスタックポインタとポータブルエントリポイントの完全実装により、WebAssembly 上での関数呼び出しの効率が向上する可能性があります。

関連Issue

なし

その他

  • 本 PR は段階的実装の一部です。PE(ポータブルエントリポイント)ポインタはまだ引数として渡されていません(TODO コメント参照)
  • 小型 struct(1、2、4、8バイト)で単一プリミティブ型を含む場合、値渡しで渡される ABI 分類が実装されています
  • ローカル変数インデックス管理の大幅な変更が含まれており、既存コードの複数箇所で "this" ポインタ参照の仮定が修正されています

#123218 Add support for socks5h proxy scheme

  • 作成者: @Copilot
  • 作成日時: 2026年01月15日 15:38:27(UTC)
  • マージ日時: 2026年01月22日 17:30:19(UTC)
  • ラベル: area-System.Net.Http

概要

HttpClientがsocks5h://プロキシスキームをサポートするようになりました。従来はNotSupportedExceptionが発生していました。socks5hはcURLの慣例で、SOCKS5でDNS解決をプロキシに委譲することを示します。実装上は既存のsocks5と同じように、ホスト名をデフォルトでプロキシに転送します。

using var handler = new SocketsHttpHandler();
handler.Proxy = new WebProxy("socks5h://username:password@proxy.example.com:1080");
using HttpClient client = new HttpClient(handler);
var response = await client.GetStringAsync("http://ifconfig.me/ip");

変更内容

  • HttpUtilities.SocketsHttpHandler.cs: IsSocksScheme()socks5hを追加
  • SocksHelper.cs: EstablishSocksTunnelAsync()socks5hケースを追加し、SOCKS5ハンドラーにルーティング
  • HttpEnvironmentProxy.cs: 環境変数からsocks5h://プレフィックスの解析を追加
  • Strings.resx: エラーメッセージを更新し、サポートスキーム一覧にsocks5hを追加
  • SocksProxyTest.cs: socks5hスキームをカバーするテストを追加
  • HttpEnvironmentProxyTest.cs: 環境変数解析テストにsocks5hケースを追加

パフォーマンスへの影響

影響なし。既存のsocks5実装と同じロジックを使用しており、パフォーマンスへの変更はありません。

関連Issue

Issue #123217を解決します。

その他

破壊的変更ではなく、既存のsocks5の動作と一貫性を保っています。環境変数によるプロキシ設定でもsocks5h://が使用可能になります。


#123215 [wasm][coreclr] Implement portable RhExceptionHandling_FailedAllocation

  • 作成者: @radekdoulik
  • 作成日時: 2026年01月15日 13:44:36(UTC)
  • マージ日時: 2026年01月22日 09:30:58(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssembly/CoreCLR統合において、RhExceptionHandling_FailedAllocationのポータブル実装を追加しました。従来のPORTABILITY_ASSERTを既存のRhExceptionHandling_FailedAllocation_Helper関数への呼び出しに置き換え、メモリ割り当て失敗時の例外処理を適切に実装しています。

// 実装パターン(C++)
// PORTABILITY_ASSERT から以下に変更:
RhExceptionHandling_FailedAllocation_Helper(nullptr);

変更内容

  • src/coreclr/vm/portable/AllocSlow.cpp
    • RhExceptionHandling_FailedAllocation_Helperの外部宣言を追加
    • RhExceptionHandling_FailedAllocationを実装し、pTransitionBlockパラメータにnullptrを指定してヘルパー関数に委譲

パフォーマンスへの影響

影響なし。メモリ割り当て失敗時の例外処理パスであり、正常系では実行されません。

関連Issue

#122923

その他

  • このPRはWebAssembly環境でのメモリ割り当て失敗時の例外ハンドリングを完成させるための修正です
  • ポータブル実装として、プラットフォーム固有のアセンブリ実装の代わりにC++による汎用実装を採用しています

#123101 Implement ICorDebugProcess12::GetAsyncStack

  • 作成者: @max-charlamb
  • 作成日時: 2026年01月12日 21:10:26(UTC)
  • マージ日時: 2026年01月22日 13:44:26(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

本PRはICorDebugProcess12::GetAsyncStackという新しいデバッグインターフェースを実装しており、デバッガがC# async/awaitの継続チェーンをウォークできるようになります。async stackの走査機能により、非同期コードのデバッグが向上します。

// GetAsyncStackメソッドの使用例(概要)
// デバッガはこのインターフェースを通じてasync継続チェーンを取得
ICorDebugProcess12 process = ...;
ICorDebugAsyncStackWalk asyncStackWalk = process.GetAsyncStack(thread);

変更内容

  • 新規COM インターフェース: ICorDebugProcess12GetAsyncStackメソッドを定義(cordebug.idl, cordebug.h)
  • async stack走査: CordbAsyncStackWalkCordbAsyncFrameクラスを実装してasync継続の走査に対応(rsstackwalk.cpp, rsthread.cpp)
  • CordbValueEnum リファクタリング: ラムダベースの値ゲッターで柔軟性を向上(rsthread.cpp)
  • DAC対応: 継続オブジェクトの解析とasync ローカル変数取得をサポート(dacdbiimpl.cpp/h)
  • ヘルパー更新: NewInterfaceArrayHolderのコンストラクタ追加と修正(holder.h)
  • メタデータ構造: AsyncLocalData構造体を追加してasync変数のメタデータをサポート(dacdbistructures.h)

パフォーマンスへの影響

影響なし(デバッグ機能拡張のため、ランタイムのパフォーマンスへの直接的な影響なし)

関連Issue

#123101

その他

  • 生成されたファイル(cordebug.h, cordebug_i.cpp)も含まれており、IDL定義から自動生成されている
  • DAC(Data Access Component)レイヤーでの継続オブジェクト解析実装により、ダンプデバッグ時のasync stack情報取得も可能に
  • 13ファイルのうち13ファイルすべてが確認済み

#123098 Tweak the interpreter detection in DynamicOptimization

  • 作成者: @davidwrighton
  • 作成日時: 2026年01月12日 20:42:57(UTC)
  • マージ日時: 2026年01月22日 19:32:42(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

DynamicOptimizationプロファイラテストのインタープリタ検出ロジックを改善しました。一部のインタープリタテストモードではJITコンパイルが実際に行われるため、インライン数の期待値が不正確でした。純粋なインタープリタモード(インライン数=0)とJIT併用モード(非ゼロのインライン数)の両ケースに対応するよう修正しました。

変更内容

  • src/tests/profiler/dynamicoptimization/DynamicOptimization.cs
    • インライン数の検証ロジックを修正(+8行/-4行)
    • インタープリタモード時の期待値を動的に設定
    • 純粋インタープリタと JIT併用インタープリタの両パターンを許容

パフォーマンスへの影響

影響なし

このテストロジック修正は、テストの検証対象のパフォーマンス特性に直接的な変更を加えるものではなく、テスト自体の正確性を改善するものです。

関連Issue

なし

その他

この修正は内部テストロジックの改善であり、ランタイムのJIT/インタープリタの動作そのものの変更ではありません。ただし、一部のインタープリタテストモード構成では、名目上「インタープリタモード」であっても実装上JITコンパイルが行われている場合があることを示しています。これは、テスト環境でのインタープリタとJITの相互動作を理解する上で重要です。


#122964 Trim UnixFileSystemTypes to the values .NET runtime cares about.

  • 作成者: @tmds
  • 作成日時: 2026年01月07日 10:14:36(UTC)
  • マージ日時: 2026年01月22日 17:44:58(UTC)
  • ラベル: area-System.IO community-contribution

概要

Unix ファイルシステムタイプの定義を .NET ランタイムが実際に使用する値に限定するための最適化です。未使用のファイルシステムタイプ定義を削除し、ネイティブコード(pal_io.c)と マネージドコード間の冗長性を排除することで、コードベースを簡潔にしています。

変更内容

  • Interop.UnixFileSystemTypes.cs: 未使用のファイルシステムタイプ定義 164 行を削除
  • pal_io.c: ネイティブ側のファイルシステムタイプ処理を 120 行削減し、必要な値のみに絞込
  • Interop.FileSystemSupportsLocking.cs: ファイルシステムロック検出機能を新規追加(15 行)
  • Interop.MountPoints.FormatInfo.cs: マウントポイント形式情報の不要な定義を削除(13 行削減)
  • SafeFileHandle.Unix.cs: ファイルハンドル処理の簡素化(22 行削減)
  • pal_io.h / entrypoints.c: ネイティブ API シグネチャの調整

パフォーマンスへの影響

  • メモリ削減: マネージドメモリ上の未使用型定義削除により、アセンブリサイズが削減
  • コンパイル時間: 冗長なコード削除により、マイナスな影響なし
  • ランタイム性能: 影響なし(実行時パスに変更がない機構的最適化)

関連Issue

なし

その他

この変更は Unix プラットフォーム(Linux、WebAssembly など)に限定される最適化です。P/Invoke インターオペレーション層(System.Native ライブラリ)の保守性向上を目的とした、定義と実装の一貫性確保が狙いと考えられます。複数のレビュアーによる入念なレビューを経て完成したため、マネージド/ネイティブ境界での整合性が確認されています。


#122942 Fix up hijacking on arm64 (preserve async continuation register)

  • 作成者: @eduardo-vp
  • 作成日時: 2026年01月06日 21:57:28(UTC)
  • マージ日時: 2026年01月22日 23:55:17(UTC)
  • ラベル: arch-arm64 area-NativeAOT-coreclr runtime-async

概要

ARM64でのスレッドハイジャック処理を修正し、x2レジスタ(async continuation値を格納可能)を保護するPRです。ハイジャック時にGC中もx2がasync continuationを保持できるよう、スレッドポインタをx2からx9に移動し、プローブフレームでx2を保存・復元するようになりました。

変更内容

  • unixasmmacrosarm64.inc: GETTHREAD_ETLS_9マクロを追加(x9でスレッドポインタを取得しx0-x3を保護)、PTFF_SAVE_X2フラグを定義
  • GcProbe.asm / GcProbe.S: プローブフレームサイズを0xD0から0xD8バイトに拡張、x2の保存・復元を追加、スレッドレジスタをx2からx9に変更、全オフセットと参照を調整

パフォーマンスへの影響

プローブフレームサイズが8バイト増加(0xD0→0xD8)しますが、GC中のレジスタ保存処理の重要な修正であり、パフォーマンス低下の懸念は最小限です。むしろasync continuation処理の正確性向上により、非同期呼び出しの信頼性が向上します。

関連Issue

#122492に貢献

その他

async calling conventionの仕様に基づいた修正です。ARM64特有のレジスタ割り当て変更であり、既存コードへの互換性への影響はありません。


#122878 Crossgen2: Support Writing R2R Metadata into Wasm Data Sections in Wasm Object Writer

  • 作成者: @adamperlin
  • 作成日時: 2026年01月05日 16:59:05(UTC)
  • マージ日時: 2026年01月22日 17:48:33(UTC)
  • ラベル: arch-wasm area-crossgen2-coreclr

概要

このPRは、crossgen2がWebAssembly(Wasm)対象のR2R(Ready2Run)メタデータをデータセクションに書き込む機能を実装しています。WasmObjectWriterクラスを大幅にリファクタリングし、基本クラスObjectWriterのメソッドを活用してDependencyNodesを処理できるように改善しました。各データセグメントは独立して表現され、Wasm形式の要件に従って単一のデータセクションにマージされます。

変更内容

  • CodeDataLayoutMode.cs(新規): プラットフォーム固有のコード/データアドレス空間の要件を区別する列挙型を定義(Wasm32は分離が必須)
  • WasmObjectWriter.cs(大幅リファクタ): RecordMethodEmitSymbolTableEmitRelocationsEmitObjectFileメソッドを追加;WasmDataSectionWasmDataSegmentクラスを実装してWasmバイナリ形式をサポート
  • WasmNative.cs(新規): データセグメント内のメモリオフセット計算用にWasmConstExprWasmExprKindを追加
  • ObjectWriter.cs: CodeDataLayoutサポート追加、RecordMethod仮想メソッド追加、EmitRelocationsEmitObjectFileのシグネチャを更新(Loggerパラメータ追加)
  • SectionWriter.cs: バッファへの直接アクセスを許可するためBufferプロパティを公開
  • ObjectNodeSection.cs: NeedsAlignmentプロパティとWasm固有セクション定義(WasmCodeSectionWasmDataSectionなど)を追加
  • 各ObjectWriter実装(PE、Mach、ELF、COFF): 基本クラスのシグネチャ変更に対応

パフォーマンスへの影響

影響なし。本変更はWasm対象のR2R出力ファイル生成の構造改善であり、実行時パフォーマンスや既存プラットフォームのコンパイル性能には直接的な影響はありません。データセグメント処理は標準的なWasm仕様に準拠した実装です。

関連Issue

PR説明に関連Issueの明記がないため、詳細は不明です。

その他

  • 多数のレビュワーによる徹底的なレビュープロセス(MichalStrehovsky、jkoritzinsky等の.NET Runtime コアメンバーを含む)
  • Wasm AOT対応の重要なマイルストーンと考えられます

#122822 Optimize AllocHeap: use new/delete with 4KB blocks and static allocation

  • 作成者: @Copilot
  • 作成日時: 2026年01月02日 17:57:48(UTC)
  • マージ日時: 2026年01月22日 06:02:35(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

AllocHeap実装を最適化し、OS仮想メモリAPI(PalVirtualAlloc/PalVirtualFree)から標準C++ allocation(new/delete)に置き換えました。このアロケータが使用するメモリ量は典型的なアプリケーションでは少量のため、OSの仮想メモリAPIは不要です。特にWindows実装では64KBの予約に対して4KBしかコミットしていなかった非効率性を解決します。

変更内容

  • allocheap.h: AllocHeap APIを簡潔化。pre-allocatedメモリ受け入れのInit過載削除、デストラクタをDestroy()メソッドに変更、BlockListElemをヘッダーと共にインライン化、CrstからCrstStaticへ変更、reserve/commitトラッキングメンバを削除
  • allocheap.cpp: コンストラクタ簡潔化、InitメソッドでCrstStaticを初期化、Destroy()実装、_AllocNewBlocknew[]を使用するように変更(PalVirtualAlloc置換)、commitロジックを削除、未使用メソッド削除
  • CachedInterfaceDispatch_Aot.cpp: g_allocHeapをヒープ割り当てポインタから静的インスタンスに変更

パフォーマンスへの影響

  • 改善点: Windows上での予約/コミット不対応による無駄を削減。4KBブロック単位の固定割り当てにより、メモリ断片化削減。標準allocatorの使用により、OS仮想メモリAPIのオーバーヘッド削減
  • 懸念点: 記載されたベンチマーク結果なし。メモリ使用量が増加する可能性あり(予約メモリの効率性喪失)

関連Issue

#121632での調査中に発見

その他

コード行削減(allocheap.cpp: -126→+32行)により実装が簡潔化。ただし、obsoleteコメント("MemAccessMgr"参照)が残存しており、APIドキュメント更新推奨。


#120823 Upgrade build to use CMake 3.26

  • 作成者: @jkoritzinsky
  • 作成日時: 2025年10月16日 23:01:06(UTC)
  • マージ日時: 2026年01月22日 07:12:00(UTC)
  • ラベル: area-Infrastructure

概要

dotnet/runtimeのビルドシステムで使用するCMakeの最小要件バージョンを3.20から3.26にアップグレードするPRです。.NET 11対応に伴い、RHEL9との互換性を保ちながら、CMake 3.26で利用可能なモダンな機能を活用できるようにします。このアップグレードにより、ビルド構成の簡潔化とコード保守性の向上が実現されます。

変更内容

  • cmake_minimum_required: 全CMakeLists.txtで3.20から3.26に更新(31ファイル)
  • ネイティブLinux検出の近代化: configureplatform.cmakeで手動のLinux ID検出をcmake_host_system_informationに置き換え
  • 廃止コンパイラオプションの削除: configurecompiler.cmakeで27行のリンカオプション構文を更新
  • CMake標準機能への統合:
    • compile_asm関数を削除(obsolete)
    • $<LINK_LIBRARY:WHOLE_ARCHIVE>で手動のwhole-archiveハンドリングを置換
    • $<LINK_GROUP:RESCAN>でstart/end groupハンドリングを簡素化
  • デバッグ情報フォーマット: /ZiCMAKE_MSVC_DEBUG_INFORMATION_FORMATに統一(mono/CMakeLists.txt)
  • ドキュメント更新: Linux/macOS/Windows要件ドキュメントをCMake 3.26に更新

パフォーマンスへの影響

影響なし。このPRはビルド構成の最適化でありランタイムパフォーマンスに直接的な変更はありません。ただしCMake 3.26の効率的なリンカジェネレータ式採用により、ビルド時間に若干の改善が期待されます。

関連Issue

  • #103088(.NET 11への対応)
  • dotnet-buildtools-prereqs-docker#1520(ブロッキング)

その他

  • 互換性: 破壊的変更ではなく、ビルドシステムの内部実装更新です
  • 実装の簡潔化: 36ファイル中多くのファイルでコード行数が削減(特にapphost/staticで20行削減)
  • 対象プラットフォーム: Linux(Debian 13)、macOS、Windows対応
  • レビュー状況: Copilotが36ファイル全てをレビュー完了

#120632 Add comprehensive unit tests for Microsoft.Extensions.Hosting projects

  • 作成者: @Copilot
  • 作成日時: 2025年10月11日 17:34:42(UTC)
  • マージ日時: 2026年01月22日 12:34:51(UTC)
  • ラベル: test-enhancement area-Extensions-Hosting

概要

Microsoft.Extensions.Hosting* プロジェクトのテストカバレッジを大幅に拡充するPRです。79個の新規単体テストを追加し、以前はほぼテストされていなかったクラスを網羅的にカバーするようにしました。テストは段階的にコンソリデーションされ、最終的には51個の統合テスト(Microsoft.Extensions.Hosting)と30個のテスト(Microsoft.Extensions.Hosting.Abstractions)に調整されました。結果として304個のテストすべてが合格し、87.69%のライン覆率を達成しています。

変更内容

Microsoft.Extensions.Hosting (5ファイル追加)

  • HostOptionsTests.cs: 5テスト - タイムアウト設定、並行処理設定などを網羅
  • ConsoleLifetimeOptionsTests.cs: 1テスト - SuppressStatusMessagesプロパティの動作確認
  • HostApplicationBuilderSettingsTests.cs: 4テスト - Args、Configuration、EnvironmentName、ContentRootPathなどを検証
  • BackgroundServiceExceptionBehaviorTests.cs: 2テスト - 列挙型の値と動作を確認
  • Internal/HostingEnvironmentTests.cs: 5テスト - プロパティセッター、デフォルト値、インターフェース実装を検証

Microsoft.Extensions.Hosting.Abstractions (新規テストプロジェクト5ファイル)

  • HostBuilderContextTests.cs: 7テスト - コンストラクタ検証、プロパティセッター、AssertExtensions.Throwsで例外パラメータ名を検証
  • HostDefaultsTests.cs: 1テスト - 設定キー定数の検証
  • EnvironmentsTests.cs: 1テスト - 環境名定数の検証
  • HostEnvironmentEnvExtensionsTests.cs: 16テスト - 拡張メソッドの包括的カバレッジ(大文字小文字不区別検証含む)
  • Microsoft.Extensions.Hosting.Abstractions.Tests.csproj: 新規テストプロジェクト定義

パフォーマンスへの影響

影響なし。本PR はテスト追加のみで、ランタイム動作やビルドパフォーマンスへの変更はありません。

関連Issue

dotnet/runtime#49725 (Microsoft.Extensions.Hosting*の単体テスト追加)

その他

  • レビュー過程でテストが初版39個から最終51個にコンソリデーションされました(冗長性排除)
  • 「HasExpectedValue」のような単一責任テストは複数アサーションを持つ統合テストに統合
  • 不要な検証テスト(AreDistinct、AreNotNullなど)は削除され、実質的な価値のあるテストに集約

#119575 Implement ZStandard Stream, Encoder, Decoder

  • 作成者: @rzikm
  • 作成日時: 2025年09月11日 12:14:17(UTC)
  • マージ日時: 2026年01月22日 14:44:47(UTC)
  • ラベル: area-System.IO.Compression

概要

ZStandard (Zstd) 圧縮形式の Stream、Encoder、Decoder を .NET ランタイムに実装しました。新しい System.IO.Compression.Zstandard ライブラリを追加し、既存の Brotli や Deflate と同様のAPIで Zstd 圧縮・展開機能を提供します。ベンチマーク結果では、Zstd は Brotli や Deflate よりも高速な圧縮・展開を実現しています。

// 使用例
using System.IO.Compression;

// 圧縮
using (var sourceStream = File.OpenRead("input.txt"))
using (var compressedStream = File.Create("input.zst"))
using (var zstdStream = new ZstandardStream(compressedStream, CompressionMode.Compress))
{
    sourceStream.CopyTo(zstdStream);
}

// 展開
using (var compressedStream = File.OpenRead("input.zst"))
using (var decompressedStream = File.Create("output.txt"))
using (var zstdStream = new ZstandardStream(compressedStream, CompressionMode.Decompress))
{
    zstdStream.CopyTo(decompressedStream);
}

変更内容

  • 新規ライブラリ追加: System.IO.Compression.Zstandard (54KB)
  • コア実装: ZstandardStream、ZstandardEncoder、ZstandardDecoder、ZstandardDictionary クラス
  • ネイティブバインディング: Interop.Zstd.cs で vendored zstd ライブラリへの P/Invoke 定義
  • SafeHandle 追加: SafeZstdHandle で Zstd コンテキストのメモリ管理
  • ビルドシステム更新: NativeAOT、SFX パッケージ対応
  • テスト追加: Zstd 専用テストと既存 Brotli テストの強化

パフォーマンスへの影響

改善点(ベンチマーク結果より):

  • 圧縮: Optimal レベルで alice29.txt は Zstd 842.743μs(Brotli 2306.40μs の約64%短縮)
  • 展開: Optimal レベルで alice29.txt は Zstd 139.251μs(Brotli 320.82μs の約56%短縮)
  • 小ファイル: sum ファイルの圧縮で Zstd 155.050μs(Deflate 404.70μs の約62%短縮)
  • PDF(非圧縮率): Zstd 182.115μs(Deflate 2133.16μs の約92%短縮)

バイナリサイズへの影響:

  • System.IO.Compression.Native.dll: +1.167MB (4.86MB → 6.03MB)
  • System.IO.Compression.Zstandard.dll: +54KB(新規)
  • 予想される単一ファイル実行可能ファイルサイズ増加: ~1.1MB(ネイティブコードの剪定が未対応のため)

関連Issue

#59591

その他

  • プラットフォーム対応: Windows、Linux、macOS、Mobile で検証済み
  • WASM対応: 将来の改善予定(ランタイムサイズ増加を回避するため opt-in 化が必要)
  • Zstd パッチ: src/native/zstd-version.txt に記載された複数のパッチが適用済み(次期リリースで不要

#119462 Refactor Span<T>.ToArray

  • 作成者: @xtqqczze
  • 作成日時: 2025年09月08日 14:27:00(UTC)
  • マージ日時: 2026年01月22日 15:04:30(UTC)
  • ラベル: area-System.Memory community-contribution

概要

Span<T>.ToArrayReadOnlySpan<T>.ToArray のメソッド実装をリファクタリングし、unsafe コードの使用を削減しました。このリファクタリングは機能的な変更なく、コードの安全性を向上させることを目的としています。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Span.cs

    • Span<T>.ToArray メソッドの unsafe コード削減
    • 変更行数: +5/-3
  • src/libraries/System.Private.CoreLib/src/System/ReadOnlySpan.cs

    • ReadOnlySpan<T>.ToArray メソッドの unsafe コード削減
    • 変更行数: +5/-3

パフォーマンスへの影響

影響なし。リファクタリングは実装方法の改善であり、機能的な動作および実行性能に変化はないと考えられます。

関連Issue

なし

その他

  • 複数回のレビューにより承認済みです
  • unsafe コードの削減は .NET ランタイムの堅牢性向上に貢献します
  • Span<T> および ReadOnlySpan<T> は高頻度で使用される基本的なAPI であり、コード品質の改善は重要です

#116574 Optimise Guid.DecodeByte

  • 作成者: @xtqqczze
  • 作成日時: 2025年06月12日 09:16:15(UTC)
  • マージ日時: 2026年01月22日 15:04:48(UTC)
  • ラベル: area-System.Runtime community-contribution

概要

Guid.DecodeByteメソッドの最適化により、PR #88267から生じたパフォーマンス回帰に対応しました。ParseExactDctor_strParseメソッドで約14~17%のパフォーマンス改善を実現しています。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Guid.cs
    • Guid.DecodeByteメソッドの実装を最適化(+6行/-7行)
    • 前回のPR #88267で生じた複数のパフォーマンス回帰を解決

パフォーマンスへの影響

改善結果:

  • ParseExactD: 18.17ns → 15.59ns(14%改善
  • ctor_str: 18.55ns → 15.49ns(17%改善
  • Parse: 18.61ns → 15.41ns(17%改善

Guid解析関連のAPI全般において、バイトデコード処理の最適化による実行時間短縮が確認されています。

関連Issue

  • dotnet/perf-autofiling-issues#19429
  • dotnet/perf-autofiling-issues#19506
  • dotnet/perf-autofiling-issues#19466
  • dotnet/perf-autofiling-issues#19565

その他

このPRは前回のPR #88267における回帰対応が目的で、複数のパフォーマンス自動検知システムで検出された問題の修正となります。


#114605 Undo a few JIT layout workarounds

  • 作成者: @IvanStoychev
  • 作成日時: 2025年04月13日 22:03:10(UTC)
  • マージ日時: 2026年01月22日 08:15:02(UTC)
  • ラベル: area-System.Memory community-contribution

概要

JIT コンパイラのレイアウト最適化に関する過去の問題が解決されたため、SpanHelpers.T.cs ファイル内の goto ステートメントを用いた回避策を削除するPull Requestです。これにより、コードの可読性と保守性が向上し、より通常的な制御フローに整理されます。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs
    • goto ステートメントを用いた JIT レイアウト回避策を削除
    • コード量の増減:+835行/-455行(総行数:1290行)
    • 制御フローの正規化によるコード構造の改善

パフォーマンスへの影響

改善点

  • JIT コンパイラの最適化が進化し、これまでの回避策が不要になったため、素直なコード構造でも同等以上のパフォーマンスが期待できます
  • コードの可読性向上により、今後の最適化機会の識別が容易になる可能性があります

懸念点

  • 具体的なベンチマーク結果の記載がないため、実装レベルでのパフォーマンス変化は未測定

関連Issue

  • #8795
  • #7474
  • #8770
  • #114604 (先行PR、本PRで置き換え)
  • dotnet/coreclr#13314

その他

  • Pull Request 作成者は過去の問題解決状況を複数参照し、慎重に変更内容を検討しています
  • PR説明から、作成者自身が変更の妥当性について確実性を持たず、レビュワーの判断を仰ぐ姿勢が見られます
  • 複数のレビュワーによる徹底的なレビューが実施されており、慎重な承認プロセスが取られています

#106795 Provide support for alternative rounding modes for division and remainder of division

  • 作成者: @AlexRadch
  • 作成日時: 2024年08月22日 04:51:33(UTC)
  • マージ日時: 2026年01月22日 08:00:47(UTC)
  • ラベル: area-System.Numerics new-api-needs-documentation community-contribution

概要

IBinaryInteger<TSelf>インターフェースに対して、5つの丸め戦略(Truncate、Floor、Ceiling、AwayFromZero、Euclidean)をサポートする新しいDivisionRounding列挙型を導入し、DivideDivRemRemainderメソッドの新しいオーバーロードを追加しました。これにより、整数除算時に異なる丸め動作を指定できるようになります。

// 使用例
int dividend = 7;
int divisor = 2;
var result = DivRem(dividend, divisor, DivisionRounding.Floor);
// Floor: 商=3, 余り=1

変更内容

  • DivisionRounding.cs: 5つの丸めモード(Truncate、Floor、Ceiling、AwayFromZero、Euclidean)を定義する新しい列挙型を追加
  • IBinaryInteger.cs: 丸めモードパラメータを受け入れるDivideDivRemRemainderメソッドのデフォルト実装を追加(+240行)
  • System.Runtime.cs: 新しい列挙型とインターフェースメソッドをAPI表面に追加
  • テストファイル群: 全整数型(Byte、SByte、Int16、Int32、Int64、Int128、UInt16、UInt32、UInt64、UIntPtr、IntPtr、Char、BigInteger)にわたり、すべての丸めモードの包括的なテストカバレッジを追加
  • GenericMathHelpers.cs: 異なる丸めモードの期待値を計算するテストヘルパーメソッドを追加

パフォーマンスへの影響

影響なし。新しいメソッドはオーバーロードとして追加されるため、既存の除算操作のパフォーマンスに影響を与えません。丸めモードの指定は呼び出し側の明示的な選択となります。

関連Issue

#93568

その他

この変更は公開APIの拡張であり、破壊的変更ではありません。既存コードは影響を受けず、新しい機能が必要な場合のみ利用可能です。


#106374 add support for parallel Connect

  • 作成者: @wfurt
  • 作成日時: 2024年08月14日 00:15:18(UTC)
  • マージ日時: 2026年01月22日 03:57:06(UTC)
  • ラベル: area-System.Net.Sockets new-api-needs-documentation

概要

System.Net.Sockets に並列接続(Parallel Connect)機能を追加しました。API #87932 で承認された機能で、複数の DNS アドレスに対して並列に接続試行を行い、最初に成功した接続を確立します。現在は SocketAsyncEventArgs (SAEA) のみサポートしており、リスクを最小化するため既存の MultiConnectSocketAsyncEventArgs に新しいメンバーを追加する設計となっています。

// 使用例(推定)
var args = new SocketAsyncEventArgs();
args.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
// 複数アドレスへの並列接続が可能に

変更内容

  • SocketAsyncEventArgs.cs: MultiConnectSocketAsyncEventArgs に並列接続関連のメンバーを追加(+130行)
  • ConnectAlgorithm.cs: 新規ファイル。並列接続アルゴリズムの実装(+21行)
  • Socket.cs: 並列接続をサポートするメソッドの追加(+10行)
  • System.Net.Sockets.cs: リファレンスに新しいAPI シグネチャを追加(+6行)
  • Strings.resx: エラーメッセージリソースを追加(+3行)
  • テスト: SocketAsyncEventArgsTest.cs に並列接続機能の単体テストを追加(+112行)

パフォーマンスへの影響

既存の Socket 利用時にはペナルティなし。並列接続機能は既存メンバーに新しいメンバーを追加する設計で、オプトイン機能として実装されています。複数アドレスへの並列接続により、単一シーケンシャル接続と比較して接続時間が短縮される可能性があります。ただしベンチマーク結果は記載なし。

関連Issue

#87932(API承認)、#106374(このPull Request)

その他

  • DNS クエリの分割については、別途検討の予定(liveans と協議済み)
  • DNS エントリに依存するため、テストは環境および実行速度に影響される可能性がある
  • 将来的に Task ベースの API への拡張も検討対象
  • 多数のレビュー反復(stephentoub、antonfirsov による詳細なレビュー)により、設計の精緻化が行われている

目次