ブログ 2019/02/10 ピックアップRoslyn 2/10 変数のshadowing、関数ポインター、実行時nullチェック、Index/Rangeの仕様変更 しばらくちょっと忙しくて紹介できてなかった話をいくつかまとめて。 匿名関数の変数 shadowing こないだの VS 2019 Preview 2 から、 1段外側の変数と同じ名前で、 ローカル関数内の引数・変数を宣言できるようになったみたいです。 外側の x を隠すので shadowing と呼ばれます。 static int M() { int x = 1; // C# 8.0 で、1段外側の変数の x と同名の引数が使えるように int m(in… 続きを読む 2019/01/28 bool 型の false, true, それ以外 これまで(C# 7.3 まで)、C# の switch ステートメントで bool 型を使う場合、以下のように、default 句が必須になることが多々ありました。 static int X(bool b) { switch (b) { case false: return 0; case true: return 1; default: return -1; } } bool 型には false と true しかないはずなのにこ… 続きを読む 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 でも利用可能です。 というか、ドキュメントは… 続きを読む 新しい投稿へ 過去の投稿へ
2019/02/10 ピックアップRoslyn 2/10 変数のshadowing、関数ポインター、実行時nullチェック、Index/Rangeの仕様変更 しばらくちょっと忙しくて紹介できてなかった話をいくつかまとめて。 匿名関数の変数 shadowing こないだの VS 2019 Preview 2 から、 1段外側の変数と同じ名前で、 ローカル関数内の引数・変数を宣言できるようになったみたいです。 外側の x を隠すので shadowing と呼ばれます。 static int M() { int x = 1; // C# 8.0 で、1段外側の変数の x と同名の引数が使えるように int m(in… 続きを読む
2019/01/28 bool 型の false, true, それ以外 これまで(C# 7.3 まで)、C# の switch ステートメントで bool 型を使う場合、以下のように、default 句が必須になることが多々ありました。 static int X(bool b) { switch (b) { case false: return 0; case true: return 1; default: return -1; } } bool 型には false と true しかないはずなのにこ… 続きを読む
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 でも利用可能です。 というか、ドキュメントは… 続きを読む