BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Javaslang 3.0への道

Javaslang 3.0への道

ブックマーク

原文(投稿日:2016/11/12)へのリンク

Javaslangは、Java 8以降に対して永続データ型と関数型制御構造を提供するオープンソースの関数型ライブラリであるが、2017年3月に計画しているバージョン3.0へのロードマップを公開した。

Javaslang 3.0 roadmap

Javaslangはソフトウェア開発者Daniel Dietrich氏によって作成され、最初のリリースはJava 8の初期リリースと同時の2013年だった。これは、関数型のコレクションライブラリでJavaの標準コレクションを置き換えることを意図しJava 8のラムダを“関数型のパターンをベースにさまざまな新しい機能を作成する”ために利用する。

最近のjOOQ (Javaオブジェクト指向クエリAPI)でのインタビューにおいて、Dietrich氏はオブジェクト関数型プログラミングスタイルをJavaに追加するビジョンを解説した。

多くのユーザはJava 8にかなり失望したと思います。とくにすでにより進んだ言語に慣れ親しんだ人はそうです。Java言語アーキテクトは素晴らしい仕事をしました。Java 8はラムダや新しいStream API、CompletableFutureのような革新的な新しい機能を持ち込みました。しかし、新しい抽象化はAPIの観点から言語に不十分に統合されただけでした。

 

オブジェクト関数型プログラミングは何も新しくはありません。これはオブジェクト指向プログラミングと関数型プログラミングの両方の世界のもっともよいものです。ScalaはJVMでそれをするためのよい選択の1つです。Javaのラムダは実現可能な機能です。それによって私たちはScalaに類似するJavaslang APIを作ることができます。

Michael Feathers氏は、R7K Research & Conveyanceの創始者でディレクタであるが、一度次のことをツイートした。“OOは動的な部分をカプセル化することでコードを理解できるようにする。FPは動的な部分を最小化することでコードを理解できるようにする。”

以前のバージョン2.0のリリース

バージョン2.0はJava 8との互換性に焦点を当てた。1900以上のコミットとともに、重要な機能が含まれている。

  • 新しいインタフェース、FutureとPromise。並列プログラミングのためだ。
  • 新しいパターンマッチングAPI。
  • 新しいコレクション型。

Javaslang 2.0 library hierarchy

より最近のJavaslangのブログは近々出るバージョン2.1.0の追加APIメソッドのプレビューに加えて新しいパターンマッチングAPIの使い方をデモストレーションした。

Javaslang pattern-matching example

Javaslang 2.1.0 examples

2017年3月にバージョン3.0のリリース

バージョン3の変更点が計画されている間に、開発コミュニティは進んでJavaslangのGitterでの議論に参加し、提案コントリビュートの正式なリストを精査した。

Dietrich氏はバージョン3.0への道についてInfoQに話した。

InfoQ「jOOλStreamExCyclopsのような他の関数ライブラリとJavaslangは何が違いますか?

Dietrich氏「JavaslangはScalaの長所をJava言語にできる限り導入することを目的としています。これは*Javaslang*の特有のセールスポイントです。すでに解決された問題に対して車輪の再発明をし、新しいコンセプトを作る理由はありません。私たちはScalaに同調することから利益を得ています。それは以下の理由があります。」

  • Scalaの背後にあるいくつかの基本的なアイデアは、Javaslangでもまた有効です。たとえば類似する永続的なコレクション階層です。
  • 学習曲線が滑らかです。Javaslangの利用はすでにScalaに慣れ親しんだ私たちのような人々にとって簡単であるべきです。Javaslangでも有効なScalaのドキュメントがたくさんあります。とくに、コレクションライブラリで共通の問題を解決する方法についてのものがたくさんあります(たとえばスタックオーバーフロー)。
  • JavaslangはプレーンなJava 8より表現豊かで簡潔です。またJava 8のストリームより早いかもしれません(次のベクターのベンチマークを見てください。 https://github.com/javaslang/javaslang/pull/1557)。

 

jOOλとStreamExはユーティリティ関数を含んでいます。それらはJava 8のストリームをより簡単に使えるようにするためにうまく動作します。しかしユーザはまだ必要のない、ノイズがあるコードを書かなければなりません。コードの行をより多くすることはよりエラーを多くすることにつながります。

 

Cyclopsは分散プログラムのためのニッチなライブラリです。しかしRxJavaやAkkaほどポピュラーではありません。少し関数じみた機能のための遊び場のように見えます。trampolineでのスタックなしの再帰やモナド型をliftすることのような感じです。これらはJavaでは実践的ではありません。私は意図的にJavaslangのコアにこれらの機能を含めていません。

InfoQ「Java 9の遅れは、今2017年7月が予定されていますが、3月のJavaslang 3.0のリリース計画に影響しますか?」

Dietrich氏「JavaslangはJava 8への後方互換性を保ったままとなるでしょう。Javaslangに影響があるであろう新しいJavaの機能は Java 10で出荷されるでしょう。そのため私には現在Java 9の遅れがJavaslang 3.0のリリース日に影響する理由は見当たりません。しかしながら、すでにロードマップの変更があります。」

InfoQ「Javaslang 2.1.0のリリースとJavaslang 3.0のロードマップにおいて共有したい変更はありますか?」

Dietrich氏「新しいJavaslang機能の開発とテストはまだ時間がかかる見込みです。私たちはJavaslang 2.1.0のパブリックベータバージョンを今年の終わりに使えるようにします。Javaslang 3.0の作業は不一致の損失を減らすためにJavaslang 2.1.0のリリース後に始めるでしょう。3.0の遅れを補うために、2.1.0に元々後のリリースを目標としていたいくつかの機能を含める予定です。機能の完全なリストは私たちのプロジェクトサイトhttps://github.com/javaslang/javaslangで見ることができます。」

 

Javaslang 2.0.xはすでに十分成熟しています。そのため2.1.0を正確にするために時間を取るでしょう。私は現在正確なリリース日を伝えることができません。しかしユーザがベータバージョンと利用できるようになればすぐにリリース候補をテストしてくれることを望んでいます。

 

Javaslang 3.0はJavaslang 2.xと後方互換性はなくなるでしょう。ユーザ観点から近々の2.1.0リリースはすでにJavaslangに依存している既存のコードベースについてより興味深いものとなります。3.0のリリースはJavalsangの未来となるでしょう。

リソース

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT