ピックアップRoslyn 10/30: 分解、宣言式、ワイルドカードの内部仕様変更
Roslynリポジトリのブランチやマイルストーンの動きを見るに、次のVisual Studio 15 PreviewはもうRCなようですが。 RC (リリース候補)の段階で大きな変更をするわけもなく、最近のC#チームの動きは大体「ただひたすらバグ修正」なわけです。 そんな中、仕様変更の話が。 Proposed changes for deconstruction, declaration...
View ArticleRoslynに提案issueを立てた話: nullの扱いに関して
MVP Global Summit (グロサミ)に行ってきてたわけですが。 なんか、行きの飛行機内で思いついてしまって、そのまま向こうで頑張って issue 投稿、 せっかくだからグロサミ中に Mads (C# のPM)を捕まえて「こんな問題見つけちゃって、昨日ちょうどissue立てたんだけどどうしよう?」みたいな話を振ってきたり。...
View ArticleVisual Studio 2017 Release Candidate
来てた。 (Connect前のリーク騒動ありましたが… Connectをもって) Visual Studio 2017 Release Candidate もう今、クロスプラットフォームを推す状況なので、Visual Studio for Mac (Xamarin Studioのリブランディング)と、モバイル開発、Azure辺りなんかが前面に出てますが。...
View ArticleピックアップRoslyn 7/12
Mads、怒涛のClose祭り。 久しぶりに、C# Design Notesが投稿されてました。というか、5月のNotesが今投稿されているなど。 要するに、Visual Studio 2015関連作業がやっと落ち着いたってことなんですかね、きっと。 C# Language Design Review, Apr 22, 2015 #3910...
View ArticleC#小ネタ集: C#をWeb上で試す
小ネタ ここのところ、twitterで脊髄反射的に飛びついたきり、gistとかに書き散らかして終わりにしちゃってるネタがちらほら溜まってきたので、ここらでブログかしようかなと思います。 C#小ネタ集とか銘打って。 C#小ネタ集と言いつつ、あんまりC#が関係ない物もありますが。 結構溜まってるんで、数日は連続で書くことになるかなと思われます。 Web上で試したい...
View Article小ネタ コンパイル結果を覗いてみよう
めったにはないんですが、パフォーマンス チューニングとかを始めると、C#のコンパイル結果がどうなっているかを覗きたくなることがあります。C#の場合は、C#コード → IL (.NETの中間コード) → ネイティブ コードという2段階の変換が掛かります。 ということで、その極々まれにやりたくなることをやってみましょう。ILとネイティブ コードをそれぞれ覗いてみます。...
View Article小ネタ corefxlabとSystem.Memory
corefxlab .NETチームは以下のリポジトリの1つに、corefxlabというものがあります。 名前通り、corefx (.NET の標準ライブラリ)入りを目指して試験的なコードを入れておく場所で、 安定したものからcorefxに移転になったりします。 corefxの方にいきなり入らず、一度「lab」を経ているわけで、...
View Article小ネタ 式の評価順序
C#小ネタと言いつつ、IL小ネタになりがちだったので、今日はC#小ネタらしく。 最初にちょっとしたクイズ。 まず、中身は何でもいいんですが適当な2引数のメソッドを用意します。 例として、単純な足し算でも用意しておきましょう。 static int F(int x, int y) => x + y; 以下の2つのコードの挙動は同じでしょうか?違うでしょうか? 1つ目: 一時変数を使用 var...
View Article小ネタ オブジェクト初期化子
今日の小ネタは、オブジェクト初期化子について、意外と知られてないらしい話。 問い 唐突ですが問題です。以下の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小ネタ null関係の演算子
今日は、?.とか??での、nullの判定方法について。 C# 6で導入されたnull条件演算子(?.)ですが、以下の2つの式がほぼ同じ意味になります。 x != null ? x.M() : null x ?.M() 「ほぼ」であって「完全に同じ」と言えないのは、==演算子を呼ぶか呼ばないかが変わってしまうせいです。 前者(自分で==を呼んでいるやつ)はオーバーロードされた==を呼び出しますが、...
View ArticleUpdating Visual Studio 2017 Release Candidate
先月出たVisual Studio 2017 RC、ちょこっとアップデートが掛かりました。 Updating Visual Studio 2017 Release Candidate 小ネタ集?そんなの休み休み。...
View ArticleピックアップRoslyn 12/14
小ネタ休んだついでにピックアップRoslynも。 Visual Studio 2017の正式リリースまではバグ修正くらいしか作業しない段階に来てるんで大したネタはない… と思っていた時期がありました。 まあ、小ネタ程度の話はあった… whileとforのスコープ変更 まあ、既存動作を壊す変更ではないんですが、whileとforの仕様書上の記述を変更しなきゃという話が出ています。 Change...
View Articleパターン マッチング
小ネタ休んだついでに、C# 7思い出話。 そういや、タプルの辺りまでは、C# 7思い出話とか称して、仕様が固まるまでにあった流れなんかもブログに残そうとしてたのを思い出したり。 C# 7の紹介、後半は一気に埋めちゃったのもあって、思い出話をどう書こうか考えてるうちに流れてしまったというか。 ちょっと書くのに苦労した原稿とか、グロサミ参加とか、色々忙しくて忘れていたというか。...
View Article