ブログ 2023/08/03 Length-based switch dispatch 「そういやブログに書いてなかった」ネタ。 Pull Request が通った プレビュー版(Visual Studio 16.6 Preview 1)でよければ今年の2月頃から使えてた話です。 文字列に対する switch に新しい最適化手法が導入されました。 元々の switch のコスト 例として以下のような switch を考えます。 static int StringSwitch(string s) => s switch { "abc"… 続きを読む 2023/06/24 モジュール初期化子が呼ばれる順 前回のブログに続き、 先日の C# 配信で出てたネタ。 まあ、今回のは知ったところで誰が助かるということもないようなトリビア的な話です。 後だし優先で上書き その C# 配信内で、 「CultureInfo.DefaultThreadCurrentCulture を上書きすれば対処はできるけども」 みたいな話が出まして。 ただ、まあ、こういう「グローバルに影響がある静的プロパティの書き換え」は決してお行儀はよくないじゃないですか。 誰でも、いつでも上書き可能。 すぐに競合しかね… 続きを読む 2023/06/20 .NET の文字列比較でカルチャー未指定を検知する 先日の C# 配信で、 「これはブログに書いておくと助かる人がいるんじゃないか」と言われたものをブログ化。 背景: カルチャー依存問題再び うちのブログでも何回か書いてるんですが、 .NET の文字列比較は、カルチャー依存比較するものと Ordinal (文字コード通り)比較するものが混在していて、なかなかにやばいです。 .NET のカルチャー依存 API 問題 忘れがちなカルチャー依存問題 例えば以下のようなやつ。 using static System.Consol… 続きを読む 2023/03/18 忘れがちなカルチャー依存問題 今日は、「Globalization Invariant Mode」に変更したら、意外と忘れがちなところで差が出たみたいな話。 Globalization Invariant Mode 以前に1回ブログに書いてるんですが、 .NET の文字列 API にはカルチャー依存なものが多くて、 例えば 1.2.ToString() すらカルチャー依存です。 大陸ヨーロッパだと小数点を , にすることが多く、そのあたりの OS でこの ToString を実行すると "1,2"… 続きを読む 2023/03/11 C# での破壊的変更の今後の扱い(案) C# は、進化していくにあたって、破壊的変更を極力起こさないようにかなり気を使っているプログラミング言語です。 細かい話をすると破壊的変更も皆無ではないんですが、 破壊的変更を認める(認めてでも追加したい新機能を実装する)ハードルは結構高めです。 そんな C# ですが、ちょっとそのハードルの基準を緩められないかというような話が出ています。 Dealing with limited breaking changes in C# その後の Design Meeting 議事録 補… 続きを読む 新しい投稿へ 過去の投稿へ
2023/08/03 Length-based switch dispatch 「そういやブログに書いてなかった」ネタ。 Pull Request が通った プレビュー版(Visual Studio 16.6 Preview 1)でよければ今年の2月頃から使えてた話です。 文字列に対する switch に新しい最適化手法が導入されました。 元々の switch のコスト 例として以下のような switch を考えます。 static int StringSwitch(string s) => s switch { "abc"… 続きを読む
2023/06/24 モジュール初期化子が呼ばれる順 前回のブログに続き、 先日の C# 配信で出てたネタ。 まあ、今回のは知ったところで誰が助かるということもないようなトリビア的な話です。 後だし優先で上書き その C# 配信内で、 「CultureInfo.DefaultThreadCurrentCulture を上書きすれば対処はできるけども」 みたいな話が出まして。 ただ、まあ、こういう「グローバルに影響がある静的プロパティの書き換え」は決してお行儀はよくないじゃないですか。 誰でも、いつでも上書き可能。 すぐに競合しかね… 続きを読む
2023/06/20 .NET の文字列比較でカルチャー未指定を検知する 先日の C# 配信で、 「これはブログに書いておくと助かる人がいるんじゃないか」と言われたものをブログ化。 背景: カルチャー依存問題再び うちのブログでも何回か書いてるんですが、 .NET の文字列比較は、カルチャー依存比較するものと Ordinal (文字コード通り)比較するものが混在していて、なかなかにやばいです。 .NET のカルチャー依存 API 問題 忘れがちなカルチャー依存問題 例えば以下のようなやつ。 using static System.Consol… 続きを読む
2023/03/18 忘れがちなカルチャー依存問題 今日は、「Globalization Invariant Mode」に変更したら、意外と忘れがちなところで差が出たみたいな話。 Globalization Invariant Mode 以前に1回ブログに書いてるんですが、 .NET の文字列 API にはカルチャー依存なものが多くて、 例えば 1.2.ToString() すらカルチャー依存です。 大陸ヨーロッパだと小数点を , にすることが多く、そのあたりの OS でこの ToString を実行すると "1,2"… 続きを読む
2023/03/11 C# での破壊的変更の今後の扱い(案) C# は、進化していくにあたって、破壊的変更を極力起こさないようにかなり気を使っているプログラミング言語です。 細かい話をすると破壊的変更も皆無ではないんですが、 破壊的変更を認める(認めてでも追加したい新機能を実装する)ハードルは結構高めです。 そんな C# ですが、ちょっとそのハードルの基準を緩められないかというような話が出ています。 Dealing with limited breaking changes in C# その後の Design Meeting 議事録 補… 続きを読む