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

http://ufcpp.net/

C# Design Notes / テーマ

with 2 comments

一昨日(C# Design Notes / デザイン プロセスについて)に引き続いて。C# 7がらみの話の続き。 一昨日はどういうプロセスでC#の仕様が決まっていくかという部分について説明(というか、全文和訳)しました。 今日は、C# 7(に向けた、6リリース後)のC#のテーマについて。C# Design Meeting Notes の 2. のところに書かれている内容の概要になります。

背景

C# 7どころか、C# 6もまだリリース前なわけですが。昨年末にC# 6の仕様はfixしてリリース準備に入ったとはいえ、7はだいぶ先の話です。これまでの周期から考えると1・2年先になるのかなぁ。

つまり、だいぶ早い時期からオープンなディスカッションをしようとしている。今ならアイディア出し放題、C#チームの出してくる案にもコメント付け放題。(こういう場、特に英語ですし、苦手な方でも、いずれ、UserVoice等での投票があるはずなので、その際だけでも是非。) こういう好き放題できる状況で、アイディアが散逸してしまわないよう、C# 7のテーマが提示されています。

もちろん、「それ以外は絶対にやらない」というものではないんですが、同じ方向に向かって進んでいけるよう長期的なゴールを設定しています。

テーマ

そのテーマですが、今、大まかに提示されているのは以下のようなもの。

  • Working with data
  • Performance and reliability (and interop)
  • Componentization
  • Distribution
  • Metaprogramming
  • Null

Working with data

OOPの「振る舞い中心」(behavior-centric)なモデリング手法も多くのよいことがあるけども、関数型な「データ中心」(data-centric) な手法も(C# 3.0の頃からやってはいますが)推し進めていきたいという内容。

このテーマの元、さらに細かく分けていくと、以下のようなことを考えているそうです。

  • pattern matching
  • tuples
  • “denotable” anonymous types
  • “records” – compact ways of describing shapes
  • working with common data structures (List/Dictionary)
  • extension members
  • slicing
  • immutability
  • structural typing/shapes?

Performance and reliability (and interop)

(Javaと違って)値型とか具体化した(reified)ジェネリックとか、実行性能面に関する考慮はあるものの、まだまだ性能を伸ばす余地がある。

一方で、(C++と違って)メモリ管理が安全ではあるものの、決定論的挙動がしにくかったり、信頼性に関する余地もまだある。

ということで、その余地を埋めるように、より性能面・信頼性を求めていきたいとのこと。

Componentization

「 言語の」というか.NETのランタイムやVSなどのツール寄りの話ですが、コンポーネント化も重要な課題です。要は、一枚岩なでかいシステムだと世の中の急速な進歩について行きづらいので、どうにかしてモジュラーな機能提供ができるよう、要因を分解して組み合わせて(factored and combined) プログラムを作れるようにしていくというのが重要な課題です。

このテーマの元には以下のような機能が考えられています。

  • generating reference assemblies
  • static linking instead of IL merge
  • determinism
  • NuGet support
  • versioning and adaptive light-up

Distribution

ここでいうDistributionは、いわゆる分散コンピューティングのことです。C# 5で async/await が入りましたが、まだいくつか取り組まないと行けない課題は残っています。

  • async/await は単一の値を非同期に受け取るのには非常に強力な機能ですが、シーケンス データを受け取るのには適していません。
  • シリアル化に関しても、immutable なデータへの対応や、コストの高いリフレクションを必要としないようなものを、カスタマイズ可能な形で提供することが求められている

Metaprogramming

Roslynが出立ての頃からずっと期待をかけられていることの際たるものはメタプログラミングでしょう。Roslyn(というライブラリ)自体はそれを狙って作られたものですが、C#という言語レベルではメタプログラミングをうまく取り扱えるような機能がまだまだ不足しています。

RoslynはVisual Studioの裏で、リアルタイムに常時動いていて、キータイプしたそばからコードを解析して警告を出したり、訂正機能を提供したりします。これを活用してメタプログラミングができるのなら、(よくあるビルド時コード生成や、リフレクションでの動的なメタプログラミングと違って)リアルタイムにコード生成して、生成結果の解析・警告・訂正ができるようになるはずです。

ですが、まあ、コード生成にはいろいろな面倒事があります。そういう面倒を減らせるような機能が求められます。例えば以下のようなものが挙がっています。

  • Virtual extension methods/default interface implementations
  • Improvements to generic constraints, e.g.: ◦generic constructor constraints
    • delegate and enum constraints
    • operators or object shapes as constraints (or interfaces), e.g. similar to C++ concepts
  • mixins or traits
  • delegation

Null

「非null型を早く!」といわれ続けて久しいわけですが。ただ、昔からさんざん、その難しさも言われています(参考: Eric Lippertによる解説)。

それでも、もっと野心少ない妥協的なアプローチでもいいので、非null型は必要な機能でしょう。

その他

これらのテーマにかからないようなものもいくつか挙げられています。

  • Type Provider
  • Better better betterness
  • Scripting
  • params IEnumerable
  • Binary literals and digit separators

最後に

というようなものが、C# 7が向かおうとしている方向性です。

それぞれの詳細についてはおいおいこのブログで、1つずつ書いていくかも。一気に情報出されるとほんと大変。

ちなみに、このDesign Notes自体はCloseされました。この Issue 中で出た意見は今後のデザイン ミーティングに反映されていくでしょう。そして、機能ごとに「提案」 Issue ができていくことになります。 とりあえず、今すでにある(要するに、今回のDesign Notes中ですでに書かれているような)「提案」の Issue ページができました:

あと、C# のデザイン ミーティングとは別に、Interactive (要するにREPLとかスクリプティング)のミーティングのデザイン ノートも公開されたみたいです。

広告

Written by ufcpp

2015年1月31日 @ 00:47

カテゴリー: C#

Tagged with

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

Subscribe to comments with RSS.

  1. […] 「C# Design Notes / テーマ」で「どういうことがしたいか」だけ列挙されているものの、具体的にどういう仕様を追加するかまではまったく決まっていないものがまだまだ結構あります。そんな具体案の見えていないものに対して、いくつか、issue ページができて、オープンなディスカッションを始めたようです。 […]

  2. […] C# Design Notes / テーマ […]


コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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