ブログ 2022/02/19 【C# 10.0 変更点】 構造体のフィールド初期化子にはコンストラクター必須 先日 Visual Studio 17.1.0 (正式リリース)と 17.2 Preview 1 が出たわけですが。 これをインストールすると、ちょこっと C# 10.0 の構造体のフィールド初期化子の挙動が変わります。 以下のようなコード、17.0/17.1 Preview 時代はコンパイルできていたんですが、17.1/17.2 Preview ではコンパイル エラーになります。 struct S { public int X = 1; // ここが原因。 } ちなみ… 続きを読む 2022/02/16 C# 中の埋め込み言語 さかのぼること4年前、C# 中に正規表現な文字列を書くと以下のように構文ハイライトされるようになりました。 色が付く以外に、コード補完や構文ミスに対する警告とかも出ます。 今日はこの手の「C# 中への別言語の埋め込み」がらみの話です。 先日、4件くらい low level imprevements のブログを書いて、その中で「実に5年ぶりの low level の機運」とか書きましたが、 「埋め込み言語」にも4年ぶりの機運が来ています。 JSON 4年ぶりに何が起きたかというと、… 続きを読む 2022/02/13 【C# 11 候補】 引数の null チェック 先日出た Visual Studio 17.1 Preview 3 で、引数 null チェックの簡素化構文が入りました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 展開結果 上記の void m(string x!!) は以下のように展開されます。 (クラス名は実際には通常の C# では書けない変な名前で生成されます。) void m(string x) { Internal.ThrowIf… 続きを読む 2022/02/11 【C# 11候補】 ref field 今日は「low level」関連4個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span 3個目: 【C# 11 候補】 ref 型引数 今日は ref フィールドとか、構造体を使ったパフォーマンス改善系の話。 Low Level Struct Improvements 昨年10月の low level hackathon で何かプロトタイプ実装があったわけじゃないですし、提案自体は2020年か… 続きを読む 2022/02/07 【C# 11 候補】 ref 型引数 今日は「low level」系統の話3個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span ref 構造体の制限 今日もさかのぼること C# 7.2 の頃、Span<T> 構造体が入ったときの話から。 Span<T> 構造体は内部に ref フィールド的なものを持っていて、 変なところ(例えばもう解放したあとの不正な場所)を参照したりしないよう、ヒープ上にコピーできないという制… 続きを読む 新しい投稿へ 過去の投稿へ
2022/02/19 【C# 10.0 変更点】 構造体のフィールド初期化子にはコンストラクター必須 先日 Visual Studio 17.1.0 (正式リリース)と 17.2 Preview 1 が出たわけですが。 これをインストールすると、ちょこっと C# 10.0 の構造体のフィールド初期化子の挙動が変わります。 以下のようなコード、17.0/17.1 Preview 時代はコンパイルできていたんですが、17.1/17.2 Preview ではコンパイル エラーになります。 struct S { public int X = 1; // ここが原因。 } ちなみ… 続きを読む
2022/02/16 C# 中の埋め込み言語 さかのぼること4年前、C# 中に正規表現な文字列を書くと以下のように構文ハイライトされるようになりました。 色が付く以外に、コード補完や構文ミスに対する警告とかも出ます。 今日はこの手の「C# 中への別言語の埋め込み」がらみの話です。 先日、4件くらい low level imprevements のブログを書いて、その中で「実に5年ぶりの low level の機運」とか書きましたが、 「埋め込み言語」にも4年ぶりの機運が来ています。 JSON 4年ぶりに何が起きたかというと、… 続きを読む
2022/02/13 【C# 11 候補】 引数の null チェック 先日出た Visual Studio 17.1 Preview 3 で、引数 null チェックの簡素化構文が入りました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 展開結果 上記の void m(string x!!) は以下のように展開されます。 (クラス名は実際には通常の C# では書けない変な名前で生成されます。) void m(string x) { Internal.ThrowIf… 続きを読む
2022/02/11 【C# 11候補】 ref field 今日は「low level」関連4個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span 3個目: 【C# 11 候補】 ref 型引数 今日は ref フィールドとか、構造体を使ったパフォーマンス改善系の話。 Low Level Struct Improvements 昨年10月の low level hackathon で何かプロトタイプ実装があったわけじゃないですし、提案自体は2020年か… 続きを読む
2022/02/07 【C# 11 候補】 ref 型引数 今日は「low level」系統の話3個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span ref 構造体の制限 今日もさかのぼること C# 7.2 の頃、Span<T> 構造体が入ったときの話から。 Span<T> 構造体は内部に ref フィールド的なものを持っていて、 変なところ(例えばもう解放したあとの不正な場所)を参照したりしないよう、ヒープ上にコピーできないという制… 続きを読む