小ネタ オブジェクト初期化子
今日の小ネタは、オブジェクト初期化子について、意外と知られてないらしい話。 問い 唐突ですが問題です。以下の3つのコードはそれぞれどういう意味でしょう。 var x = new Line { A = new Point { X = 1, Y = 2 }, B = new Point { X = 3, Y = 4 }, }; var x = new Line { A = { X = 1, Y = 2...
View Article小ネタ コレクション初期化子
昨日のオブジェクト初期化子に続き、今日はコレクション初期化子の話。 コレクション初期化子ってのは、例えば以下のようなやつのことです。 // この、{} の部分がコレクション初期化子。 var x = new List<int> { 1, 2, 3, 4, 5 }; このコレクション初期化を使える条件は、Add メソッドを持っていて、かつ、 IEnumerable...
View Article小ネタ インデックス付き foreach
foreach ステートメントで、インデックス付きで列挙したいことが時々あります。 今回は、そういうときの対処方法について。 というか、C# 7が待ち遠しくなる話。 配列やList<T>であれば以下のようにも書けます。 for (int i = 0; i < length; i++) { var item = array[i];...
View Article小ネタ チェック例外とUnion型
今日の話は、C# 7で入る型スイッチや、さらにその先で予定されている、パターン マッチングや、代数的データ型(特にUnion型)というもので、例外処理の仕方が変わるかも、という話です。 例外 例外にはいくつかの性質があります。 まず、挙動としては、以下の2点が特徴的でしょう。 ロング ジャンプ: 複数のメソッドをまたいで、遠く離れた場所に移動する 型スイッチ: 例外の型を見て分岐処理を行う...
View Article小ネタ 同期コンテキストを拾わないTask型
今日も小ネタというかC# 7ネタというか、C# 7に合わせて1個ライブラリ書いたというか。 勢いで、こんなライブラリ1個作ってしまいました。 C# 7向けです(半分くらいはC# 5.0でも使えるものですが)。 ContextFreeTask ということで、C# 7の機能の1つについて説明。 C# 7で以下のような機能が入ります。 非同期メソッドの戻り値に任意の型を使えるように...
View Article小ネタ フォーマット文字識別子
いい加減、小ネタらしい小ネタを書かないとタイトル詐欺臭いのでほんとに小ネタを。 C#では、以下のようなコードが書けたりします。変数abを用意して、a\u200dbって変数に書き込むと、abの値が変わるという。 要するに、この2つは識別子としては同一扱いされます。 using System; class Program { static void Main() { var ab = 0;...
View Article小ネタ 隠しメンバー
今日は、C# 上からは見えない隠しメンバーが作られるという話。 「覚えがないのになぜか『すでに定義があります』っていう名前被りのコンパイル エラーが出た」なんてこともあり得ます。 C# は .NET 向け言語の代表的な位置づけの言語ではありますが、だからと言って、C# の機能と .NET IL (中間言語)の機能は同じではありません。 C#...
View Article小ネタ 隠し演算子(?)
C#には隠しキーワードとして__makerefなどの見慣れないキーワードがあるという話はたまに話題に出てきますが、実は隠し演算子もあります。 演算子 同じ結果の式 意味合い -~x x + 1 xに向かって値が入っているイメージ ~-x x - 1 xから値が出ていくイメージ 副作用を起こさない(非変)インクリメント、デクリメント(non-modified...
View Article.NET Global Tools
.NET Core 2.1 の Preview 1 が公開されたそうで。 以前から、daily build の不安定な奴で良ければ試せていたんですが、オフィシャルにアナウンスがあったということは、作業が一区切りしたということでしょう。 実際、今回の主題の Global Tools は、以前、daily build で試したときには全然動いていませんでした。...
View Articlecszip、nuget.org に上げました
こないだ .NET Global Tools を試すのに作ってみた cszip と csunzip、nuget.org に上げてみといた。 以下のコマンドでインストール可能な状態になっています。 dotnet instal tool -g cszip dotnet instal tool -g csunzip 以下のように適当にもほどがあるんで nuget.org...
View ArticleVisual Studio 15.6 リリース
なんかVisual Studioの更新に 15.6.0 の正式版が配信されてますね。 ブログとかのアナウンスはまだなさそう。グロサミに来たMVPからのフィードバック欲しくてとりあえずリリースだけしちゃったとかですかね。ホテル・会場のWi-Fi負荷が… それか、preview 4の時の告知から内容変わってないから書くことないか? navigation to decompiled sources...
View Article.NET Core 2.1 の JIT 最適化の話
唐突ですが問題 とある構造体、例えば以下のようなものがあったとします。 struct X : IDisposable { public bool IsDisposed; void IDisposable.Dispose() => IsDisposed = true; } この構造体 X の Dispose メソッドを呼び出すにあたって、 以下の3つのうち、一番高速なのはどれでしょう。 //...
View ArticleピックアップRoslyn 3/21: Design Notes一斉アップロード祭り
昨日なんですけども、2018年に入ってからのC# Language Design Meetingの議事録(design notes)が一斉にアップロードされました。 C# Language Design Notes for 2018 読むの大変だった… 春分の日でよかった… 一通りなんとなくは目を通したんですけど、ブログ1回の内容じゃなさすぎるので、少しずつネタにしていこうかと。 ここ数時の状況...
View ArticleピックアップRoslyn 3/23: no-allocation非同期メソッド、最近の Utf8String
昨日のDesign Notes祭りとはまた別件なんですが、こんな提案が。 メソッド単位でAsyncMethodBuilder属性 Proposal: Allow [AsyncMethodBuilder(...)] on methods #1407 corefx/coreclr方面でガッチガチのパフォーマンス改善をやりまくってる人からの提案。...
View ArticleピックアップRoslyn 3/24: Ranges
こないだのDesign Notesアップロード祭り、1月辺りの議題としては割と「Ranges」の話が多かったみたいです。今日はこれの話。 Ranges レンジ、要するに「どこからどこまで」みたいな値の範囲のことです。そこそこいろんなプログラミング言語にありますけども、例えば 1..3みたいな書き方で1~3の範囲を表そうという構文。 .NET Core...
View ArticleピックアップRoslyn 3/31: C# 7.3
C# Language Design Notes アップロード祭りの続き。 Notes のうち3・4割くらいは、C# 7.3の機能の「最後の詰め」みたいな感じの検討でした。 C# 7.3 の状況 ちなみに、先日のブログでも書きましたが、C# 7.3に含める機能はもう概ね固まっているみたいです。進捗状況を見ると全項目Merged。 (大半は、nightly...
View ArticleピックアップRoslyn 4/4 C# 8.0辺りの検討事項
Design Notes の一斉アップロード祭りがらみ、今日でやっと最後。 先月28日に1つ追加の Note もあります。 とりあえずこれまでの分: C# 8.0よりさらに先を見越して、いくつかの機能の採用が決定 一番分量が多かった Ranges (C# 8.0 予定)の話 C# 7.3 で入りそうな機能の話 で、今日は最後に、C# 8.0 辺りで入りそうな機能の話になります。 Caller...
View ArticleC# にも型クラス(Shapes)が欲しい… 距離空間上のアルゴリズム実装
今日は C# で「距離の計算」を汎用的に、かつ、高パフォーマンスでやりたいという話。 というか、やりたいのはやまやまなんだけど、高パフォーマンスを目指すとなかなか大変なことになるという話。 Shapesが来れば楽になるはずだけども、計画上だいぶ先の話なので、待っていると厳しいので大変なのを我慢したという話でもあります。 サンプル コードの全体像: MetricSpace 距離...
View ArticleVisual Studio 15.7 リリース など
Micorsoft Buildに合わせて、Visual Studioの新バージョンが正式リリースしたみたいですね。その他、.NET/C# 関連をいくつか。 告知ブログ: Microsoft Build 2018: New releases for Visual Studio, Visual Studio for Mac, .NET Core and Xamarin.Forms 正式リリース:...
View ArticleC# vNext Preview
以下のページで、C# 8.0のプレビュー公開を始めたみたです。 vNext Preview インストール これまででも、まだ Visual Studio プレビュー版にも組み込まれていないような機能の類も、VSIX (Visual Studio 拡張)や NuGet 参照でコンパイラーだけ差し替えることで使えたりはしました。 roslyn のデイリー ビルドを「パッケージ...
View Article