SlideShare a Scribd company logo
The History of Reactive ExtensionsHow extended Rx across languages 
2014/10/28 RxJava Night #rxjnight 
Yoshifumi Kawai -@neuecc
SelfIntroduction 
@仕事 
株式会社グラニ取締役CTO 
神獄のヴァルハラゲート, モンスターハンターロアオブカード 
最先端C#によるハイパフォーマンスWebアプリケーション 
@個人活動 
Microsoft MVP for Visual C# / 野良C#エヴァンジェリスト 
Web http://neue.cc/ 
Twitter @neuecc
linq.js –LINQ for JavaScript 
そろそろメンテし てあげたい。。。
LINQ to BigQuery 
最近はBigQueryにはまってLINQライブラリ作りなど 
LINQ to BigQuery -C#による型付きDSLと 
LINQPadによるDumpと可視化 
http://neue.cc/2014/09/24_479.html 
https://github.com/neuecc/LINQ-to-BigQuery
Rx and Me
私とRx 
一番古い記事が 2009/09/04 
http://neue.cc/category/programming/rx 
Rx関連の記事が現在70 (思ってたより多かった!)
入門連載 
連載は2回で止まってる。連 載逃げたとかかんとか…… 
2011/11/01で内容的には些か古い (基本原理とかは変わってないの で必ずしも使えない記事というほ どではないですが) 
http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_01.html 
>また、今回のお礼を個別にささやかではありますがお食事というかたちでさせていただければと思うのですが、いかがでしょうか。
UniRx 
https://github.com/neuecc/UniRx 
Unity用のReactive Extensions実装 
(.NET用のRxはUnityで動かないので自前で実装)
ReactiveX 
http://reactivex.io/ 
ReactiveX公式サイトのLanguagesにラインナップ されました(非公式Rxでは初)
Who is the creator of Rx?
Erik Meijer@headinthebox
御意見番。 
Issue見てると大事な変更とか議 論にはたいてい呼びかけられる
Haskellとの関わり 
Haskell 98策定者の一人 
Programming in Haskellの動画解���とかも 
http://www.cs.nott.ac.uk/~gmh/book.html 
Parsec: A practical parser library 
DaanLeijen, Erik Meijer 
http://research.microsoft.com/en-us/um/people/emeijer/papers/parsec.pdf
@Microsoft Research 
Cω(しーおめが) –C#ベースの実験言語 http://research.microsoft.com/en-us/um/cambridge/projects/comega/ 
2004年にコンパイラプレビュー公開 
続報はない、というのもC# 3.0(LINQ) -2008に吸収された 
というわけでFather of LINQ でもある
@Microsoft 
Microsoft Live Labs Volta 
盛大にコケた 
アイコンだけ生き残った(Volta => 電気うなぎ) 
Reactive Extensions 
2009に実験ライブラリとして公開→かなり普及する(ただし標準 ライブラリ化はならず)→OSS化→他言語への波及 
FRP自体はRx以前からあったけど、実験に留まらず粘り強く実用 レベルに落としこんでいったのは感嘆するな仕事だと思ふ
@Applied Duality 
独立開業 
Principles of Reactive Programming 
https://www.coursera.org/course/reactive 
(Martin Odersky, Erik Meijer, Roland Kuhn) –当然Scalaで。 
Facebookの型付きPHPみたいな何か新言語 
C#スタイルなNullableやGenericsやAsyncなどから貢献が伺える 
Microsoftに囚われず自由にやっ てるようでいいことですね!
その他の人々 
Jafer Husain 
最初のRx紹介者(MicorsoftでSilverlightの仕事で初期プロトタイプのRxを使った) 
http://themechanicalbride.blogspot.jp/2009/07/introducing-rx-linq-to-events.html 
その後Netflixに転職し、RxJavaを作成 
(つまり言語を超えた普及に最も貢献したのはこの人ではないのだろうか!?) 
Mattew Podwysocki 
MSの人。地道にずっとRxJS頑張ってる:) 
Bart de Smet 
Rx 2.0の大半を作成、.NETの超絶エキスパート 
現在はWindows Phone 8に搭載されたCortanaをRx使って構築 
http://channel9.msdn.com/events/TechDays/Techdays-2014-the-Netherlands/Event-processing-at-all- scales-with-Reactive-Extensions 
2014年4月のこの動画はRx入門の決定版とでもいうべき内容
LINQ –Rx
LINQ #とは 
.NETにおいて、RxはまずLINQがあった 
LINQ(to Objects)とは……Streamを処理する何か 
Where= fIlter, Select = map、文法的にはSQLだけど中身的には 
今や当たり前にどこかで聞いたことあるアレソレ 
(当時は革新的だった!実用的な意味では今も現役に便利!) 
varquery = source 
.Where(x => x % 2 == 0) 
.Select(x => x * x);
Pull(Interactive) vs Push(Reactive) 
DataSource 
(IEnumerable<T>) 
Action 
値の要求(Pull) 
DataSource 
(IObservable<T>) 
Action 
値の送信(Push)
時間軸を基盤にしたLINQ 
イベントを時間軸に乗った無限リストとみなす 
それによりシーケンスと「同じように」書ける(map, filter, etc...) 
Pushスタイル、IObservable<T> 
IEnumerable<T>はPullスタイル、その反対側にある 
Reactive Extensions(Rx) 
time 
間隔は不定期でも可 
終わりがなくてもいい(無限に続く)
Conclusion
Rx is not only C# 
むしろ他言語のほうが流行ってるのでは感 
RxJava, ReactiveCocoa, RxJS/Bacon.js, etc... 
要因は幾つかある(Rxの威力のうち非同期の側面は言語統合の非同期構文 (C# 5.0 async/await)が引き受けたから、たとえば非同期の待ち合わせはawait Task.WhenAll()など、うちの会社のサーバーサイド実装でも多用してる) 
とはいえ別に決して流行ってないわけではない、よ!#多分 
not only LINQ? 
切り離してもいいけれど、理解の難易度的にはLINQ(Pull/Interactive)との関 連性から結びだしたほうが捗るのではないかな? 
別にLINQじゃなくても、自分のメイン言語のコレクション処理の構文と結び つけてみると馴染める、はずきっと

More Related Content

The History of Reactive Extensions

  • 1. The History of Reactive ExtensionsHow extended Rx across languages 2014/10/28 RxJava Night #rxjnight Yoshifumi Kawai -@neuecc
  • 2. SelfIntroduction @仕事 株式会社グラニ取締役CTO 神獄のヴァルハラゲート, モンスターハンターロアオブカード 最先端C#によるハイパフォーマンスWebアプリケーション @個人活動 Microsoft MVP for Visual C# / 野良C#エヴァンジェリスト Web http://neue.cc/ Twitter @neuecc
  • 3. linq.js –LINQ for JavaScript そろそろメンテし てあげたい。。。
  • 4. LINQ to BigQuery 最近はBigQueryにはまってLINQライブラリ作りなど LINQ to BigQuery -C#による型付きDSLと LINQPadによるDumpと可視化 http://neue.cc/2014/09/24_479.html https://github.com/neuecc/LINQ-to-BigQuery
  • 6. 私とRx 一番古い記事が 2009/09/04 http://neue.cc/category/programming/rx Rx関連の記事が現在70 (思ってたより多かった!)
  • 7. 入門連載 連載は2回で止まってる。連 載逃げたとかかんとか…… 2011/11/01で内容的には些か古い (基本原理とかは変わってないの で必ずしも使えない記事というほ どではないですが) http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_01.html >また、今回のお礼を個別にささやかではありますがお食事というかたちでさせていただければと思うのですが、いかがでしょうか。
  • 8. UniRx https://github.com/neuecc/UniRx Unity用のReactive Extensions実装 (.NET用のRxはUnityで動かないので自前で実装)
  • 10. Who is the creator of Rx?
  • 13. Haskellとの関わり Haskell 98策定者の一人 Programming in Haskellの動画解説とかも http://www.cs.nott.ac.uk/~gmh/book.html Parsec: A practical parser library DaanLeijen, Erik Meijer http://research.microsoft.com/en-us/um/people/emeijer/papers/parsec.pdf
  • 14. @Microsoft Research Cω(しーおめが) –C#ベースの実験言語 http://research.microsoft.com/en-us/um/cambridge/projects/comega/ 2004年にコンパイラプレビュー公開 続報はない、というのもC# 3.0(LINQ) -2008に吸収された というわけでFather of LINQ でもある
  • 15. @Microsoft Microsoft Live Labs Volta 盛大にコケた アイコンだけ生き残った(Volta => 電気うなぎ) Reactive Extensions 2009に実験ライブラリとして公開→かなり普及する(ただし標準 ライブラリ化はならず)→OSS化→他言語への波及 FRP自体はRx以前からあったけど、実験に留まらず粘り強く実用 レベルに落としこんでいったのは感嘆するな仕事だと思ふ
  • 16. @Applied Duality 独立開業 Principles of Reactive Programming https://www.coursera.org/course/reactive (Martin Odersky, Erik Meijer, Roland Kuhn) –当然Scalaで。 Facebookの型付きPHPみたいな何か新言語 C#スタイルなNullableやGenericsやAsyncなどから貢献が伺える Microsoftに囚われず自由にやっ てるようでいいことですね!
  • 17. その他の人々 Jafer Husain 最初のRx紹介者(MicorsoftでSilverlightの仕事で初期プロトタイプのRxを使った) http://themechanicalbride.blogspot.jp/2009/07/introducing-rx-linq-to-events.html その後Netflixに転職し、RxJavaを作成 (つまり言語を超えた普及に最も貢献したのはこの人ではないのだろうか!?) Mattew Podwysocki MSの人。地道にずっとRxJS頑張ってる:) Bart de Smet Rx 2.0の大半を作成、.NETの超絶エキスパート 現在はWindows Phone 8に搭載されたCortanaをRx使って構築 http://channel9.msdn.com/events/TechDays/Techdays-2014-the-Netherlands/Event-processing-at-all- scales-with-Reactive-Extensions 2014年4月のこの動画はRx入門の決定版とでもいうべき内容
  • 19. LINQ #とは .NETにおいて、RxはまずLINQがあった LINQ(to Objects)とは……Streamを処理する何か Where= fIlter, Select = map、文法的にはSQLだけど中身的には 今や当たり前にどこかで聞いたことあるアレソレ (当時は革新的だった!実用的な意味では今も現役に便利!) varquery = source .Where(x => x % 2 == 0) .Select(x => x * x);
  • 20. Pull(Interactive) vs Push(Reactive) DataSource (IEnumerable<T>) Action 値の要求(Pull) DataSource (IObservable<T>) Action 値の送信(Push)
  • 21. 時間軸を基盤にしたLINQ イベントを時間軸に乗った無限リストとみなす それによりシーケンスと「同じように」書ける(map, filter, etc...) Pushスタイル、IObservable<T> IEnumerable<T>はPullスタイル、その反対側にある Reactive Extensions(Rx) time 間隔は不定期でも可 終わりがなくてもいい(無限に続く)
  • 23. Rx is not only C# むしろ他言語のほうが流行ってるのでは感 RxJava, ReactiveCocoa, RxJS/Bacon.js, etc... 要因は幾つかある(Rxの威力のうち非同期の側面は言語統合の非同期構文 (C# 5.0 async/await)が引き受けたから、たとえば非同期の待ち合わせはawait Task.WhenAll()など、うちの会社のサーバーサイド実装でも多用してる) とはいえ別に決して流行ってないわけではない、よ!#多分 not only LINQ? 切り離してもいいけれど、理解の難易度的にはLINQ(Pull/Interactive)との関 連性から結びだしたほうが捗るのではないかな? 別にLINQじゃなくても、自分のメイン言語のコレクション処理の構文と結び つけてみると馴染める、はずきっと