🌟
[C#][.NET]icu関連の修正のPRを出してContributorになった話
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を出し、無事マージされました!
DO blog and tweet (or whatever) about your contributions, frequently!
とあるので、記事を書いておきます。
ファイルの修正
.NET のライブラリは基本的には C# なのですが、今回の修正対象は C で書かれたネイティブライブラリでした。
といっても、複雑なロジックが書かれているわけではなく、Unicode の比較ライブラリ ICU の挙動について調べるのが結構大変でした。
デモを動かしたり、Unicode での定義を調べたりして、どうにか修正しました。
ビルド
dotnet/runtime のビルド
初回のビルドはまるごと全部ビルドしてしまえばOKです。
build.cmd
問題は2回目以降。まるごとビルドしてたらちょっと修正するだけで何時間もかかってしまいます。
公式ドキュメントをよく読んで、必要な箇所だけビルドするようにしたいです。
マネージドコードだけなら普通にVisual Studioでビルドするだけですが、今回はnativeライブラリの修正を行っているのでその部分についてコマンドが必要です。
build.cmd clr -ninja
build.cmd clr.corelib+clr.nativecorelib+libs.pretest
System.Globalization.sln のビルド
こっちは普通に Visual Studio でビルドすれば良い感じでした。
他の箇所に合わせて、 xUnit で普通にテストを書きます。
Discussion