Reactive Manifestoではないほうの本当のReactive Programming?

タイトルにわざとReactive Manifestoを入れたのは、まずこちらのtogetterご覧ください

pokarimさんのReactive Manifestoに関する印象


あと、タイトルの最後に、はてなマーク入れたのは、自分がReactive Programmingに詳しくなく、色々自信ないからです。
間違いあったらツッコミください


さて、Reactive Programmingとはそもそもなんなのか?厳密に定義できるのか?は、詳細に議論できるほどの知識を持ち合わせていないので逃げます(おい

まずは、話のとっかかりとして、上記のtogetterの主役となってるpokarimさんの過去の記事(4年近く前!) を結構長めに引用してみます。(はてぶが600以上ついてる・・・)


なぜリアクティブプログラミングは重要か。

まず次のような定義を行います。

a = 1

b = a * 3

そしてaに2を代入してみます。

a = 2

そしてbを出力してみましょう。

通常の命令型言語であれば、この結果は、

b -> 3

となります。

しかし、リアクティブプログラミングでは、

b -> 6

となります。

b = a * 3

の意味が、命令型プログラミングとリアクティブプログラミングでは異なるわけです。

命令型プログラミングでは、そのときのaの値である1を用いて、

b = a * 3

b = 1 * 3

b = 3

という意味だと解釈され、bは3に束縛されます。

そのあとaの値が書き換えられても、bは変わらず3のままです。

一方、リアクティブプログラミングでは、

b = a * 3

は、

「bは、常にaの3倍である」

という意味になります。

時間がたち、aの値が変化しても、

b = a * 3

という関係は変わりません。


さて、そして以下の動画です

https://www.youtube.com/watch?v=YF5-f5H19AY

finagleをつくった人で、twitter社でもScala界隈でも超有名人な、Marius Eriksenさんの http://www.scalabythebay.org/ という、2014年8月の8, 9日に開催されたカンファレンスでの動画です。

45分くらいで結構長めの動画です。そして、それの31分34秒 のスクリーンショット(スライドが見つからなかったので。まだ未公開?)
com.twitter.util.Varというクラスの紹介です。*1

https://github.com/twitter/util/blob/ade642eb1d05edd20a5dd8b9c0f87a958c19b4ce/util-core/src/main/scala/com/twitter/util/Var.scala




ん!!!!????これってReactive Programmingでは?少なくとも、pokarimさんのブログ記事で最初に説明している例とは、完全に一致してますね。
以下、pokarimさんのブログの例を、実際にcom.twitter.util.Varを使って書いてみたもの


com.twitter.util.Varがいつから存在するのか?が気になり、githubで履歴をたどったところ、少なくとも2013/08/29まではたどれました

https://github.com/twitter/util/commit/3573e670523ac17c2e523

これが本当に最初のコミットなのか、finagleかなにかのほかのプロジェクトからutil-coreに移したのか?は、よくわかりませんでした。


以下、適当にググって見つかった断片的な情報を列挙



で、「Varっていうの発見したよ!?これReactive Programmingのあれそのものでは!?」という報告が主目的で、何度も言いますが、自分はReactive Programming詳しくないのでひとまずこれ以上語りませんというか語れません。だれか教えてください。


そして、上記に貼ったMariusさんの動画、FutureやVarを始め、Twitterのutil-coreの重要なclassや、Finagleのコアの概念やclassを説明していてとてもおもしろいので、みんな見るといいと思います

*1:別のカンファレンスですが、こっちにもVarの説明ありました http://www.infoq.com/presentations/twitter-scala ログインするとスライドダウンロードできるらしい?