Java向けの非同期プログラミングAPI「RxJava 2.0.0」リリース

 リアクティブプログラミングReactiveXのRxJava開発チームは11月29日、Java仮想マシン向けライブラリの最新版「RxJava 2.0.0」を公開した。Reactive-Streamsをサポートし、性能も改善した。

 RxJavaはJava仮想マシン(JVM)向けのReactive Extensions(ReactiveX)実装。ReactiveXは、オブジェクトの状況を観察する「オブサーバーパターン」の考えを取り入れた非同期プログラミグ向けのAPI。JVM向けObservableシーケンスを利用して、非同期、イベントベースのプログラムを構築できる。軽量でJava 6以上をサポート、Groovy、Clojure、JRuby、Kotlin、ScalaなどのJVM言語を利用できる。

 RxJava 2.0は、2015年4月に公開された1.0に継ぐメジャーリリースとなる。

 スクラッチから書きなおすことで性能を強化した。オーバーヘッドが少なくなり機能も増えたほか、Reactive-Streams仕様をベースとすることでReactive-Streamエコシステムとの相互運用性も改善するという。一方でReactive-Streamsではアーキテクチャが異なることから、一部のRxJavaタイプは変更が必要とのこと。

 null値が利用できなくなり、Observable<Void>は通常(例外付き)終了し値をはき出すことはない。これに伴い、いくつかの変更が必要となる。

 正式版になる前に導入したバックプレッシャーに関連した問題を解決するため、io.reactivex.Observableを非バックプレッシャーにし、バックプレッシャーが有効な新しいクラスio.reactivex.Flowableを用意した。

 Singleリアクティブベース型は再設計され、Reactive-Streamsのデザインを汲むものとなった。土台のリアクティブタイプとしてSingleとCompletableを合体させたようなMaybeが導入されており、エミッションパターンを取得する手段としている。MaybeクラスはインターフェイスタイプのMaybeSourceのほか、単一の受信インターフェイス、プロトコルなども含む。

 このほか、多数の機能強化が図られ安定性も強化した。

 RxJava 2.0はプロジェクトのWebサイトより入手できる。プロジェクトでは、RxJava 1系と2系を共に使いたいというユーザー向けにMavenコーディネート(io.reactivex.rxjava2:rxjava:2.x.y)も用意する。

ReactiveX
http://reactivex.io/