将来のメモリ管理
今日はまたちょっと将来の話。 リリース時期・本当にリリースされるか未定の機能で、メモリ管理がらみの話をまとめて。 ヒープ確保の負担を減らしたい メモリの管理方法にはスタックとヒープがあって、 一般的にはスタックの方が高速です。 スタックの方が制限がきついので、遅くてもしょうがなくヒープを使う場面がでてきます。 ヒープ管理は結構大きな負担なので、これを減らせば結構なパフォーマンス改善になります。...
View ArticleUnsafe クラス(保証外)
今日は Unsafe クラスがらみの話で、 特にきわどい(動作保証外)やつ。 .NET Core 2.0 ~ 2.1 くらいでは動くことを確認していますが、 仕様として保証がなく、古いランタイムや将来、また、Mono などの他の .NET 環境で動く保証がないものです。 メモリレイアウトが同じもの まず、元々 unsafe コードを使ってできるし、...
View ArticleUnsafe クラス(保証のある利用例)
「Unsafe クラス(保証外)」ではわざわざ動作保証のない相当に邪悪なコードを紹介しました。 とはいえ、別に Unsafeクラスを使った瞬間に動作保証がなくなるわけではありません。 単に、開発者の裁量に任されるというだけで、正しく使えば問題は起こしません。 例えば、Unsafe.Asメソッドは型チェックをせずに型を強制変換するメソッドですが、...
View Article仮想テーブルの中身をのぞき見
しばらくやってた Unsafe シリーズですが、今日は特に凶悪な奴です。 割かし最近なんですが、coreclr にこんなプルリクが出ていました。 Improve performance of Memory<T>.Span property getter...
View Article段階コンパイル (Tiered Compilation)
今日は .NET Core 2.1 の頃に実装されて(有効にするには設定が必要)、 .NET Core 2.2 からは既定で有効になるランタイムの最適化の話。 (※ Preview の頃にいったん規定で有効になったものの、結局、リリースでは opt-in に戻した模様。後述する gen0 最適化問題とかがあるせいかも。) .NET Core 2.1 の頃に以下のようなブログが出ていました。...
View ArticleHardware Intrinsics
今日は、おそらく .NET Core 3.0 で正式リリースとなるであろう最適化の話。 Hardware Intrinsics といって、特定 CPU の専用命令を利用するための機能の話になります。 元々は .NET Core 2.1 の頃に作業が始まっているんですが、2.1 リリースのタイミングには間に合いませんでした。 しかし、内部的な対応はすでに入っていて、daily...
View Articlenull かどうかを判定
C# では、無効な値として null をよく使うので、 「値が有効かどうか」「無効だったら何もしない」みたいな判定のために null チェックを結構書きます。 で、C# の null は「全ビットが0」で表されるので、通常、null チェックは非常に軽い処理(単なる 0 との比較)になります。 通常は。 問題は、== 演算子のオーバーロードがある場合。 その場合、x == null...
View ArticleVisual Studio 2019 Preview 2
なんか、Visual Studio 2019 Preview 2が出てますね。 リリースノート上は、.NET 関連はまた「リファクタリング機能が増えたよ」みたいな感じのアナウンス。 あとは、自分が手元で確認してみた感じ、Preview 1の頃から3つほど C# 8.0 の実装が増えてました。 再帰パターン using の改善 静的ローカル関数 動作確認で使ったコード:...
View Articlebool 型の 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...
View ArticleピックアップRoslyn 2/10 変数のshadowing、関数ポインター、実行時nullチェック、Index/Rangeの仕様変更
しばらくちょっと忙しくて紹介できてなかった話をいくつかまとめて。 匿名関数の変数 shadowing こないだの VS 2019 Preview 2 から、 1段外側の変数と同じ名前で、 ローカル関数内の引数・変数を宣言できるようになったみたいです。 外側の x を隠すので shadowing と呼ばれます。 static int M() { int x = 1; // C# 8.0...
View ArticleVisual Studio 2019 Preview 3
Visual Studio 2019 Preview 3 出てますね。 C# がらみは特にアナウンスもないんですが、Roslyn の 16.0.P3 マイルストーンを見るに、大体は IDE がらみと null 許容参照型がらみを中心としたバグ修正っぽいです。 Preview 2 からあんまり期間が開いていませんし、元からバグ修正のみな予定だったのかも。 switch 式のバグ...
View ArticleVisual Studio 2019 RC と Preview 4
Visual Studio 2019 がリリース候補版(RC) になりました。 Visual Studio 2019 Release Candidate (RC) now available リリース チャネルとプレビュー チャネル 同時に、Visual Studio 2019 Preview 4 も出ています。 これまで Preview 版を使っていた人は単にアップデートを掛ければ...
View Article.NET Core 3.0 Preview 3
こないだ出た Visual Studio 2019 RC1 / Preview 4に対応したバージョンの .NET Core 3 Preview が出たみたいですね。 Announcing .NET Core 3 Preview 3 .NET Core 3.0、最近なんかずっと、Visual Studio より結構遅れてのリリースですよね… おかげで、C# 8.0...
View Articleピックアップ Roslyn 3/12
Visual Studio 2019 (16.0)が RC までいってちょっと落ち着いたのか、csharplang にちょっと動きが。 (もう、次に C# 8.0 絡みの新機能実装がマージされるとしたら 16.1 になるので、C# チーム的には今ちょっと落ち着ける時期のはず。) Designe Notes 3件追加。 Feb 25th, 2019 Feb. 27, 2019 March 4th,...
View ArticleピックアップRoslyn 4/2: corefx 側とのミーティング
3/25 に、corefx 側の design review チームと C# チームで C# 8.0 絡みの折衝をしていたみたいです。その議事録が上がりました。 C# Design Review Notes for Mar 25, 2019 当然、corefx (.NET の基本ライブラリ)依存があったり、corefx 側での作業が必要になる機能の話になるので、話題は以下の3つ null...
View ArticleVisual Studio 2019 GA
Visual Studio 2019 の発表イベントに合わせて、Visual Studio 2019 が GA (general available)になりました。 そういえば、Visual Studio も「GA」って言い方するようになったっぽいですね。 今まで「正式リリース」を指して RTM (Release To Manufacturing、ソフトウェアが CD とか DVD...
View ArticleピックアップRoslyn & Visual Studio 16.1 Preview 1
Visual Studio 16.1 Preview 1 Visual Studio 16.1 Preview 1 が来てたことに今更気付くなど… 先日のVisual Studio 2019 GA の話で書いた通り、これまで「Visual Studio 2019 Preview」をインストールしていた人のところには 16.1 Preview 1 が配信されているはずです。 GA...
View ArticleピックアップRoslyn 4/27 & Visual Studio 16.1 Preview 2
Visual Studio 16.1 Preview 2 Visual Studio 16.1 Preview 2 が来てますね。 C# 8.0、Preview 1 からの差分だと、以下の2つの機能が追加されました。 インターフェイスのデフォルト実装 readonly 関数メンバー インターフェイスのデフォルト実装...
View Article.NET 5、Visual Studio 16.1 Preview 3
今年の build、思ってたよりも .NET がらみが盛沢山… Windows TerminalとかVisual Studio Onlineとかの方がさらにインパクト強そう? ですけど、 .NET がらみもだいぶ。 まあ、3.0 が今年こそ見えてきましたからね。 Introducing .NET 5 .NET Core 4 は Framework 4.X と紛らわしいから欠番にして、次は「5」...
View ArticleピックアップRoslyn 5/19: dotnet-try, .NET Core 3.0 パフォーマンス、null 許容参照型の仕様改善
この1週間ほど、build で発表したことを改めてブログ化したものが投稿されたりとか、build が終わって落ち着いたところで本業に戻ったと思われる投稿とかがたくさんありました。 そのうち3つほど紹介 dotnet-try .NET Core 3.0 でのパフォーマンス改善 C# Design Notes 2件追加(どちらも null 許容参照型がらみ) dotnet-try...
View Article