今月、GridGain のCEO Nikita Ivanov 氏が、San Franciscoの JavaOneで関数プログラミングについて講演する。リリース 3.0で、APIを再設計して、GridGainは、更に関数型らしくなってきた。InfoQは、Ivanov氏に関数プログラミングに関する 会社の経験について、より詳しく聞いた。
Ivanov氏は、2,3年前に、 リリース3.0のロードマップを作成している時に、閃いた話から始めた。彼らは、「DSLの線に沿って、ずっと単純化された使用モデルを提供しなければならない、という気持ちが大きくなって」、計画を始めた。Javaでは、「単純化しようとしたが、壁にぶち当たった」と感じた。そこで、 Scala DSLを作ることにした。作り終わったときに、同じコードをJavaのコードと比べて「驚いた」。
左側がScalaのコードで、非常に関数的で、簡潔で、実利的でした。右側がJavaによるコードで、膨れ上がっていて、3から5倍の長さになりました。我々は、最初、Javaで45ないし50行のコードが、構文的なトリックなしに、どうやってScalaで2行になるのかを調べました。
Scalaに触発されて、純粋のJavaであり続けながら、できる限りネイティブな関数型の感じにする、という目標を掲げて、GridGainは、 GridGain APIを再設計した。 GridGainは、Javaには,いくつかの基本的な関数型の要素を欠いているため、単にScalaからコードをポートできないことがわかった:
完全に新しいフレームワークを作らなければならないのです。クロージャやpredicate interfaceから始める必要があります。非常に包括的なライブラリの包括的なリストに取り組まなければなりません:カリー化、そして分散のカリー化;反復そして、分散した反復;などなどです。
そのようにして、 GridGainは、製品に、抜け落ちている関数型要素を作りこんだ。 Ivanov氏が、強調したのは、彼らのAPIは、別の言語ではなく、依然Java なことである。彼は、その結果を次のように言った
...技術的には、次の関数型言語の感じが、非常にします。その理由は、我々が賢いから、とかそういうことではないのです。この2,3年に開発された既存のフレームワークを調べることができ、そして、いい所を取り出して、ネイティブにそれらを統合したのです。これら関数型要素のすべては、付け足しではないのです。
完全な関数型のユースケースは何かを尋ねた時、Ivanov氏は、純粋な関数型とか純粋なオブジェクト指向のユースケースは、無い、と答えた。Scalaが両方必要なことを最も良く示している、とも言った。
継承、隠蔽を持ったクラス、そしてこれら大きなものがいっしょになったパッケージを論じたり、考えたりするような高レベルにおいては、オブジェクト指向は、優れています。 Clojure やHaskell が何を言おうが、純粋な関数型言語で、パッケージ、クラス、継承やそのような性質のことについて、考えられることは、非常に限られています。
対照的に、彼は、関数指向が優れていることを話した
...コード レベル、アルゴリズムやメソッドを実装するレベルになると... Javaにおいて、オブジェクト指向は、基本的に足手まといですね。余りに重いんです。これらは、私の考えではなく、今では、皆の共通認識です。
我々は、Java と関数型言語の将来について尋ねると、Ivanov氏は、こう結んだ:
Java 7が2012年11月まで延びました。これは、ほとんど3年先です。これから、2年か3年あるいは、5年か10年でも、Javaは、絶対に必要な言語でしょう、しかしJava自身、言語としては、自身のシンタックスからは、いかなる助けもない、という心配はあります。もし、Java に決めなかったら、今日、Scala以外、他に何もありません。しかし、多くの他の組織にとって、たくさんの理由で、Scalaは、回答ではありません。これから先、何年も、Java は、エンタープライズで重要な言語でしょう。多くの開発者と膨大な量のソフトウェアがあります。
Nikita Ivanov氏からもっと聞きたいと思っているJavaOneの参加者は、23日木曜日の2時から彼の講演を聞くことができる。