C# 7思い出話
C# によるプログラミング入門に、ちらほらとC# 7の話題を書き始めたわけですが。
まあ、入門なんで仕様として固まったものだけを書いていくつもりです。ある程度固まりそうな段階まで書かないし、結局予定から漏れたものは修正したり。
一方で、その仕様が固まるまでにあった流れなんかも、ブログに残しといてもいいかなぁとか思ったり。
ってことで、「C# 7思い出話」なんていうカテゴリー付けて、ブログでも書いてみようというのが今回の話。 さしあたって、今、入門に書いたのが、
の2つなので、今日はこの2つ。
2進数リテラルと数字区切り文字
こういう機能。
var million = 1_000_000;
var abcd = 0b1010_1011_1100_1101; // 特に2進数リテラルで有用
var abcd2 = 0xab_cd; // 16進数リテラルにも使える
var x = 1.123_456_789; // 浮動小数点数リテラルにも使える
2進数リテラルと数字区切り文字の2つはセットですね。 2進数って普通に書いたらむちゃくちゃ大きな桁数になりますし。 そりゃ、区切らないと読めた代物じゃない。
この2つの機能、「C# 7」としては「気が付いたらいつの間にか実装があった」って感じです。 特に「実装したよ」アナウンスもなく、pull-requestも見かけず。
そもそも、「C# 7の最初の設計ミーティング」でちょこっと「ページ内検索してみたら確かに書かれてる」程度の地味な取り上げられ方してただけ。機能的にも小さなものなので、提案ページもすごく簡素。
それも当然でして、この機能はC# 6の頃からあったから。 要するに、「C# 6の頃から試験的な実装あったけど、結局C# 6には入れなった」というもの。 仕様的に何か問題があったわけでもなくて、単純に「優先度低、スケジュール的に後回し」。 という話が、今稼働してるGitHubのリポジトリじゃなくて、昔懐かしCodePlex時代にありました。
まあ、こういう、低コスト・低リターン機能は後回しになりがち。
実装するのは低コストと言っても、仕様的に問題ないかをよく考えたり、実際試してみる期間を設けるのはそれなりに大変です。 CodePlex上で、以下のようなディスカッションがあった記憶があります。
- 区切り文字は
_
でいいの? -
1010 1100
みたいにスペースで区切らせてよ- それは字句解析的に面倒で、コストかかりすぎる
-
8進数リテラルも入れてよ
-
あっても使わないだろ、実際
- chmodで使うよ
- C言語の
0
始まりは紛らわしいし、octalだからって0o
(ゼロ、オー)も0とoが区別つきにくいし
-
あっても使わないだろ、実際
- そもそも、16進数リテラルの
0x
もなんなの、Xって。hexの3文字目って
簡単な機能であっても、なかなかめんどくさい感じの話に。