ブログ 2019/01/24 Visual Studio 2019 Preview 2 なんか、Visual Studio 2019 Preview 2が出てますね。 リリースノート上は、.NET 関連はまた「リファクタリング機能が増えたよ」みたいな感じのアナウンス。 あとは、自分が手元で確認してみた感じ、Preview 1の頃から3つほど C# 8.0 の実装が増えてました。 再帰パターン using の改善 静的ローカル関数 動作確認で使ったコード: Demo/2019/Csharp80/Preview2 再帰パターン これは Preview 1 で入る… 続きを読む 2019/01/04 null かどうかを判定 C# では、無効な値として null をよく使うので、 「値が有効かどうか」「無効だったら何もしない」みたいな判定のために null チェックを結構書きます。 で、C# の null は「全ビットが0」で表されるので、通常、null チェックは非常に軽い処理(単なる 0 との比較)になります。 通常は。 問題は、== 演算子のオーバーロードがある場合。 その場合、x == null は、演算子(を表すメソッド)の呼び出しになります。 もしその == 演算子がインライン展開できないもの… 続きを読む 2018/12/31 Hardware Intrinsics 今日は、おそらく .NET Core 3.0 で正式リリースとなるであろう最適化の話。 Hardware Intrinsics といって、特定 CPU の専用命令を利用するための機能の話になります。 元々は .NET Core 2.1 の頃に作業が始まっているんですが、2.1 リリースのタイミングには間に合いませんでした。 しかし、内部的な対応はすでに入っていて、daily ビルドなパッケージを参照すれば、今現在の .NET Core 2.1 でも利用可能です。 というか、ドキュメントは… 続きを読む 2018/12/30 段階コンパイル (Tiered Compilation) 今日は .NET Core 2.1 の頃に実装されて(有効にするには設定が必要)、 .NET Core 2.2 からは既定で有効になるランタイムの最適化の話。 (※ Preview の頃にいったん規定で有効になったものの、結局、リリースでは opt-in に戻した模様。後述する gen0 最適化問題とかがあるせいかも。) .NET Core 2.1 の頃に以下のようなブログが出ていました。 Tiered Compilation Preview in .NET Core 2.1 … 続きを読む 2018/12/29 仮想テーブルの中身をのぞき見 しばらくやってた Unsafe シリーズですが、今日は特に凶悪な奴です。 割かし最近なんですが、coreclr にこんなプルリクが出ていました。 Improve performance of Memory<T>.Span property getter これがまあ、なかなか凄いコードを含んでいます。仮想テーブルの中身を覗いて、「特定のビットが立っていたら配列」みたいなコードを書いています。 該当箇所 まず、仮想テーブルのポインターを取得 private sta… 続きを読む 新しい投稿へ 過去の投稿へ
2019/01/24 Visual Studio 2019 Preview 2 なんか、Visual Studio 2019 Preview 2が出てますね。 リリースノート上は、.NET 関連はまた「リファクタリング機能が増えたよ」みたいな感じのアナウンス。 あとは、自分が手元で確認してみた感じ、Preview 1の頃から3つほど C# 8.0 の実装が増えてました。 再帰パターン using の改善 静的ローカル関数 動作確認で使ったコード: Demo/2019/Csharp80/Preview2 再帰パターン これは Preview 1 で入る… 続きを読む
2019/01/04 null かどうかを判定 C# では、無効な値として null をよく使うので、 「値が有効かどうか」「無効だったら何もしない」みたいな判定のために null チェックを結構書きます。 で、C# の null は「全ビットが0」で表されるので、通常、null チェックは非常に軽い処理(単なる 0 との比較)になります。 通常は。 問題は、== 演算子のオーバーロードがある場合。 その場合、x == null は、演算子(を表すメソッド)の呼び出しになります。 もしその == 演算子がインライン展開できないもの… 続きを読む
2018/12/31 Hardware Intrinsics 今日は、おそらく .NET Core 3.0 で正式リリースとなるであろう最適化の話。 Hardware Intrinsics といって、特定 CPU の専用命令を利用するための機能の話になります。 元々は .NET Core 2.1 の頃に作業が始まっているんですが、2.1 リリースのタイミングには間に合いませんでした。 しかし、内部的な対応はすでに入っていて、daily ビルドなパッケージを参照すれば、今現在の .NET Core 2.1 でも利用可能です。 というか、ドキュメントは… 続きを読む
2018/12/30 段階コンパイル (Tiered Compilation) 今日は .NET Core 2.1 の頃に実装されて(有効にするには設定が必要)、 .NET Core 2.2 からは既定で有効になるランタイムの最適化の話。 (※ Preview の頃にいったん規定で有効になったものの、結局、リリースでは opt-in に戻した模様。後述する gen0 最適化問題とかがあるせいかも。) .NET Core 2.1 の頃に以下のようなブログが出ていました。 Tiered Compilation Preview in .NET Core 2.1 … 続きを読む
2018/12/29 仮想テーブルの中身をのぞき見 しばらくやってた Unsafe シリーズですが、今日は特に凶悪な奴です。 割かし最近なんですが、coreclr にこんなプルリクが出ていました。 Improve performance of Memory<T>.Span property getter これがまあ、なかなか凄いコードを含んでいます。仮想テーブルの中身を覗いて、「特定のビットが立っていたら配列」みたいなコードを書いています。 該当箇所 まず、仮想テーブルのポインターを取得 private sta… 続きを読む