ブログ 2018/12/21 ピックアップRoslyn 12/21 & Connect() Japan フォローアップ 昨日、Connect(); Japan 2018でちょっとだけですけども、C# 8.0の話をしたりしました。 7分(ちょっと超過したけど)だとあんまり大したことを話せず… とりあえず、昨日やったデモは、1機能1コミットでプルリクを作って GitHub においてあるのでそちらも参照してみてください。 C# 8.0 デモ用 … 昨日やれたデモ。Preview 1 で入った機能の紹介。 UfcppSample … C# によるプログラミング入門で書いてるコードに対して NullableRe… 続きを読む 2018/12/20 foreach の掛け方いろいろ IEnumerator の別実装で、 インターフェイス越しの foreach には仮想呼び出しのコストが結構掛かっているという話を書きました。 (そちらでの主題は「なので、MoveNext/Currentの2つに分かれているのはちょっともったいない」という話でした。 もちろん、それを気にしないといけないのは大体パフォーマンス最優先のエクストリームな状況だけです。) あと、配列のインデクサーでは、配列とSpan<T>構造体の列挙には C# のレベルでも JIT のレベルでも最適… 続きを読む 2018/12/19 IEnumerator の別実装 Devirtualization 最適化の話で仮想呼び出しのコストの話もしました。 そこでもう1つ思い出してほしいのが、C# 8.0 Async streamsで書いた、 IAsyncEnumerator<T>インターフェイスの話。 最終的な決定としては以下のような API を持っています。 public interface IAsyncEnumerator<out T> { T Current { get; } ValueTask<boo… 続きを読む 2018/12/18 Guarded Devirtualization 今日はちょっと将来の話。 提案ドキュメントとか予備実験的な実装はあるんですが、 リリースされる時期については未定のものです。 Guarded Devirtualization という最適化手法。 参考: JIT: see if guarded devirtualization for EqualityComparer methods pays off (余談ですが、この提案に当たっての調査レポート、ものすごく丁寧で良い内容です。 何かを提案する際の理想形。) Devirtu… 続きを読む 2018/12/17 Devirtualization (脱仮想化) 今日は一般論として「仮想メソッドは避けれるなら避けたい」という話と、 .NET Core 2.1 で仮想メソッドの「devirtualization」(脱仮想化)のための最適化が入っているという話。 仮想メソッドのコスト 多くのプログラミング言語で、 いわゆる多態的な動作の実現のために、 仮想呼び出し(virtual call)という機能が提供されています。 仮想呼び出しは、仮想関数テーブルを使った実装が一般的です。 テーブルを使った実装には以下のような利点があります。 後か… 続きを読む 新しい投稿へ 過去の投稿へ
2018/12/21 ピックアップRoslyn 12/21 & Connect() Japan フォローアップ 昨日、Connect(); Japan 2018でちょっとだけですけども、C# 8.0の話をしたりしました。 7分(ちょっと超過したけど)だとあんまり大したことを話せず… とりあえず、昨日やったデモは、1機能1コミットでプルリクを作って GitHub においてあるのでそちらも参照してみてください。 C# 8.0 デモ用 … 昨日やれたデモ。Preview 1 で入った機能の紹介。 UfcppSample … C# によるプログラミング入門で書いてるコードに対して NullableRe… 続きを読む
2018/12/20 foreach の掛け方いろいろ IEnumerator の別実装で、 インターフェイス越しの foreach には仮想呼び出しのコストが結構掛かっているという話を書きました。 (そちらでの主題は「なので、MoveNext/Currentの2つに分かれているのはちょっともったいない」という話でした。 もちろん、それを気にしないといけないのは大体パフォーマンス最優先のエクストリームな状況だけです。) あと、配列のインデクサーでは、配列とSpan<T>構造体の列挙には C# のレベルでも JIT のレベルでも最適… 続きを読む
2018/12/19 IEnumerator の別実装 Devirtualization 最適化の話で仮想呼び出しのコストの話もしました。 そこでもう1つ思い出してほしいのが、C# 8.0 Async streamsで書いた、 IAsyncEnumerator<T>インターフェイスの話。 最終的な決定としては以下のような API を持っています。 public interface IAsyncEnumerator<out T> { T Current { get; } ValueTask<boo… 続きを読む
2018/12/18 Guarded Devirtualization 今日はちょっと将来の話。 提案ドキュメントとか予備実験的な実装はあるんですが、 リリースされる時期については未定のものです。 Guarded Devirtualization という最適化手法。 参考: JIT: see if guarded devirtualization for EqualityComparer methods pays off (余談ですが、この提案に当たっての調査レポート、ものすごく丁寧で良い内容です。 何かを提案する際の理想形。) Devirtu… 続きを読む
2018/12/17 Devirtualization (脱仮想化) 今日は一般論として「仮想メソッドは避けれるなら避けたい」という話と、 .NET Core 2.1 で仮想メソッドの「devirtualization」(脱仮想化)のための最適化が入っているという話。 仮想メソッドのコスト 多くのプログラミング言語で、 いわゆる多態的な動作の実現のために、 仮想呼び出し(virtual call)という機能が提供されています。 仮想呼び出しは、仮想関数テーブルを使った実装が一般的です。 テーブルを使った実装には以下のような利点があります。 後か… 続きを読む