Java 7が最近リリースされたが、Java8の計画も現在進行中だ。Java7からJava8へ引き継がれた大きな計画のひとつはProject Lambdaだ。しかし、関心が集められなかったのでJava7で実装されずJava8へ引き継がれたのではない。lambda-dev上のメーリングリストや編集グループの活動は活発だ。
Project Lambdaには何年もかけてたくさんの変更が加えられてきた。InfoQはJavaにおけるラムダ:詳細な分析という記事で最初の提案を詳細に報じたが、これは現在は変更されてしまっている。しかし、最近のメールでBrian Goetz氏は、より関数的な特徴を目標としているこのプロジェクトの過去、そして現在の活動を概括した。
道具さえ揃えば、オブジェクト指向のプログラマは関数型プログラミングの技法(例えば不変性など)を受け入れて、オブジェクト指向の世界に取り入れる準備ができている。そしてその結果、エラーの少ない優れたコードが書かれる。この仮説を支持する証拠はたくさんあります。簡単に言えば、私たちがJava開発者にできる最良の貢献はより関数的なプログラミングスタイルへの移行を優しく促すことだと思っています。JavaをHaskellやScalaにしようとしているのではありません。でも目指す方向ははっきりしています。
ラムダはこの進化の過程から生まれた贈り物です。しかし、進化の最終地点からは遠く離れています。残りの進化の過程についてはまだ書けません。複数の選択肢を残しておくことが、私たち自身の決定を評価する上で重要なのです。
私がラムダはオブジェクトではないという考えに固執するのはこのためです。"ラムダは単なるオブジェクトである"という見解は魅力的で便利な考えですが、言語の進化のための様々な可能性を削いでしまうと思います。
(消去の)関数型が初期の提案からなくなったのは、現在のJavaの型の消去の仕組みがこの新しく導入しようとした関数型を不便にしてしまうからだ。
devoxxで提案されたたたき台では関数型がありました。私はこれをなくすべきだと主張して評判を落としました。しかし、私が関数型を拒否したのは嫌いだからではありません 。私は関数型を愛しています。しかし、関数型はJavaの既存の型システムが持つ消去の仕組みと相性が悪いのです。消去の関数型の相性は最悪です。なので設計から除去しました。
しかし、"Javaはこれからも関数型を持たない"というつもりはありません(本当に持たないかもしれませんが)。関数型を導入するには、まず消去の仕組みから考えなければならないと思います。
現時点では、ラムダは単一のアクセスメソッド型(例えばRunnable)を提供するように設計されているが、後の段階で他の関数型が追加することもできるようになっている。
JSR 335としても知られるProject LambdaはJava 8に含まれる予定だ。Javaは2012年末のリリースに向けて進行中だ。