Closed ufcpp closed 3 years ago
今日の書き捨てコード
「.NET 5 のパフォーマンス改善、かなりの割合 Hardware Intrinsics だよ」 「今、スピードを求めるなら言語がどうこうじゃなくて CPU のお気持ちをどのくらい察せられるかにかかってる」 「ただし、それをやるとCPUごとにすさまじい分岐が発生する」 「速いといわれてる C++ のライブラリは #ifdef だらけ」
// C++
#ifdef GCC
#ifdef AVX
#endif
#elif MSVC
#endif
if (System.Runtime.Intrinsics.X86.Avx.IsSupported)
{
}
else
{
}
record / target-typed new / タプルと匿名型 の不整合話
Point p1 = new Point { X = 1, Y = 2 };
Point p2 = new Point(1, 2);
Point p3 = new() { X = 1, Y = 2 };
Point p4 = new(1, 2);
var p5 = new { X = 1, Y = 2 };
var p6 = (1, 2);
record Point(int X = 0, int Y = 0);
今から1から言語を作るなら↓みたいになってたと思う。
Point p1 = Point { X = 1, Y = 2 };
Point p2 = Point(1, 2);
Point p3 = { X = 1, Y = 2 };
Point p4 = (1, 2);
var p5 = { X = 1, Y = 2 };
var p6 = (1, 2);
{}
とか ()
とかの扱いは、default とか配列初期化子とかも絡む。
Point p1 = new(); // () 要る
Point p2 = default; // () 要らない
var array = new int[] { 1, 2, 3 }; // これは new int[]() {} とは書かず
int[] array = { 1, 2, 3 }; // C# 1.0 時代から有効なコード
var array = new object[] { 1, "" }; // 有効なコード
var array = new[] { 1, "" }; // 無効(要素からの配列型推論が効かない)
object[] array = { 1, "" }; // これは C# 1.0 時代から有効
完全にテーマなく「雑談」で配信したときに、参加者が多いとほんとに脇道にそれて帰ってこれないという問題が…
記念。
毎年恒例、ずっと Preview Channel な Visual Studio を使い続けているので正式リリース時点で何が新機能なのかわからなくなっている件。
改めてリリースノートとか、 .NET Conf に伴って公開されたブログに目を通していこうという配信。