個人事業主になったので真面目にアウトプットしてみるブログ

フリーで顧客の会社に潜り込んでAndroidアプリつくって、とりあえず食っていけるようにアウトプットを増やしていくブログです。

FRPとReactive Extensions

FRPとReactive Extensions

Rx(Reactive Extensions)はFRPではないとい批判を聞く事がありますし、オライリーから出ているRxJavaの書籍(英語版)の説明にも似たようなことが書かれています。

参考:「Reactive Programming with RxJava: Creating Asynchronous, Event-Based Applications」

しかし一方で広義ではそれらもFRPを実現するためのスタイルの一つとして認める話もあります。FPR界隈からみるとRxは厳密性には欠けるが、FRPからインスパイアされたものであるという表現が正しいという見方もあるようです。

さらに、FPRを実現するための実装に3流派(First-order FRP, Asynchronous data flow, Arrowized FRP)くらいあって、そのうちの一つのAsynchronous data flow(非同期処理を扱うデータフロー)の実装の一つであるとみなす考えもあるようです。つまりRxはFRPとして部分的に要件を満たす実装で、強くFRPの影響を受けていると言う類のものなのでしょう。 Rx系のライブライが何故ダメかって言う話の一端でいうなら表示的意味論という視点でのことのようです。簡単にいうと1+1が2になってないケースがあると言う話です。下の参考書籍である「関数型リアクティブプログラミング」に書いてあるので興味があれば読んでみてください。

参考:「Clojure Reactive Programming」

参考:「関数型リアクティブプログラミング」

このように客観的に情報を集めるとRxJavaには、通信用の非同期ライブラリとして親しまれていた反面、FRPというパラダイムを実現するための実装として利用されおり、さらに言うと最近ではKotlin Coroutinesの登場により前者の役割を終えつつあると言えると言うことなのでしょうか。