ブログ 2018/12/14 System.Runtime.CompilerServices.Unsafe 昨日から始まった在庫一掃処分セール的なブログなんですが、結構な頻度で「Unsafe クラス」ってのが出てきます。 以下のパッケージに含まれているもので、こいつをを参照すれば、通常の C# では書けないようなどぎつい unsafe な真似がし放題になります。 System.Runtime.CompilerServices.Unsafe これの登場はもう結構前なんですけども、そういえばちゃんとした説明をしたことなかったなと。 .NET の IL は意外とやりたい放題 上記パッケージ… 続きを読む 2018/12/13 配列のインデクサー C# 8.0 がらみの話も一段落してしまったので、 今日からしばらく予告通り、Gist に書き捨ててたもののブログ化になります。 ぶっちゃけ、在庫一掃処分セールみたいなものなので過度な期待はしないでください。 今日は C# コンパイラーと JIT レベルの最適化の話。 配列の範囲チェック .NET の配列は、バッファオーバーランとかのメモリ破壊を避けるべく、範囲チェックがかかっています。 using System; class Program { static v… 続きを読む 2018/12/12 C# 8.0 その他 (Preview 1での未実装機能) これまで紹介してきたもの以外にも、C# 8.0での導入が予定されている機能はいくつかあります。 ただ、Visual Studio 2019 Preview 1でまだ実装されていない機能・ちゃんと動いていない機能はまとめて軽く紹介して終わりにしようかと思います。 次以降のPreviewで実装されたらまた改めて紹介します。 インターフェイスのデフォルト実装 インターフェイス中のメソッドに実装を持てるようになります。 これに関しては昔書いた記事があるのでそちらを参照: 「インターフェー… 続きを読む 2018/12/11 C# 8.0 Async streams 一応、Preview 1で実装されてはいるんですが、ちょっと不具合があって動かない機能が1つあったりします。 非同期ストリーム(async streams)と呼ばれていて、具体的には以下の2つの機能からなります。 非同期イテレーター … 戻り値をIAsyncEnumerable<T>インターフェイスにすることで、awaitとyieldを混在させることができる 非同期 foreach … await foreachという書き方で、IAsyncEnumerable<T&g… 続きを読む 2018/12/10 C# 8.0 パターン マッチング 今日はパターン マッチングの話。 昨日のswitch式に引き続き、 真っ先に実装されてそうなものなのに Preview 1 には入っていなかったやつ。 というか、switch式自体、このパターン マッチングの一部として提案されているものです。 パターン マッチング “完全版” パターン マッチングは、元々は C# 7.0 で検討されていたものの、 結局、一部分だけが C# 7.0 に入り、複雑なものは C# 8.0 に回りました。 パターン C# のバージョン … 続きを読む 新しい投稿へ 過去の投稿へ
2018/12/14 System.Runtime.CompilerServices.Unsafe 昨日から始まった在庫一掃処分セール的なブログなんですが、結構な頻度で「Unsafe クラス」ってのが出てきます。 以下のパッケージに含まれているもので、こいつをを参照すれば、通常の C# では書けないようなどぎつい unsafe な真似がし放題になります。 System.Runtime.CompilerServices.Unsafe これの登場はもう結構前なんですけども、そういえばちゃんとした説明をしたことなかったなと。 .NET の IL は意外とやりたい放題 上記パッケージ… 続きを読む
2018/12/13 配列のインデクサー C# 8.0 がらみの話も一段落してしまったので、 今日からしばらく予告通り、Gist に書き捨ててたもののブログ化になります。 ぶっちゃけ、在庫一掃処分セールみたいなものなので過度な期待はしないでください。 今日は C# コンパイラーと JIT レベルの最適化の話。 配列の範囲チェック .NET の配列は、バッファオーバーランとかのメモリ破壊を避けるべく、範囲チェックがかかっています。 using System; class Program { static v… 続きを読む
2018/12/12 C# 8.0 その他 (Preview 1での未実装機能) これまで紹介してきたもの以外にも、C# 8.0での導入が予定されている機能はいくつかあります。 ただ、Visual Studio 2019 Preview 1でまだ実装されていない機能・ちゃんと動いていない機能はまとめて軽く紹介して終わりにしようかと思います。 次以降のPreviewで実装されたらまた改めて紹介します。 インターフェイスのデフォルト実装 インターフェイス中のメソッドに実装を持てるようになります。 これに関しては昔書いた記事があるのでそちらを参照: 「インターフェー… 続きを読む
2018/12/11 C# 8.0 Async streams 一応、Preview 1で実装されてはいるんですが、ちょっと不具合があって動かない機能が1つあったりします。 非同期ストリーム(async streams)と呼ばれていて、具体的には以下の2つの機能からなります。 非同期イテレーター … 戻り値をIAsyncEnumerable<T>インターフェイスにすることで、awaitとyieldを混在させることができる 非同期 foreach … await foreachという書き方で、IAsyncEnumerable<T&g… 続きを読む
2018/12/10 C# 8.0 パターン マッチング 今日はパターン マッチングの話。 昨日のswitch式に引き続き、 真っ先に実装されてそうなものなのに Preview 1 には入っていなかったやつ。 というか、switch式自体、このパターン マッチングの一部として提案されているものです。 パターン マッチング “完全版” パターン マッチングは、元々は C# 7.0 で検討されていたものの、 結局、一部分だけが C# 7.0 に入り、複雑なものは C# 8.0 に回りました。 パターン C# のバージョン … 続きを読む