注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #127878 [cDAC] Switch runtime-diagnostics SOS test filter to -method for wildcard support
- #127842 Add Azure Linux 4 to libraries Helix extra-platforms (linux_x64)
- #127836 Set per-target compile PDB for cDAC descriptor object libraries
- #127833 Update branding to 9.0.17
- #127832 Update branding to 8.0.28
- #127826 Add scalar FixedTimeEquals overload
- #127824 Replace mobile-scan with platform-agnostic CI outer-loop failure scanner
- #127823 Add StringBuilder.MoveChunks(StringBuilder) API
- #127819 Fix CompositeFormat brace escaping ignored in string.Format fast-path
- #127812 [iOS] In-Proc Crash Reporter
- #127789 [mobile] Disable RoundTrip_AllWindowLogs on iOS / tvOS / MacCatalyst / Android
- #127781 Centralize a couple JIT arithmetic helpers
- #127679 Fix scoped Utf8JsonReader to carry original position
- #127659 Intrinsify string.FastAllocateString
- #127462 Add generic Random NextInteger/NextBinaryFloat APIs
- #127454 Fix TensorPrimitives.IndexOfMax
- #126549 Optimize ImmutableSortedSet<T>.SetEquals to avoid unnecessary allocations
- #125895 Add cDAC ObjectiveCMarshal contract and IsTrackedReferenceWithFinalizer API
#127878 [cDAC] Switch runtime-diagnostics SOS test filter to -method for wildcard support
- 作成者: @max-charlamb
- 作成日時: 2026年05月06日 17:50:59(UTC)
- マージ日時: 2026年05月06日 19:21:51(UTC)
- ラベル: area-Diagnostics-cdac
概要
dotnet/diagnostics PR #5821によるSOS テストクラスの分割に伴い、既存のclassFilter: SOSがマッチしなくなった問題を修正します。xunit v2の-classフィルタはワイルドカード非対応のため、代わりに正規表現対応の-methodフィルタを使用し、methodFilter: SOS*に切り替えることで、SOSプレフィックス付きの全クラスのメソッドにマッチさせます。
変更内容
- eng/pipelines/diagnostics/runtime-diag-job.yml:
methodFilterパラメータを追加し、診断ビルド(build.ps1)の既存の-methodfilter引数に接続 - eng/pipelines/runtime-diagnostics.yml: cDAC、cDAC_no_fallback、DAXのテスト実行で
classFilter: SOSからmethodFilter: SOS*に切り替え
パフォーマンスへの影響
影響なし
関連Issue
その他
- xunit v2の
-classフィルタはHashSetベースの完全一致のみでワイルドカード非対応だが、-methodフィルタは正規表現ベースで完全修飾ClassName.MethodNameに対して動作するため、SOS*で全SOSプレフィックス付きクラスのメソッドにマッチします - 既存の
classFilterパラメータは後方互換性のため残置されています
#127842 Add Azure Linux 4 to libraries Helix extra-platforms (linux_x64)
- 作成者: @richlander
- 作成日時: 2026年05月05日 23:36:31(UTC)
- マージ日時: 2026年05月06日 22:24:13(UTC)
- ラベル: area-Infrastructure-libraries
概要
Azure Linux 4をライブラリのHelix extra-platforms キューセット(linux_x64)に追加し、CoreCLR内部ループテストの実行対象OSを拡張します。Azure Linux 4はまだGA版ではないため、opt-inカバレッジの拡張に留まり、GA対象プラットフォーム定義には変更を加えていません。
変更内容
eng/pipelines/libraries/helix-queues-setup.yml: Azure Linux 4.0用のHelix キューエントリを追加- イメージ:
azurelinux-4.0-helix-amd64@sha256:d86d3499… - ホストキュー:
AzureLinux.3.Amd64.Open(他のコンテナベースエントリと同じ) - 影響範囲:
linux_x64extra-platforms(CoreCLR内部ループ)のみ
- イメージ:
パフォーマンスへの影響
影響なし
関連Issue
#127613(前回の試行)
その他
helix-platforms.ymlは意図的に更新されていません(GA版リリース用に予約済み)- Azure Linux 4 GA前の段階での、opt-inテスト対象の追加です
/azp run runtime-extra-platformsで実行可能
#127836 Set per-target compile PDB for cDAC descriptor object libraries
- 作成者: @lewing
- 作成日時: 2026年05月05日 21:00:17(UTC)
- マージ日時: 2026年05月06日 02:34:32(UTC)
- ラベル: area-NativeAOT-coreclr
概要
cDAC記述子オブジェクトライブラリがMSVC でコンパイルする際、デフォルトの vc140.pdb ではなく、ターゲット固有の決定的なPDBを生成するように修正しました。これにより、静的ライブラリ(例: Runtime.ServerGC.lib)にアーカイブされたオブジェクトファイルが後続のNativeAOT発行時にリンクエラー LNK4099 を引き起こすことを防ぎます。
変更内容
- src/coreclr/clrdatadescriptors.cmake:
generate_data_descriptors()が生成するOBJECTライブラリターゲットに対して、COMPILE_PDB_NAMEおよびCOMPILE_PDB_OUTPUT_DIRECTORYプロパティを設定。各記述子ライブラリが独自の決定的PDBを生成するようにしました(MSVC専用設定)。 - src/coreclr/jit/emitwasm.cpp: 軽微な変更(1行修正)
パフォーマンスへの影響
影響なし
関連Issue
#126972 (cDAC記述子インフラストラクチャ追加により回帰が発生)
その他
- この修正は、Windows NativeAOT発行時のリンク失敗を解決します。Linux/macOS/WASM/iOS/Androidではリンク成功済みのため、MSVC固有の問題です。
- 修正内容は既に
eng/native/functions.cmakeのinstall_static_libraryで使用されているパターンに準拠しています。 - Windows NativeAOT発行段階での動作検証が必要です(特に
ILCompiler_publish、crossgen2_publish、ilasm.csprojの各レグ)。
#127833 Update branding to 9.0.17
- 作成者: @vseanreesermsft
- 作成日時: 2026年05月05日 20:28:26(UTC)
- マージ日時: 2026年05月06日 11:25:15(UTC)
- ラベル: Servicing-approved area-codeflow
概要
.NET Runtime 9.0のブランディング情報をバージョン9.0.16から9.0.17に更新するパッチリリース用の変更です。中央集約されたバージョン定義ファイルのProductVersionとPatchVersionをインクリメントします。
変更内容
eng/Versions.props:<ProductVersion>を9.0.16から9.0.17に、<PatchVersion>を16から17に更新(4行の変更)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
これはパッチリリース用の機械的なバージョン更新です。ビルド成果物のバージョン文字列に影響します。
#127832 Update branding to 8.0.28
- 作成者: @vseanreesermsft
- 作成日時: 2026年05月05日 20:27:40(UTC)
- マージ日時: 2026年05月06日 11:25:32(UTC)
- ラベル: Servicing-approved area-codeflow
概要
.NET 8.0.28 サービシングリリースに向けて、リポジトリのバージョンメタデータを更新します。ProductVersion を 8.0.27 から 8.0.28 に、PatchVersion を 27 から 28 に変更し、ファイルバージョンコンポーネントの一貫性を保ちます。
変更内容
eng/Versions.props:ProductVersionとPatchVersionをそれぞれ 8.0.28 と 28 に更新(+2/-2)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
なし
#127826 Add scalar FixedTimeEquals overload
- 作成者: @vcsjones
- 作成日時: 2026年05月05日 20:00:05(UTC)
- マージ日時: 2026年05月06日 15:04:54(UTC)
- ラベル: area-System.Security
概要
CryptographicOperations.FixedTimeEqualsに新しいスカラーオーバーロードを追加しました。バッファを単一バイト値と比較する際に、比較用スパンを生成する必要がなくなり、特にWindows X25519の共有秘密ゼロチェックのような定時間比較処理が簡潔になります。
// 新しいオーバーロード
public static bool FixedTimeEquals(ReadOnlySpan<byte> source, byte value)
変更内容
- CryptographicOperations.cs:
FixedTimeEquals(ReadOnlySpan<byte> source, byte value)の新しいパブリックAPIを実装(38行追加) - System.Security.Cryptography.cs (ref assembly): 新しいオーバーロードをref assemblyで公開(1行追加)
- X25519DiffieHellmanImplementation.Windows.cs: Windows X25519の全ゼロ共有秘密チェックを新しいスカラーオーバーロードに変更(7行削除、1行追加)
- FixedTimeEqualsTests.cs: スカラーオーバーロードのtrue/false両方のケースと、両オーバーロードのメソッド実装フラグを検証するテストを追加(61行追加、7行削除)
パフォーマンスへの影響
影響なし(アロケーション回避による微細な改善が期待できますが、具体的なベンチマーク値は提供されていません)
関連Issue
その他
パブリックAPI追加のため、ref assemblyの更新が含まれています。既存のFixedTimeEquals(ReadOnlySpan<byte>, ReadOnlySpan<byte>)オーバーロードは変更されておらず、新しいオーバーロードはその補足的な役割です。
#127824 Replace mobile-scan with platform-agnostic CI outer-loop failure scanner
- 作成者: @kotlarmilos
- 作成日時: 2026年05月05日 19:23:55(UTC)
- マージ日時: 2026年05月06日 16:36:33(UTC)
- ラベル: area-Infrastructure
概要
モバイル環境専用のCI失敗スキャンワークフロー(mobile-scan.md)をプラットフォーム非依存の汎用CI外部ループ失敗スキャナー(ci-failure-scan.md)に置き換えます。複数の外部ループパイプラインをカバーし、失敗分類(ビルド破損 vs テスト失敗 vs インフラ)と対応アクション(追跡Issue、Known Build Error、テストスキップPR、製品修正PR)を拡張します。
変更内容
.github/workflows/mobile-scan.md(削除): Apple/Android専用スキャナープロンプトを削除.github/workflows/ci-failure-scan.md(新規):- スキャン対象パイプラインを拡大(runtime-extra-platforms + JIT/GC/PGO stress、libraries-jitstress、jit-experimental、ilasm、jit-cfg、superpmi-replay、randomized stress)
- 実行頻度を日次から12時間ごと(ファジースケジュール)に変更
- AIモデルをclaude-sonnet-4.5からclaude-sonnet-4.6に更新
- 失敗分類ロジックを明示的に実装(ビルド破損、フェーズのみの失敗、Helix workitem、インフラ)
- 対応範囲を拡大(
src/libraries/**、src/coreclr/**、src/mono/**、src/tests/**、src/native/**、eng/testing/**) - Known Build Error形式でのIssue作成、スキップPR(GCStressIncompatible、ActiveIssue属性)、小規模な製品修正PR(≤20行、単一ファイル)をサポート
- PR/Issue数の上限を引き上げ(5PR/3Issue → 10PR/5Issue)
- すべてのIssue/PRタイトルに
[ci-scan]接頭辞を付与
.github/workflows/ci-failure-scan.lock.yml(更新): 新プロンプトに対応した生成ワークフロー設定に更新
パフォーマンスへの影響
影響なし
関連Issue
#127817、#127827、#127828、#127829、#127830、#127831
その他
- セキュリティ: 新たな秘密情報やアクションは導入されない。編集可能なファイルパスを拡大する代わりに、
protected-filesポリシーでpackage.json、lockfiles、global.json、NuGet.Config、Directory.Packages.props、CODEOWNERS、.github/、.agents/への編集をブロック。CODEOWNERS による必須レビューは変わらず有効。 - 留意点:
protected_filesリスト内のNuGet.Config(大文字C)と実際のファイル名NuGet.config(小文字c)の不整合が報告されており、大文字小文字を区別するファイルシステムでは保護が機能しない可能性
#127823 Add StringBuilder.MoveChunks(StringBuilder) API
- 作成者: @Copilot
- 作成日時: 2026年05月05日 19:17:17(UTC)
- マージ日時: 2026年05月06日 16:01:20(UTC)
- ラベル: area-System.Runtime
概要
StringBuilder.MoveChunks(StringBuilder source) という新しい公開APIを追加します。このメソッドは、ソースのStringBuilderのチャンク チェーンを新しいStringBuilderインスタンスにO(1)で転送し、ソースをドレイン(空)にします。これにより、Roslyn等のコンシューマーがコピーなしで不変ビューを保持しながら、元のStringBuilderを解放できます。
namespace System.Text;
public partial class StringBuilder
{
public static StringBuilder MoveChunks(StringBuilder source);
}
変更内容
StringBuilder.cs-MoveChunksメソッドを実装。既存のプライベートコピーコンストラクタを利用して、ソースのm_ChunkChars、m_ChunkPrevious、m_ChunkLength、m_ChunkOffset、m_MaxCapacityを新しいインスタンスに転送。ソースはドレイン後、m_ChunkCharsをArray.Empty<char>()に設定し、空だが完全に利用可能な状態を維持。引数がnullの場合はArgumentNullExceptionをスロー。System.Runtime.cs- リファレンスアセンブリに新しい公開シグネチャを追加。StringBuilderTests.cs- null引数、空ソース、単一チャンク、マルチチャンク チェーン、ドレイン済みソースへの再呼び出し、ドレイン後の利用可能性、MaxCapacity保持などをカバーする119行のテストを追加。
パフォーマンスへの影響
影響なし。転送操作はO(1)で実行でき、内部フィールドの参照付け替えのみです。既存コード パスで到達可能なフィールドのみを操作するため、オーバーヘッドはありません。
関連Issue
#97570、dotnet/roslyn#61326
その他
新しいAPIの追加のみで、既存メンバーの動作変更はありません。リスクレベルは低く、破壊的変更や後方互換性への影響はありません。
#127819 Fix CompositeFormat brace escaping ignored in string.Format fast-path
- 作成者: @Copilot
- 作成日時: 2026年05月05日 18:00:42(UTC)
- マージ日時: 2026年05月06日 01:27:34(UTC)
- ラベル: area-System.Runtime
概要
string.Format で CompositeFormat を使用する際、フォーマット穴がない場合にブレース エスケープ({{ → {、}} → })が無視される問題を修正しました。高速パスが未解析の元の形式文字列を返していたため、エスケープされたブレースが適切に処理されていませんでした。
変更内容
src/libraries/System.Private.CoreLib/src/System/String.Manipulation.cs
args.Length == 0の分岐と_formattedCount == 0の条件に、format._literalLength == format.Format.Lengthチェックを追加- エスケープされたブレースが存在する場合(未エスケープの長さが元の文字列より短い場合)は高速パスをスキップし、正しいセグメント反復パスにフォールスルーするように修正
src/libraries/Common/tests/Tests/System/StringTests.cs
Format_Valid_TestDataに3つの新しいテストケースを追加:"{{"→"{"、"}}"→"}"、"{{text}}"→"{text}"
パフォーマンスへの影響
影響なし。修正は高速パスの条件判定を追加するのみで、既存の高速パスは変更されません。エスケープされたブレースが存在しない場合は従来通り高速パスが動作します。
関連Issue
その他
この修正は StringBuilder.AppendFormat と MemoryExtensions.TryWrite には該当する高速パスがなく、すべてのケースで正しく動作していました。新しいテストケースは複数のテストメソッド(StringFormat_Valid、StringBuilderAppendFormat_Valid、MemoryExtensionsTryWrite_Valid)で再利用されます。
#127812 [iOS] In-Proc Crash Reporter
- 作成者: @mdh1418
- 作成日時: 2026年05月05日 16:16:53(UTC)
- マージ日時: 2026年05月06日 15:56:10(UTC)
- ラベル: area-Diagnostics-coreclr os-ios
概要
Android向けに追加されたCoreClrインプロセスJSON形式クラッシュレポーター機能をiOS、tvOS、MacCatalystに拡張します。Apple固有のシステムメタデータ(OSバージョン、システムモデル、システム製造業者)抽出とucontext_tからのレジスタ抽出(x86_64/arm64対応)が追加されます。
変更内容
- src/coreclr/clrfeatures.cmake: iOS/tvOS/MacCatalystビルドで
FEATURE_INPROC_CRASHREPORTを有効化 - src/coreclr/debug/crashreport/inproccrashreporter.cpp: Apple sysctlベースのメタデータ出力とApple固有のucontext_tレジスタ抽出(IP/SP/BP)を実装
- src/coreclr/debug/crashreport/inproccrashreporter.h: Apple向けヘッダー定義を追加
- src/coreclr/pal/src/exception/signal.cpp: 例外処理シグナル関連の微細な変更
- src/coreclr/vm/ceemain.cpp, eepolicy.cpp, eepolicy.h: ポリシー実装の軽微な調整
パフォーマンスへの影響
影響なし(診断/デバッグ機能の追加のため)
関連Issue
その他
- 本変更はCoreClrランタイム内部実装への変更であり、公開APIへの影響なし
- createdumpのAppleペイロード互換性向上を目的とした拡張
- ARM64とx86_64の両アーキテクチャに対応
#127789 [mobile] Disable RoundTrip_AllWindowLogs on iOS / tvOS / MacCatalyst / Android
- 作成者: @kotlarmilos
- 作成日時: 2026年05月05日 10:48:39(UTC)
- マージ日時: 2026年05月06日 11:11:45(UTC)
- ラベル: area-System.IO.Compression
概要
System.IO.Compression テストスイートの RoundTrip_AllWindowLogs テスト(Deflate/ZLib/GZip variants)が、Apple モバイル(iOS/tvOS/MacCatalyst)および Android プラットフォームで常に OperationStatus.DestinationTooSmall を返す問題に対応するもの。モバイル CI での問題をブロック解除するため、該当プラットフォーム上でこのテストを一時的にスキップします。
変更内容
- src/libraries/Common/tests/System/IO/Compression/EncoderDecoderTestBase.cs
RoundTrip_AllWindowLogsメソッドに[ActiveIssue]属性を追加- スキップ対象:
TestPlatforms.iOS | TestPlatforms.tvOS | TestPlatforms.MacCatalyst | TestPlatforms.Android - テスト用ライブラリの内部API変更(公開APIへの影響なし)
パフォーマンスへの影響
影響なし
関連Issue
その他
- テストの無効化は一時的な対応
- 根本原因(
DestinationTooSmallを返すプロダクトリグレッション)は別途調査中 - モバイルプラットフォーム(iOS/tvOS/MacCatalyst/Android)に限定した対応で、デスクトッププラットフォームのテストは継続
#127781 Centralize a couple JIT arithmetic helpers
- 作成者: @tannergooding
- 作成日時: 2026年05月05日 00:35:46(UTC)
- マージ日時: 2026年05月06日 06:37:40(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT コンパイラの算術ヘルパー関数を集約・統一し、重複コードを削減する内部リファクタリング。bitset および hashbv 関連の実装を整理し、bitsetasshortlong.h に機能を統合しています。
変更内容
- bitset.cpp/h: 7行削除 - 重複していた算術ヘルパー関数を削除
- bitsetasshortlong.h: 12行変更(+10/-2) - bitset の算術ヘルパーを統合
- bitsetasuint64.h: 2行変更(+1/-1) - 関数参照を更新
- hashbv.cpp/h: 合計54行削除 - 重複するヘルパーを削除・統合
- 影響範囲: JIT コンパイラの内部実装のみ(ランタイムの公開API には影響なし)
パフォーマンスへの影響
影響なし(コード統合によるリファクタリングのため、機能変更はなし)
関連Issue
なし
その他
本変更は内部リファクタリングであり、JIT コンパイラの保守性向上を目的としています。ユーザーコード への影響はありません。
#127679 Fix scoped Utf8JsonReader to carry original position
- 作成者: @prozolic
- 作成日時: 2026年05月02日 06:18:30(UTC)
- マージ日時: 2026年05月06日 11:46:26(UTC)
- ラベル: area-System.Text.Json community-contribution
概要
JsonSerializer.Deserializeで既存のUtf8JsonReaderを使用する際、JsonExceptionが報告する行番号とバイト位置情報が不正確になる問題を修正します。スコープ付きリーダー作成時に元のリーダーの位置情報(_lineNumberと_bytePositionInLine)をキャプチャし、トークンタイプごとに値トークンの直前を指すようにリワインドして、JsonReaderState経由でスコープ付きリーダーに渡すことで、正確な位置情報の追跡を実現します。
変更内容
- JsonSerializer.Read.Utf8JsonReader.cs: スコープ付きリーダー作成時に呼び出し元リーダーの行/バイト位置をキャプチャして調整し、保存された位置メタデータで初期化するロジックを追加(+41行)
- ReadValueTests.cs: プリミティブ値、プロパティ名、none-トークン、マルチセグメントリーダーなど複数のリーダー状態でのJSON例外位置情報の保持を検証する回帰テストを追加(+247行)
パフォーマンスへの影響
影響なし
関連Issue
その他
- 変更はシステムライブラリ内部実装(
JsonSerializerとUtf8JsonReader)の修正で、公開API署名への影響はなし - 互換性への影響なし(既存の不正な動作を修正するため)
- Copilotのレビューで、マルチセグメント文字列やエスケープされた文字列を含むテストケースの拡充が提案されている点に注意(テスト可能性の観点から)
#127659 Intrinsify string.FastAllocateString
- 作成者: @EgorBo
- 作成日時: 2026年05月01日 19:30:58(UTC)
- マージ日時: 2026年05月06日 16:33:16(UTC)
- ラベル: area-CodeGen-coreclr
概要
String.FastAllocateStringをJIT intrinsicとしてマークし、RyuJITで最適化を行うPRです。結果を非nullとして追跡し、ARR_LENGTH(FastAllocateString(len))をlenに折り畳み、グローバルアサーションstring.Length(result) == lenArgを出力します。これにより、文字列連結後のインデックスアクセスなどで不要な境界チェックが削除されます。
int Foo()
{
string a = "aaa";
string b = "bbb";
string c = a + b;
return c[3]; // このPRでこの境界チェックが削除される
}
変更内容
- src/coreclr/System.Private.CoreLib/src/System/String.CoreCLR.cs:
FastAllocateStringに[Intrinsic]属性を追加 - src/coreclr/jit/namedintrinsiclist.h:
VNF_StrFastAllocate新規値関数を追加 - src/coreclr/jit/valuenum.cpp:
VNF_StrFastAllocateの値番号追跡ロジックを実装ARR_LENGTH(StrFastAllocate(len))の折り畳みを実装- グローバルアサーション生成ロジックを追加
- src/coreclr/jit/importercalls.cpp: intrinsic呼び出しハンドリングを追加
- src/coreclr/jit/gentree.cpp: 配列長取得関数を拡張
- NativeAOT対応ファイル: NativeAOT環境での実装調整
パフォーマンスへの影響
境界チェック削除による実行速度の改善が期待されます。具体的なベンチマーク数値は提供されていません。
関連Issue
その他
CopilotレビューによるコメントとしてJITテストの追加と、コメント記述の改善提案が提起されています(VNF_StrFastAllocateが配列割り当てロジックと統合される際、コメントが配列特有の説明になっている点の改善提案など)。
#127462 Add generic Random NextInteger/NextBinaryFloat APIs
- 作成者: @stephentoub
- 作成日時: 2026年04月27日 17:11:27(UTC)
- マージ日時: 2026年05月06日 02:27:25(UTC)
- ラベル: area-System.Runtime
概要
System.Randomに汎用の数値生成API (NextInteger<T>()、NextBinaryFloat<T>()) を追加します。IBinaryInteger<T>とIBinaryFloatingPointIeee754<T>を実装する任意の型に対応し、一般的な型には高速パス、その他は棄却サンプリングで対応します。
// 使用例
Random random = new();
int value = random.NextInteger<int>();
int ranged = random.NextInteger<int>(0, 100);
double floatValue = random.NextBinaryFloat<double>();
変更内容
- System/Random.cs: 3つの汎用
NextInteger<T>()オーバーロードとNextBinaryFloat<T>()を実装。float/double/NFloatには最適化された高速パス、その他のIBinaryInteger<T>/IBinaryFloatingPointIeee754<T>実装には汎用フォールバック(棄却サンプリング)を搭載 - System.Runtime/ref/System.Runtime.cs: 参照アセンブリに新API署名を追加
- Random.cs (テスト): 引数検証、境界値、範囲外の値、派生クラスの仮想メソッドディスパッチなど、エッジケースを網羅したユニットテストを追加(カスタム参照型ラッパーも含む)
パフォーマンスへの影響
共通型(int, long, float, double, NFloat)には専用の高速パスが実装されており、これらのパフォーマンス劣化はありません。その他のジェネリック型は棄却サンプリングフォールバックを使用するため、範囲によっては複数回のサンプリングが必要になる可能性があります。
関連Issue
その他
なし
#127454 Fix TensorPrimitives.IndexOfMax
- 作成者: @lilinus
- 作成日時: 2026年04月27日 14:09:54(UTC)
- マージ日時: 2026年05月06日 19:34:30(UTC)
- ラベル: area-System.Numerics community-contribution
概要
TensorPrimitives.IndexOfMax および関連メソッドのインデックス計算バグを修正するPRです。特に小さい要素型(byte、ushortなど)において、正しいインデックスが要素型の最大値を超える場合に不正なインデックスが返されていた問題を解決します。新しい IIndexOfMinMaxOperator インターフェースを導入し、要素サイズ(1/2/4/8バイト)に応じた専用のベクトル化実装を提供することで、水平集約による正確なインデックス検索を実現しています。
変更内容
- IIndexOfMinMaxOperator.cs(新規): 既存の
IIndexOfOperatorに代わり、Compareメソッドでマスク結果を返す新インターフェースと、Vector128/256/512サイズ別のIndexOfMinMaxCore実装を追加 - TensorPrimitives.IndexOfMax/Min/IndexOfMaxMagnitude/IndexOfMinMagnitude.cs: 各メソッドを新インターフェースに対応させ、共有コア実装を使用するよう更新
- テスト追加: byte(インデックス > 255)および ushort(インデックス > 65535)でのリグレッションテストを追加
- 内部実装(非公開API)の変更
パフォーマンスへの影響
影響なし(バグ修正による正確性の向上が主目的。パフォーマンスベンチマークは提供されていません)
関連Issue
その他
- PR #124274 からのフィードバックを反映
- 水平集約による最終的なインデックス決定により、左から右への検索で
IndexLessThanメソッドが不要になった - 一部のコメント化されたTODOテストが復活
#126549 Optimize ImmutableSortedSet<T>.SetEquals to avoid unnecessary allocations
- 作成者: @aw0lid
- 作成日時: 2026年04月04日 18:15:30(UTC)
- マージ日時: 2026年05月06日 12:01:22(UTC)
- ラベル: area-System.Collections community-contribution
概要
ImmutableSortedSet<T>.SetEqualsメソッドを最適化し、不要な中間SortedSet<T>の生成を排除してメモリアロケーションとGCプレッシャーを削減しました。パターンマッチングにより互換性のあるソート済みセット間で直接比較を実施し、デュアル列挙子による線形スキャン(O(n))で従来のO(log n)*.Contains()ルックアップを置き換えています。
変更内容
ImmutableSortedSet_1.cs:
SetEqualsメソッドに型特定の高速パス実装を追加ImmutableSortedSet<T>またはSortedSet<T>の検出時に比較器が一致すれば最適化ロジックを適用ReferenceEqualsチェックとICollection.Countによる即座な終了判定- デュアル列挙子による順序保証の線形比較ロジック
- 比較器不一致時の改良されたフォールバック(従来のルックアップからO(n)スキャンへ)
ImmutableSortedSetTest.cs: 新規テストケース追加(90行)
- 比較器ミスマッチシナリオ(OrdinalとOrdinalIgnoreCase)
- 重複要素を含むコレクションのテスト
- 早期終了とカウント最適化の検証
- 空セットおよびエッジケースの網羅
パフォーマンスへの影響
顕著な改善を確認:
高速パス(互換ソート済みセット比較)
- ImmutableSortedSet同士(同一比較器): ~4.7倍高速化、メモリアロケーション0
- BCL SortedSet同士(同一比較器): ~5.7倍高速化、99.99%メモリ削減(3907KB → 312B)
早期終了最適化(カウント不一致)
- ImmutableSortedSet(小規模): ~2,165,000倍高速化、メモリアロケーション0
- BCL SortedSet(小規模): ~1,077,000倍高速化、メモリアロケーション0
フォールバックパス(非ソート済みコレクション)
- List/Array: ~1.8倍高速化、メモリ削減なし(新規SortedSet生成は継続)
100,000要素でのベンチマーク結果より、互換ソート済みセット間比較での劇的改善を達成。
関連Issue
その他
- 内部実装の変更であり、公開APIに破壊的変更なし
- 互換性: 既存の動作は保持、結果の正確性を保証
- テストケースで複数シナリオ(比較器ミスマッチ、重複、エッジケース)を網羅し正確性を検証
#125895 Add cDAC ObjectiveCMarshal contract and IsTrackedReferenceWithFinalizer API
- 作成者: @Copilot
- 作成日時: 2026年03月21日 21:13:22(UTC)
- マージ日時: 2026年05月06日 20:27:00(UTC)
- ラベル: area-Diagnostics-coreclr
概要
Objective-C相互運用性の診断に対応する新しいObjectiveCMarshal cDACコントラクトと、RuntimeTypeSystemコントラクトへのIsTrackedReferenceWithFinalizer APIを追加しました。これにより、追跡参照オブジェクトのタグ付きメモリポインタを取得し、追跡参照とファイナライザーを持つ型を識別できます。
// ObjectiveCMarshal コントラクト API
TargetPointer GetTaggedMemory(TargetPointer address, out TargetNUInt size);
// RuntimeTypeSystem コントラクト API
bool IsTrackedReferenceWithFinalizer(TypeHandle handle);
変更内容
- 新規cDACコントラクト:
IObjectiveCMarshalインターフェースとObjectiveCMarshal_1実装を追加。オブジェクトのシンクブロックからInteropSyncBlockInfo.TaggedMemoryを抽出し、Objective-C追跡参照のタグ付きメモリポインタを返却。 - ランタイム型システム拡張:
MethodTableFlags_1.csにIsTrackedReferenceWithFinalizerフラグ(0x04000000)を追加、RuntimeTypeSystem_1.csに対応するAPI実装。 - レガシーDAC統合:
SOSDacImpl.csのISOSDacInterface11に完全なcDAC実装を提供(IsTrackedTypeとGetTaggedMemoryメソッド)。 - データ構造:
datadescriptor.inc、syncblk.h、InteropSyncBlockInfo.csにTaggedMemoryフィールドを追加(FEATURE_OBJCMARSHALでガード)。 - テスト: ユニットテスト127行、ダンプテスト70行、モックディスクリプタの拡張、macOS専用デバッグアプリケーション追加。全既存1322個のcDACユニットテストが合格。
パフォーマンスへの影響
影響なし
関連Issue
#118250(ドラフトPR)
その他
- Apple プラットフォーム上で
FEATURE_OBJCMARSHALが有効な場合にのみ新規コントラクトが使用されます(条件付きコンパイル)。 SOSDacImpl.csでは#if DEBUGアサーションを使用してレガシーDAC実装と照合検証しています。- macOS専用テスト基盤を追加し、非macOS環境ではスキップされるようDumpTests.targetsで制御。
- このPRはGitHub Copilotで生成されました。