🌟

[C#][.NET]icu関連の修正のPRを出してContributorになった話

1 min read
CultureInfo.InvariantCulture.CompareInfo.Compare("は", "ば", CompareOptions.IgnoreCase); // -1
CultureInfo.InvariantCulture.CompareInfo.Compare("ハ", "バ", CompareOptions.IgnoreCase); // 1

CultureInfo.InvariantCulture.CompareInfo.Compare("は", "ば", CompareOptions.IgnoreNonSpace); // 0
CultureInfo.InvariantCulture.CompareInfo.Compare("ハ", "バ", CompareOptions.IgnoreNonSpace); // 1

ひらがなとカタカナで比較結果が変わってしまうという件についてPRを出し、無事マージされました!

https://github.com/dotnet/runtime/pull/55116

CONTRIBUTING.md

DO blog and tweet (or whatever) about your contributions, frequently!

とあるので、記事を書いておきます。

ファイルの修正

.NET のライブラリは基本的には C# なのですが、今回の修正対象は C で書かれたネイティブライブラリでした。

といっても、複雑なロジックが書かれているわけではなく、Unicode の比較ライブラリ ICU の挙動について調べるのが結構大変でした。

デモを動かしたり、Unicode での定義を調べたりして、どうにか修正しました。

ビルド

dotnet/runtime のビルド

初回のビルドはまるごと全部ビルドしてしまえばOKです。

build.cmd

問題は2回目以降。まるごとビルドしてたらちょっと修正するだけで何時間もかかってしまいます。

公式ドキュメントをよく読んで、必要な箇所だけビルドするようにしたいです。

https://github.com/dotnet/runtime/tree/main/docs/workflow/building/libraries

マネージドコードだけなら普通にVisual Studioでビルドするだけですが、今回はnativeライブラリの修正を行っているのでその部分についてコマンドが必要です。

build.cmd clr -ninja
build.cmd clr.corelib+clr.nativecorelib+libs.pretest

System.Globalization.sln のビルド

こっちは普通に Visual Studio でビルドすれば良い感じでした。

他の箇所に合わせて、 xUnit で普通にテストを書きます。