ブログ 2017/12/17 コピー禁止(non-copyable)構造体アナライザー 書き換えられる(mutable)構造体を作ると事故る問題を解決するためにアナライザー作りました。 mutable 構造体 一般論としては、構造体を mutable に作ると事故ります。 要するに、「書き換えたつもりが、実は書き換えてたのはコピーであって元の値は書き換わってない」的なやつ。 なので、たいていの場合は「構造体は immutable(書き換え不能)に作れ」という指針になります。 その一方で、まれに、ヒープ確保を避けるために mutable な構造体を作りたい場合があります。 … 続きを読む 2017/12/11 ビルドで使う C# コンパイラーを差し替える Visual Studio 2017 15.5で、C# コンパイラーのコード生成の仕方がちょっと変わりました。 その余波で起きる問題を回避するために、Visual Studio は 15.5 のまま、C# コンパイラーのバージョンだけを下げる方法について話します。 背景 C# コンパイラーが出力するコードのどこが変わったか 15.5 の世代では、とにかくいろいろパフォーマンス改善を行っています。 .NET Coreのランタイムや標準ライブラリのパフォーマンスも1~2割上がっています。 … 続きを読む 2017/12/10 バグ報告祭り やっぱリリースするといろいろバグを見つけるよねと言う話 (Visual Studio 15.5がリリースされて以来バグ報告たくさん出してる)。 twitter で見かけたのを代理で報告出したり、 前々から気になってたのを改めて調べてみたらコンパイラーのバグだったり、 リリースまでに直るだろうとか高をくくってたやつがまだ直ってなかったり。 safe stackalloc のインテリセンスが効かない問題 報告先: #23584 Span<T>構造体で受け取れば、safe な… 続きを読む 2017/12/09 アナライザーのプロジェクト テンプレートとか dotnet new のテンプレートの話 今日は dotnet new向けのテンプレートを書いてみたという話。 Visual Studio 標準の "Analyzer with Code Fix" テンプレートにちょこっと手を入れたやつです。 AnalyzerConvention 背景 自作アナライザー 昔、結構アナライザーを書いてたんですよ。 ValueChangedGanerator RecordConstructorGenerator LazyMixin BitFields … 続きを読む 2017/12/06 Rune と fast Utf8String 今日はRoslynじゃなくてCoreFx方面の話だし、issueの投稿日時的には9月とかで割かし「今更」な話。 Introducing System.Rune #24093 New UTF8String APIs #1751 Rune 1個目のやつ、要は「Unicode のコードポイントに相当するプリミティブ型が欲しい」的な話です。 文字とは… プログラミングにおける「文字」に関するおさらい: charって何なんだろうね… と路頭に迷った結果が、以下のような感じ。 … 続きを読む 新しい投稿へ 過去の投稿へ
2017/12/17 コピー禁止(non-copyable)構造体アナライザー 書き換えられる(mutable)構造体を作ると事故る問題を解決するためにアナライザー作りました。 mutable 構造体 一般論としては、構造体を mutable に作ると事故ります。 要するに、「書き換えたつもりが、実は書き換えてたのはコピーであって元の値は書き換わってない」的なやつ。 なので、たいていの場合は「構造体は immutable(書き換え不能)に作れ」という指針になります。 その一方で、まれに、ヒープ確保を避けるために mutable な構造体を作りたい場合があります。 … 続きを読む
2017/12/11 ビルドで使う C# コンパイラーを差し替える Visual Studio 2017 15.5で、C# コンパイラーのコード生成の仕方がちょっと変わりました。 その余波で起きる問題を回避するために、Visual Studio は 15.5 のまま、C# コンパイラーのバージョンだけを下げる方法について話します。 背景 C# コンパイラーが出力するコードのどこが変わったか 15.5 の世代では、とにかくいろいろパフォーマンス改善を行っています。 .NET Coreのランタイムや標準ライブラリのパフォーマンスも1~2割上がっています。 … 続きを読む
2017/12/10 バグ報告祭り やっぱリリースするといろいろバグを見つけるよねと言う話 (Visual Studio 15.5がリリースされて以来バグ報告たくさん出してる)。 twitter で見かけたのを代理で報告出したり、 前々から気になってたのを改めて調べてみたらコンパイラーのバグだったり、 リリースまでに直るだろうとか高をくくってたやつがまだ直ってなかったり。 safe stackalloc のインテリセンスが効かない問題 報告先: #23584 Span<T>構造体で受け取れば、safe な… 続きを読む
2017/12/09 アナライザーのプロジェクト テンプレートとか dotnet new のテンプレートの話 今日は dotnet new向けのテンプレートを書いてみたという話。 Visual Studio 標準の "Analyzer with Code Fix" テンプレートにちょこっと手を入れたやつです。 AnalyzerConvention 背景 自作アナライザー 昔、結構アナライザーを書いてたんですよ。 ValueChangedGanerator RecordConstructorGenerator LazyMixin BitFields … 続きを読む
2017/12/06 Rune と fast Utf8String 今日はRoslynじゃなくてCoreFx方面の話だし、issueの投稿日時的には9月とかで割かし「今更」な話。 Introducing System.Rune #24093 New UTF8String APIs #1751 Rune 1個目のやつ、要は「Unicode のコードポイントに相当するプリミティブ型が欲しい」的な話です。 文字とは… プログラミングにおける「文字」に関するおさらい: charって何なんだろうね… と路頭に迷った結果が、以下のような感じ。 … 続きを読む