Insider's Eye

C#への期待。アンダースからの返答

デジタルアドバンテージ 一色 政彦
2006/02/15

Page1 Page2 Page3

C#自体や将来に対する疑問、他言語に対する意見

■今後C#は、関数型言語(=ラムダ計算モデルを理論的な基盤とした言語)に特化していくことになるのか?

動的プログラミング言語へと発展するC# 3.0とVB 9.0

 答えは「はい」だ。C# 3.0やLINQプロジェクトで導入された機能(例えば「ラムダ式」など)というのは、HaskellやML(Meta-Language)などの関数型言語に触発されたものだ。

 実際、これらの機能は開発をもっと自由な形にする。設計しているだけでワクワクするような機能だ。C# 3.0というのは、オブジェクト指向言語と関数型言語のハッピーな結婚といってよいものになるだろう。

■アスペクト指向プログラミング機能(=オブジェクトに対して後付けで機能を挿入する仕組み。以降、AOP)を提供する予定はあるか?

 AOPについては、個人的には懐疑的に思っている。確かにデバッギングやモニタリング、パフォーマンス測定などではAOPは役立つだろう。しかし大企業が使うような十分に統制のとれてなければならない大規模アプリケーションを実装するような場面ではAOPは少し心配なところがある。

 例えば現実問題として、わたしの書いたコードに対して誰でも部分的にコードをインジェクト(=注入)できるようになるわけだが、そうするとわたし自身が行ったコーディングに対する正当性は全体として保たれなくなったり、いろいろな派生形が出てくるとどれが正しくてどれが正しくないのかを知るよしがなくなったり、きちんと安定したコーディングなされていることを保証するすべがなくなったりと、いろいろな問題・副作用がある。

 AOPが使われているケースはいろいろあるが、それらをよく見てみると、実際にはC#がすでに持っているシンプルな言語メカニズムによってそれらを代用できるケースが多い。例えば、属性(Attribute)を使ったり、C# 2.0から導入されている部分クラス(Partial Class)を使ったりすることによってAOPの実装を代用できることがあるのだ。このように同じことがシンプルに実現でき、さらにわたしが心配するAOPの副作用を受けないのならば、AOPは使わない方がよいだろう。

 結論をいうと、「AOPについては少し様子を見よう」というふうに考えている。

■C# 3.0では、型推論によって読むのが難しいコードになってしまうのではないか?

 型推論は一般的に良いものだと考えているが、型推論があまりに多すぎるような場合は、確かに読みづらいコードになってしまう可能性はあるかもしれない。コードを読んでいるときに明確に型が分かるということがメリットになることはある(しかし逆にしつこく感じることもあるだろう)。

 例えば、次のようなコードを書いた場合、変数qの型は型推論によって決定される。

var q =
    from c in cusutomers
    select c.Name
型推論が実行されるコード例
変数qはvarキーワードにより型を明示的に宣言していないが、その型は右辺値より推論される。

 この場合、変数qの実際の型は「IEnumerable<string>」となる。

 このような型が明示的でなく分かりにくいというマイナス面を克服するために、次のようなVisual StudioのIDEを強化するアイデアを検討しているところだ。

  1. 「var」の上にマウス・カーソルを乗せるとツールチップで実際の型の情報が表示される機能

  2. 「var」を右クリックして表示されるコンテキスト・メニューから[リファクタ]−[実際の型の挿入]を選択することで、varを実際の型に置き換える機能

■C# 3.0の型推論の実行コストはどの程度か?

 コストはゼロだと考えられる。というのも結局、これはコンパイラが型を推論できればよいわけで、コンパイル時の問題だからだ。またコンパイル自体も瞬間的なことで大したコストにはならない。

■VBのMyクラスについてどう思うか? C#での採用の可能性は?

 C#にMyクラスを実装する予定はないが、C#からVBのMyクラスを呼び出すことは可能だ。もちろんそういった要望があれば対応を検討するが、現在そのような要望はまったくあがっていない(セッション参加者からも要望はゼロだった)。

■Java言語の進化(例:Annotationなど)についてどのように考えているか?

 アノテーション(Annotation)に関しては、.NETの属性(Attribute)のJavaバージョンといえると思うが、このように.NETで実装してきていることを、やはりJavaでも行ってきているという印象だ。実際にJavaの最新バージョン5.0に搭載された新機能の中で、(先ほどのアノテーションも含めて).NETに触発されて導入されたと思われるものがいくつもある。

 SunはJava VMには基本的に手を入れないという方向性を見せているが、逆にそれが(特にジェネリックの実装などでは)足かせとなっているように感じられる。わたしがJavaに対して感じることは、大体そのようなことである。

 いくつかの質疑応答については割愛したが、以上がセッションのひととおとりの内容である。End of Article

 

 INDEX
  Insider's Eye
  C#への期待。アンダースからの返答
    1. アンダース氏が明かすC#言語設計の秘話
    2. C#に対する開発者からの要望
  3. C#自体やその将来に対する疑問、他言語に対する意見
 
 Insider's Eye


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間