小ネタ 「deconstruct」という単語
今日も、小ネタなような、C#7思い出話なような。 C# 7で、分解という機能が入ったわけですが、英語だと deconstruction という単語になります。 分解という機能のおさらいですが、以下のような書き方でタプルなどの型のメンバーを抽出できる機能です。 var (x, y) = tuple; これ、他のプログラミング言語だと、destructuring とか呼ばれたりしています。...
View Article小ネタ 構文糖衣と、そうではない構文と
構文糖衣が多い言語 C#は構文糖衣が結構多い言語です。 構文糖衣(syntax sugar)っていうのは、要するに、「定型的な長くて面倒なコードにはなるけども、原理的にはその構文がなくても全く同じ意味のコードが書ける」というような類の機能です。 例えばクエリ式がわかりやすいですが、以下の3つの式は全く同じ意味になります。 from x in data where x > 2 select x...
View Article小ネタ プリミティブ型
.NETには「プリミティブ型」とかいうものがあるんですが、 何をもってプリミティブと言えるのか、 どういう型がプリミティブ型なのかというと、 なんかよくわからない存在です。 Type型にIsPrimitiveというプロパティがあって、こいつがtrueを返すものがプリミティブ型なんですが。 以下のコードを見ての通り、どういう基準なのかがパッと見でわからず。 using static...
View Article小ネタ privateメンバーはAPIの一部か
ことの発端 なんかぐらばくさんとこので、エラーになるはずのコードがPCLなプロジェクトでだけビルド通ってしまって問題になってたらしい。 要点を抜き出すと以下のような感じ。 using System; struct DateTimeWrapper { DateTimeOffset t; public DateTimeWrapper(int i) { // t を初期化しないとコンパイル...
View Article小ネタ string型のマーシャリング
数値や文字列の内部形式は、プログラミング言語ごとに違っています。プログラミング言語をまたいで値を受け渡しするには、その間に変換処理が必要になります。その変換処理のことをマーシャリング(marshalling: 整列する(特に、指揮官の指示で整列、集結、先導されるような意味あい))と言います。 無変換転送...
View Article小ネタ 引数の個数の上限
引数の個数に制限があること、ご存じでしょうか。 むやみに多くても実装上の無駄が大きかったりしますし、上限が決まっていたりします。 C#は意外と大きくて、最大で65536個まで行けます。要するに2バイト分。 ということで、以下のC#コードはコンパイル可能です。 1バイトで収まらない、0~256までの257個の引数。 class Program { static void M( int x0, int...
View Article小ネタ C# と他の言語との差というと
C#で、「他の言語との差というと」とか「他の言語から来たばかりの人が書きがちなコード」みたいなことを聞かれた場合、まず何が思い浮かぶでしょう。 C#に馴れちゃってる人だと、LINQとかasync/awaitとかの機能が最初に浮かんだりします。でも、この辺りは「大きな機能」過ぎて、知ってるか知らないかの二択、1度知れば検索してすぐに解説が出てくる類で、かえって問題にならないという印象。...
View Article小ネタ Concurrent コレクション
.NET 4以来、System.Collections.Concurrent以下に、 Concurrentなコレクションがいくつか追加されました。 Concurrent、英単語の意味としては「同時に起こる」という意味の形容詞。 プログラミングにおいては、「複数のプログラムやスレッドから同時にアクセスされる」という意味で使われ、 「並行」とか「同時実行」とか訳されます。...
View Articlediscards
書いた。 変数宣言式 ということで、今日も「小ネタ」休みで「C#7思い出話」の方を書くことにします。 このページのタイトル このページのタイトルはかなり悩んだ… 実質的にはdiscards(_を使った値の破棄)の話なんですけども。 discards単体だと入れる場所に悩み。 discardsを書ける場所はどこかと考えたら、「変数宣言する場所」なんですよね。...
View Article小ネタ 小さなオブジェクトのスタック割り当て
今回は、C#や.NETの現在ある機能でも、近い将来入りそうな機能でもないんですが、ちょっとした最適化の話。小ネタというか、いつものピックアップRoslynの亜種というか。「Javaでやってるんだし.NETでも」的な要望にし対して、.NETでは事情が変わるよ、というネタ紹介。...
View Article小ネタ 並列化
よく目にする話題だと思いますが、ここ10数年くらい、CPUの性能は高クロック動作化ではなく、並列化によって向上しています。 CPU律速になるような計算処理は、ガチガチに最適化するなら並列処理を考える必要が出てきます。 並列化によって高速化しやすい計算の例として、浮動小数点数のデータ列の積和演算を考えてみます。 例えば、以下のようなコードになります。 private static float...
View Article小ネタ do-while
do-whileステートメントとか使っていますか? あんまり実際に使われているコードを実務で見たことはなく。 使われていないキーワードランキング的にもdoは使われてない方から数えて27位。 もしかしたら使われないどころか存在を忘れてる人すらいるんじゃないかというこの文法。 「使ってる?」とか人に聞いてみたところ、...
View Article小ネタ atan2
今日は、MathクラスのAtan2メソッドの話。あんまり数学がわかってない人だと、「tanの逆関数」なのにどうして2引数あるのかとか、AtanとAtan2で戻り値の範囲が違う(前者が-90度~90度、後者が-180度から180度)のが不思議だったりするみたいですね。 大元をたどるとatan2はFORTRANとかC言語とかの頃からあって、ちょっと調べれる範囲でもFORTRAN...
View Article小ネタ 正規分布の丸み
今日もたいがい、数学の話です。 一瞬、「動きにコクが出る」って表現で話題になったあれの話。 そっかー、アニメーション付ける人に一言で説明するには「コク」って言葉になるのかー… という衝撃は結構ありますが、まあ、乱数をいくつか足すと丸みが出るというの自体は事実。 正規分布 ちゃんとした数学的な説明をすると、 中心極限定理によって、独立な乱数を数多く足せば足すほど正規分布に近づく...
View Article今年の振り返り
普段あんまりこういう「1年の〆」みたいなブログは書かないんですけど、今年は12月に1日1ブログを書いてるついでに、最後に1日を振り返りで埋めてしまおうかなぁとか、数日前に思いついたので。 今年というか、去年くらいからなんですけども、このサイトや僕が関わっているものの傾向を手短にまとめると、 勉強会開催・登壇が減った ブログが増えた ですかねぇ。...
View Article2進数リテラルと数字区切り文字
C# 7思い出話 C# によるプログラミング入門に、ちらほらとC# 7の話題を書き始めたわけですが。 まあ、入門なんで仕様として固まったものだけを書いていくつもりです。ある程度固まりそうな段階まで書かないし、結局予定から漏れたものは修正したり。 一方で、その仕様が固まるまでにあった流れなんかも、ブログに残しといてもいいかなぁとか思ったり。 ってことで、「C#...
View Article【開催報告】 //build/ 振り返り勉強会
5/21(土)に勉強会を開いてました。 今回はまどすた(旧めとべや)との共同開催で、//build/の振り返りでした。 C#ユーザー会 //build/ 2016振り返り 勉強会 まどすた #1 ~ //build/ 2016 振り返り 以下、当日資料の一覧です。 ルームA (サーバー部屋) //build/ まとめ(サーバー編) C#ユーザー会 //build/ まとめ(サーバー編) from...
View ArticleピックアップRoslyn 1/24: null参照
今日はピックアップRoslynなのかC#小ネタ集なのか微妙なライン。 なんか、C# 7で導入される参照戻り値に関して、参照なのにnullを返せるというネタを思いついてしまったり。 ただのネタのつもりだったんですが、案外考えなきゃ行けない事案かもなぁという話。 経緯 参照戻り値で、「null参照」を返したいっていう要望が出ていたりします。 Please add new syntax keyword...
View ArticleピックアップRoslyn 1/25: Design Notes 数か月分
Mads (C# コンパイラーのPM)が、去年8月辺りからの C# Language Design Notes がまとめて投稿されました。 たぶん、C# 7の作業が一段落したのかな(最近のC#チームは、実装作業が落ち着くまでドキュメントの類が放置されがち)。 ちなみに内容的には、個別のトピック用のissueページが別にあって、そっちで一通り公開済み。...
View Article参照戻り値と参照ローカル変数
C# 7の説明、1つ足しました。参照戻り値がらみ。 参照戻り値と参照ローカル変数 追加される構文自体は割とシンプルなんですが、活用できそうな場面まで含めて説明しようとするとなかなか骨が折れる感じの機能。 機能自体の説明: 参照戻り値と参照ローカル変数 前提知識として、値型を使わないとパフォーマンス出しにくい場面があるという話: 値型の性能...
View Article