ufcpp-live / UfcppLiveAgenda

@ufcpp live streaming agenda
MIT License
24 stars 2 forks source link

.NET 5.0 GA 記念雑談枠 #19

Closed ufcpp closed 3 years ago

ufcpp commented 3 years ago

記念。

毎年恒例、ずっと Preview Channel な Visual Studio を使い続けているので正式リリース時点で何が新機能なのかわからなくなっている件。

改めてリリースノートとか、 .NET Conf に伴って公開されたブログに目を通していこうという配信。

ufcpp-live commented 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
{
}
ufcpp-live commented 3 years ago

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);
ufcpp-live commented 3 years ago

{} とか () とかの扱いは、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 時代から有効
ufcpp-live commented 3 years ago

https://youtu.be/i02HL8g-D1w

ufcpp commented 3 years ago

完全にテーマなく「雑談」で配信したときに、参加者が多いとほんとに脇道にそれて帰ってこれないという問題が…