ブログ 2024/02/11 インターセプター 「最近動きがあったもの」ブログをいくつか書いてて、 「続報」みたいなものも書いてるわけですが。 今日のも「まあ、去年から動く実装すでにあるんだけど」という意味では続報なものの、 今日のインターセプターはあまりうちのサイトで取り上げておらず、初めて説明を書く話。 (ライブ配信では時々話に出てるんですが。) インターセプター 今日話すインターセプターは、まあ、Source Generator向けの機能です。 既存の Source Generator でも、 クラスを丸ごと生成するとか… 続きを読む 2024/02/11 ref 構造体のインターフェイス実装 / 型引数での使用 ref 構造体で説明しているように、 Span<T> 型など一部の型は「スタック上にないといけない」という強い制約があります。 この制約を守るため、これまで、ref 構造体は インターフェイスを実装できなかった ジェネリック型引数に使えなかった という制限が掛かっていました。 C# 13 では、この制限を緩和するため、 ジェネリック型引数に「allows ref struct」という「アンチ制約」を追加する予定です。 こういう案自体は ref フィールドが追加… 続きを読む 2024/02/10 C# での破壊的変更の今後の扱い (続報) 去年の3月にブログに書いたものの続報。 C# でも限定的に破壊的変更を許していこうかという話だったわけですが、 ちょっと具体化しました。 ある機能を実現するにあたって破壊的変更の原則と進め方についての話をしています。 破壊的変更の候補 C# 13 で導入したい field アクセス(自動プロパティのバッキングフィールドにアクセスするための field キーワード)と、 これまでに破壊的変更を避けるためにちょっと変な設計になっている var (型推論変数宣言)、_ (discard)が… 続きを読む 2024/02/08 オブジェクト初期化子中の ^ 演算子 今日の C# 話はちょこっとした修正の話になります。 これまで new C { [^1] = 1 }; がコンパイル通らなかったみたいで、これが最近修正されました。 (Visual Studio 17.9 Preview 3 (1月17日リリース済み)の時点で実装されていました。 気づいてはいたけども、小さすぎてブログにするかどうか迷ってるうちに3週間ほど経過。) 以下のコードで示すような修正内容です。 // これがコンパイル エラーを起こす。 // (Visual Studio… 続きを読む 2023/12/05 \e (エスケープ文字のエスケープ シーケンス) 先々月書いた「C# 13 向けトリアージ」で紹介してた C# 13 候補の1つ、「\e エスケープ シーケンス」が早々に実装されてたという話です。 .NET 8 正式リリース記念の配信ではちょこっと触れてたんですが、そういえばブログには書いてなかったので紹介。 エスケープ文字 キーボードで打てないような文字や、画面に表示されない文字を入力したりするために、 「\n と書いたら改行(U+000A, new line, line feed)に置き換える」みたいな仕様があり、これをエスケープ… 続きを読む 新しい投稿へ 過去の投稿へ
2024/02/11 インターセプター 「最近動きがあったもの」ブログをいくつか書いてて、 「続報」みたいなものも書いてるわけですが。 今日のも「まあ、去年から動く実装すでにあるんだけど」という意味では続報なものの、 今日のインターセプターはあまりうちのサイトで取り上げておらず、初めて説明を書く話。 (ライブ配信では時々話に出てるんですが。) インターセプター 今日話すインターセプターは、まあ、Source Generator向けの機能です。 既存の Source Generator でも、 クラスを丸ごと生成するとか… 続きを読む
2024/02/11 ref 構造体のインターフェイス実装 / 型引数での使用 ref 構造体で説明しているように、 Span<T> 型など一部の型は「スタック上にないといけない」という強い制約があります。 この制約を守るため、これまで、ref 構造体は インターフェイスを実装できなかった ジェネリック型引数に使えなかった という制限が掛かっていました。 C# 13 では、この制限を緩和するため、 ジェネリック型引数に「allows ref struct」という「アンチ制約」を追加する予定です。 こういう案自体は ref フィールドが追加… 続きを読む
2024/02/10 C# での破壊的変更の今後の扱い (続報) 去年の3月にブログに書いたものの続報。 C# でも限定的に破壊的変更を許していこうかという話だったわけですが、 ちょっと具体化しました。 ある機能を実現するにあたって破壊的変更の原則と進め方についての話をしています。 破壊的変更の候補 C# 13 で導入したい field アクセス(自動プロパティのバッキングフィールドにアクセスするための field キーワード)と、 これまでに破壊的変更を避けるためにちょっと変な設計になっている var (型推論変数宣言)、_ (discard)が… 続きを読む
2024/02/08 オブジェクト初期化子中の ^ 演算子 今日の C# 話はちょこっとした修正の話になります。 これまで new C { [^1] = 1 }; がコンパイル通らなかったみたいで、これが最近修正されました。 (Visual Studio 17.9 Preview 3 (1月17日リリース済み)の時点で実装されていました。 気づいてはいたけども、小さすぎてブログにするかどうか迷ってるうちに3週間ほど経過。) 以下のコードで示すような修正内容です。 // これがコンパイル エラーを起こす。 // (Visual Studio… 続きを読む
2023/12/05 \e (エスケープ文字のエスケープ シーケンス) 先々月書いた「C# 13 向けトリアージ」で紹介してた C# 13 候補の1つ、「\e エスケープ シーケンス」が早々に実装されてたという話です。 .NET 8 正式リリース記念の配信ではちょこっと触れてたんですが、そういえばブログには書いてなかったので紹介。 エスケープ文字 キーボードで打てないような文字や、画面に表示されない文字を入力したりするために、 「\n と書いたら改行(U+000A, new line, line feed)に置き換える」みたいな仕様があり、これをエスケープ… 続きを読む