ブログ 2022/02/04 【C# 11 候補】params Span 今日は「low level hackathon」話2個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 可変長引数 C# の可変長引数は、一時的にデータを詰めておく配列を作ってメソッドに渡す作りになっています。 例えば、void m(params int[] args) というメソッドがあったとして、 m(1, 2, 3); みたいに呼び出した場合、 m(new int[] { 1, 2, 3 }); みたいに展開されます。 ここで問題になるのが ne… 続きを読む 2022/02/01 【C# 11 候補】 ReadOnlySpan 最適化 dotnet/runtimeのコミット履歴とかにうっすら痕跡が見て取れるんですが、 去年の10月中旬頃、 「low level hackathon」とかいう Microsoft 社内イベントをやっていたみたいです。 今、C# 7.2とかの頃に Span<T> 構造体が追加されて以来の4年ぶりくらいの動きになりますが、 .NET ランタイムの低層に手を入れてパフォーマンス改善を図りたい流れになっているみたいです。 その後の様子を見るに、これは昨年10月の hackathon… 続きを読む 2022/01/28 nullable 警告もみ消し(来年までの我慢)の手段 今日はとあるアンケートの結果を乗せておこう的な話。 背景: 非 null プロパティの初期化 null 許容参照型の仕様が入って以来、以下のようなコードに警告が出るようになりました。 class A { public string X; public string Y { get; set; } public string Z { get; init; } } C# 10.0 現在、この警告を回避する唯一の方法は「ちゃんとコンストラクターで初期化すること」で… 続きを読む 2022/01/25 【C# 11 候補】 トップ レベル ステートメントの Main に属性を付ける ちょっと体調崩し気味だったので軽いネタに逃げる感じでわかりやすい C# 11 候補を1つ。 トップ レベル ステートメント(が作る Main メソッド)に属性を付けたいという話があります。 もう、割かし以下の利用例1個で説明終わりな感じ。 [main: STAThread] using System.Windows; Clipboard.SetData(DataFormats.Text, Environment.OSVersion.ToString()); 今、これと… 続きを読む 2022/01/11 MemberNotNull (値型) 判定 こないだ、[null フロー解析]と似たノリで、構造体の default フロー解析が必要という話をしました。 まあ、難航しそうではあるんですが… とはいえ実は現在でも、「null チェックといいつつ、構造体に対しても働くフロー解析」があったりします。 MemberNotNull nullable enable のとき、 非 null 参照型のフィールドやプロパティは、 コンストラクター内でちゃんと初期化する必要があります。 例えば以下のコードはプロパティ定義の行に警告。 c… 続きを読む 新しい投稿へ 過去の投稿へ
2022/02/04 【C# 11 候補】params Span 今日は「low level hackathon」話2個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 可変長引数 C# の可変長引数は、一時的にデータを詰めておく配列を作ってメソッドに渡す作りになっています。 例えば、void m(params int[] args) というメソッドがあったとして、 m(1, 2, 3); みたいに呼び出した場合、 m(new int[] { 1, 2, 3 }); みたいに展開されます。 ここで問題になるのが ne… 続きを読む
2022/02/01 【C# 11 候補】 ReadOnlySpan 最適化 dotnet/runtimeのコミット履歴とかにうっすら痕跡が見て取れるんですが、 去年の10月中旬頃、 「low level hackathon」とかいう Microsoft 社内イベントをやっていたみたいです。 今、C# 7.2とかの頃に Span<T> 構造体が追加されて以来の4年ぶりくらいの動きになりますが、 .NET ランタイムの低層に手を入れてパフォーマンス改善を図りたい流れになっているみたいです。 その後の様子を見るに、これは昨年10月の hackathon… 続きを読む
2022/01/28 nullable 警告もみ消し(来年までの我慢)の手段 今日はとあるアンケートの結果を乗せておこう的な話。 背景: 非 null プロパティの初期化 null 許容参照型の仕様が入って以来、以下のようなコードに警告が出るようになりました。 class A { public string X; public string Y { get; set; } public string Z { get; init; } } C# 10.0 現在、この警告を回避する唯一の方法は「ちゃんとコンストラクターで初期化すること」で… 続きを読む
2022/01/25 【C# 11 候補】 トップ レベル ステートメントの Main に属性を付ける ちょっと体調崩し気味だったので軽いネタに逃げる感じでわかりやすい C# 11 候補を1つ。 トップ レベル ステートメント(が作る Main メソッド)に属性を付けたいという話があります。 もう、割かし以下の利用例1個で説明終わりな感じ。 [main: STAThread] using System.Windows; Clipboard.SetData(DataFormats.Text, Environment.OSVersion.ToString()); 今、これと… 続きを読む
2022/01/11 MemberNotNull (値型) 判定 こないだ、[null フロー解析]と似たノリで、構造体の default フロー解析が必要という話をしました。 まあ、難航しそうではあるんですが… とはいえ実は現在でも、「null チェックといいつつ、構造体に対しても働くフロー解析」があったりします。 MemberNotNull nullable enable のとき、 非 null 参照型のフィールドやプロパティは、 コンストラクター内でちゃんと初期化する必要があります。 例えば以下のコードはプロパティ定義の行に警告。 c… 続きを読む