ブログ 2024/02/24 field, value を文脈キーワード化 C# 13 向けに検討されている機能の一つに、 「半自動プロパティ」とか「field キーワード」と呼ばれているものがあります。 元々は C# 12 向けに考えられていて、去年、うちのブログでも書いているやつです。 【C# 12 候補】半自動プロパティ 簡単におさらいすると、 プロパティの get/set アクセサー内で、field を使って バッキング フィールド(自動プロパティの値を保存するためにコンパイラーが生成するフィールド)に明示的にアクセスするというものです。 … 続きを読む 2024/02/18 オーバーロード解決優先度 今日は「負の遺産整理で消したいけども消せないメソッド対処」の話。 紆余曲折合って、現状、OverloadResolutionPriority 属性でオーバーロード解決に優先度をつけて、 優先度の高いものだけを見るようにするという案になっています。 最近のわかりやすい例だと、「パフォーマンス改善のために配列引数を ReadOnlySpan 引数に変えたい」というのをやりたいとします。 元々、配列引数で作っていたとして、 int[] x = [1, 2, 3]; C.M(x); … 続きを読む 2024/02/17 ジェネリック型引数の部分型推論 C# のジェネリック型引数の推論を賢くしたいという話は、issue として記録されている分に限っても5年くらい前からあります。 Champion: "Partial Type Inference" 現状の C# の型推論は割と "All or Nothing" で、 new() みたいに型全体の省略はできても、new List<>() みたいな「一部分だけ省略」ができません。 // 型全体の推論は可能。 // 左辺から型が… 続きを読む 2024/02/13 ファーストクラスな Span 型 今日は「Span<T>、ReadOnlySpan<T> をコンパイラーで特別扱いしたい」という話。 C# 7.2 の頃、Span<T> 型が追加されて、 安全性を損なわずに unsafe コード並みにパフォーマンスのよいコードが書けるようになりました。 それ以来、.NET の標準ライブラリでもいろんな場面でSpan<T> 型が活用されています。 いまや結構重要なポジションを担う型なわけですが、 現状の扱いはあくまで「普通の構造体の1つ」で… 続きを読む 2024/02/11 インターセプター 「最近動きがあったもの」ブログをいくつか書いてて、 「続報」みたいなものも書いてるわけですが。 今日のも「まあ、去年から動く実装すでにあるんだけど」という意味では続報なものの、 今日のインターセプターはあまりうちのサイトで取り上げておらず、初めて説明を書く話。 (ライブ配信では時々話に出てるんですが。) インターセプター 今日話すインターセプターは、まあ、Source Generator向けの機能です。 既存の Source Generator でも、 クラスを丸ごと生成するとか… 続きを読む 新しい投稿へ 過去の投稿へ
2024/02/24 field, value を文脈キーワード化 C# 13 向けに検討されている機能の一つに、 「半自動プロパティ」とか「field キーワード」と呼ばれているものがあります。 元々は C# 12 向けに考えられていて、去年、うちのブログでも書いているやつです。 【C# 12 候補】半自動プロパティ 簡単におさらいすると、 プロパティの get/set アクセサー内で、field を使って バッキング フィールド(自動プロパティの値を保存するためにコンパイラーが生成するフィールド)に明示的にアクセスするというものです。 … 続きを読む
2024/02/18 オーバーロード解決優先度 今日は「負の遺産整理で消したいけども消せないメソッド対処」の話。 紆余曲折合って、現状、OverloadResolutionPriority 属性でオーバーロード解決に優先度をつけて、 優先度の高いものだけを見るようにするという案になっています。 最近のわかりやすい例だと、「パフォーマンス改善のために配列引数を ReadOnlySpan 引数に変えたい」というのをやりたいとします。 元々、配列引数で作っていたとして、 int[] x = [1, 2, 3]; C.M(x); … 続きを読む
2024/02/17 ジェネリック型引数の部分型推論 C# のジェネリック型引数の推論を賢くしたいという話は、issue として記録されている分に限っても5年くらい前からあります。 Champion: "Partial Type Inference" 現状の C# の型推論は割と "All or Nothing" で、 new() みたいに型全体の省略はできても、new List<>() みたいな「一部分だけ省略」ができません。 // 型全体の推論は可能。 // 左辺から型が… 続きを読む
2024/02/13 ファーストクラスな Span 型 今日は「Span<T>、ReadOnlySpan<T> をコンパイラーで特別扱いしたい」という話。 C# 7.2 の頃、Span<T> 型が追加されて、 安全性を損なわずに unsafe コード並みにパフォーマンスのよいコードが書けるようになりました。 それ以来、.NET の標準ライブラリでもいろんな場面でSpan<T> 型が活用されています。 いまや結構重要なポジションを担う型なわけですが、 現状の扱いはあくまで「普通の構造体の1つ」で… 続きを読む
2024/02/11 インターセプター 「最近動きがあったもの」ブログをいくつか書いてて、 「続報」みたいなものも書いてるわけですが。 今日のも「まあ、去年から動く実装すでにあるんだけど」という意味では続報なものの、 今日のインターセプターはあまりうちのサイトで取り上げておらず、初めて説明を書く話。 (ライブ配信では時々話に出てるんですが。) インターセプター 今日話すインターセプターは、まあ、Source Generator向けの機能です。 既存の Source Generator でも、 クラスを丸ごと生成するとか… 続きを読む