BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース クロージャとJavaらしさの維持

クロージャとJavaらしさの維持

ブックマーク

ここ数年の間、Java SE 7の一部として、あるいは今後いつか、詳細不明のリリースで、Java言語にクロージャ(source)を追加することについて、多岐にわたる議論が行われてきた。いくつか の提案(BGGA, CICE, FCM)や、コンセンサス(source)に関する話があった。有効な提案の見方のひとつは、言語としてのJavaに与える影響「Java らしさ」を保ったままで基本的な部分の変更が可能かどうか、を良く考えることである。Javapolisでは、Joshua Bloch氏がこの議論に関する考え(source)と、彼がCICEがより適したアプローチであると考える理由を述べた。

Javaらしさについて説明しながら、Joshua Bloch氏は1997年6月に発表されたIEEE ComputerのGosling氏の論文を引用した。

Javaはブルー・カラーの言語です。博士論文の材料ではなく仕事のための言語なのです。Javaはたくさんのいろいろなプログラマにとても馴染んでいるように思われますが、それは私達が十分に試行されたものを好むからです。

彼は「現時点での評価」を尋ね、「それほど良くない」と答えた。427ページのFAQと何人かのユーザを引用し、彼はJavaのジェネリクスを、急増した 一連の機能間の相互作用のためにJavaらしさを維持し損ねた変更として引き合いに出した。そして、もしJavaらしさを維持すべきであるならばと次のよ うに結論付けた。

  • もう一つのワイルドカードを持つ余裕はない
  • さらなる言語の拡張は注意深く着手されなければならない
  • 概念的な面については最小限の拡張とする
  • 高いパワーウェイトレシオ

Java にクロージャを追加する理由を手短に概説し、Joshua Bloch氏はBGGAが提案しているクロージャの機能のうち、意見の分かれるいくつかの機能に関する議論に入った。議論の対象は、関数型(読みにくい、 "エキゾチック"なプログラミング・スタイルを助長、予期せぬ相互作用)、局所的ではないreturn、break、continue(ややこしい、潜在 バグ、意味の変更)、finalではない局所変数への無制限のアクセス(ややこしい、性能への影響)そしてライブラリで定義されたコントロールが設計目標 として構成すること(専用の構成によるリッチさの低下、潜在的な遅さ、複雑さの追加)である。

彼が提案するConcise Instance Creation Expressions (CICE)についても、重要な点を概説した。

  • 匿名クラスのインスタンス生成の簡潔なシンタックス
  • 自動リソース管理のための専用の構成

彼はJavaプラットフォーム上での言語の変化へのもっと広範囲のアプローチを知りたい人のために、代わりとなる解を提案した。

留意しておきたいことは、既にJVM向けのすばらしいプログラミング言語があって両者を提供しており、さらにJavaの相互運用性も備えていることです。それはScalaです。

最後に、今後の2つの方法を説明した。

  • プロトタイプでもっと経験を積む
    • 情報を得た上で合意し、焦点を絞ったJSRを開始
    • 2~3年かかるかもしれない
    • ジェネリックによる前例
  • 近い将来に、広く焦点を当てたJSRを開始

    • クロージャの領域でのあらゆる点を許可が必須
    • 最初のタスクは2つの大きな問題に答えること
  • 私達は大きな決断をしなければならない!
  • Javaのプラットフォームの未来に非常に大きな影響があるだろう
  • 時間をかけて正しいことをなさなければならない
  • 「Javaらしさ」にさらなるダメージを与える危険を冒してはならない
  • Javapolis(source)の調査結果は賛否両論であった。30人の参加者はCICEに賛成し、BGGA/FCM+JCAは24人の賛成を得た。そして、19人が変更しないことを選 んだ。非常にたくさんの意見が交換されたJavalobbyのスレッド(source)では、反応は速く二極化していた。きちんと比較をするにはJoshua Bloch氏はバイアスがかかりすぎていると感じている人達もいた。そうではなく、これらの機能を望む場合は、Scalaを使うべきであるという意見を支 持する人達もいた。BGGAはあまりにJavaを複雑にしすぎる機能であると考える人たちもいたし、その複雑さはまれなものであり、日常のケースからそら すべきではないと思う人たちもいた。Carsten Saager氏はCICEを好んでいる(source)。Stephen Colbourne氏は依然として自身が提案したFCMが気に入っている(source)

    Neal Gafter氏の答え(source)は短く要領を得ていた。彼はBGGAのシンタックスは、たいていのシナリオでは、よりシンプルなコードを生み出すだろうと主張した。 そして、Doug Lea氏のfork-joinのフレームワークを例として使用して、別のサイトで提示したこの問題に対する彼の解決策を読むように言った(source)。Bharath 氏のブログの内容(source)は、コメントのスレッドでの一般的な評価の詳細に渡っており、この種の議論は注意深く進めなければならないこと、そのコンセンサスを理解 することなくJavaを大きく変更しようとしてはならないことを示している。Tim Bray氏(source)とMichael Kolling氏(source)は、Javaへのクロージャ追加に反対する陣営へと考えを変えた。Tim Bray氏曰く、

    私の主張はシンプルです。Javaは極めて有効に機能していますが、それは80対20の法則にあたっているからです。私の考えでは、今までで最もわかりや すい80対20の技術の勝利一つです。次の20%を埋めようという試みは、たいてい害の無いものでした。ジェネリクスまでは。ジェネリクスは大失敗でし た。 Javaの習得や理解は難しくなりましたが、それを避けることはできないのです。

    これだけははっきり言える。我々は、Javaのクロージャの議論を終結させるには至っていない。

    原文はこちらです:http://www.infoq.com/news/2007/12/closures-preserving-feel-of-java

    この記事に星をつける

    おすすめ度
    スタイル

    BT