++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

ピックアップ Roslyn 3/7

with 2 comments

構造体の引数なしコンストラクター

今週は大変残念なお知らせが…

1つ目。構造体の引数なしコンストラクターの導入、やっぱり見送り(今のCTPだと実装されているけども、次のCTPで元に戻す)になるみたい。

構造体Tに対して、new T() が default(T) と同じ(0 初期化)になるという前提の最適化がすでにあちこちにあって、.NETのフレームワーク/ランタイムのレベルでもこの前提になっちゃってるところがあるみたい。で、new T() でコンストラクターが呼ばれないバグが、ランタイム レベルであって、今、C#に構造体の引数なしコンストラクターを導入するのは無理くさい。

個人的には、C# 6.0 に入って(入ることになってて)ありがたかった機能の結構上位にあったので残念。というか、一応名前が「RC (リリース候補)」になった矢先にですか…

今週のProposals

なんか今週は、「実現性薄そうだけどとりあえず議論しようか」感が漂っていたり。新しい提案 issue ページが結構な数「C# 7 and VB 15」マイルストーンに登録されていました。

enum のメンバーを、E.A | E.B みたいに書くんじゃなくて、型名を省略して A | B 的に書かせてくれという話。

実は、C# 6.0 の時点ですでに、using static を使って近いことはできるようになっています。

その上で、もう1歩踏み込みたい?という話。型の推論は効いてほしいかどうか。例えば、以下のコードをコンパイルできるようにしたいか。

2つ目。C# の仕様的に、ジェネリックな属性クラスを作らせてほしいという話。

流れ的には、「メリット薄くない?」「実装手間考えるとあんまりやりたくない」的空気。

3つ目。静的メソッドも「拡張」できるようにしてほしいという話。

やりたいけど具体的な文法案はまだ固まっていない状態なので、このページのコメントでいろんな文法案が出てきています。

とはいえ、「インスタンスメソッド以外、プロパティとかも含めた拡張」という、もっと広いプランが C# 7.0 の当初から出ているので、おそらくはそっちに統合されるのではないかと。

this 相手に拡張メソッドを呼びたいとき、this.Method() って書くの面倒だし、インスタンス メソッドとの一貫性に書けるから this の省略を認めてほしいという話。こいつはページのコメント、いまいち盛り上がりに欠けてたり。

「クラス自身に対して拡張メソッド呼ぶの要る?自身に対してだったら普通のインスタンス メソッドを足せよ」という話があって、これができないわけですが。interface を明示的実装して、その interface の拡張メソッドを呼びたいということはまれにあるんですよね。ただ、稀にしかないことのためにコンパイラーの複雑化(拡張メソッドを探すのもそれなりのコスト)を招きたいかといわれると。

クラスとのフィールドとかに var を使わせてという話。

これが今まで認められていない理由は2つあります:

  1. (ポリシーとして) メンバーの型はドキュメントとして扱われるもので、省略すべきではない
  2. (実装上の問題として) 循環依存で死ぬ

循環依存は例えば以下のような感じ。

この問題を超えるメリットはないかなぁ…

あと、脱線で、const var を認めてほしい的な話も。const var って、constant (不変)で variable(可変)?variable が数学用語としての variable から来ているにしても、字面やばい。

ほぼ同機能を実装することになっているものの、C# に対してディスカッションが非常に少ない VB ですが。その VB で、AddressOf を省略させてという話。

Unicode Version Change in C# 6.0

こないだ、ufcpp.net 本体に「[雑記] C# ソースコードと Unicode」とか書いてたわけですけども。1か所、C# 6.0で破壊的変更になっちゃうもの(中黒「・」が識別子に使えなくなった)の話も書きました。

まあ、「Unicode の変更だ」といわれるとしょうがなく。Java 7 でも同様の問題出てて、しょうがないよね的な空気になっていたり。

なんですが、それはそれで、ドキュメント化は要るんじゃないかな、というか、今、Roslyn プロジェクト内で破壊的変更のドキュメント化作業もやってたよね。と、ふと思い立って、報告してみることに。そしたらその日のうちにドキュメントできてた。

最初にこの話題で盛り上がってたのはグラニの人ら(Build Insider の記事の下の方にその話題あり)なんですけども。今度会うとき言ってみとこう。

広告

Written by ufcpp

2015年3月7日 @ 18:05

カテゴリー: 未分類

コメント / トラックバック2件

Subscribe to comments with RSS.

  1. 中点はUnicodeの定義がPcからPoに変わったという話ですよね。
    http://www.unicode.org/reports/tr44/#General_Category_Values

    で、なるほどーと思ってUnicodeDataを見てみたら、変わったタイミングは4.1のときっぽいです。
    「Unicode 5.1以前」ではなさそう・・・。

    http://www.unicode.org/Public/4.0-Update1/UnicodeData-4.0.1.txt

    30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;

    http://www.unicode.org/Public/4.1.0/ucd/UnicodeData.txt

    30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;

    http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt

    30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;

    ynoami (@ynoami)

    2015年3月9日 at 15:25

    • 詳細ありがとうございます。
      まあ、Roslynくらい大々的にコンパイラー置き換えるタイミングでしかUnicodeのバージョンって変えないんでしょうねぇ。

      ufcpp

      2015年3月12日 at 23:40


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。