Release timeline
Rxを汎用ライブラリとして出荷する前に、チームはWindows Phoneの組織と協力して、Windows Phoneに搭載されているSilverlightベースの.NET FrameworkにRxの技術を組み込みました。これにより、Rxは、GPSや加速度計などのセンサー入力の変化を観測するための理想的なプログラミングモデルとなりました。Windows Phoneチームのサポートにより、Rxの初期バージョンは、Windows Phone 7のMicrosoft.Phone.Reactive名前空間で出荷されました。この最初の技術は、最終的には完全なRxフレームワークに取って代わられました。その後、必要不可欠なIObservable<T>およびIObserver<T>インターフェイスを、.NET 4.0リリースの.NET FrameworkのBase Class Libraryに統合する作業が行われました。
Prior to shipping Rx as a general-purpose library, the team collaborated with the Windows Phone organization to include the technology in the Silverlight-based .NET Framework that ships on the phone. This positioned Rx as an ideal programming model to observe changes to sensor inputs such as GPS, accelerometer, etc. With the support from folks on the Windows Phone team, the initial version of Rx shipped in the Microsoft.Phone.Reactive namespace for Windows Phone 7. This initial drop of the technology was eventually obsoleted in favor of the full Rx framework. Subsequent efforts took place to integrate the essential IObservable<T> and IObserver<T> interfaces into the .NET Framework’s Base Class Library for the .NET 4.0 release.
Rxの最初のリリースは2010年に出荷され、演算子セットの完全性と仮想時間スケジューリングの概念による厳密な正しさの確認に焦点を当てました。Rxのコアチームは、Erik Meijer、Wes Dyer、Jeffrey van Gogh、Danny van Velzen、Bart De Smetの各氏で構成されています。2012年にはRx .NETのセカンドリリースがリリースされ、主にパフォーマンスの向上と、様々な最新の.NET FrameworkやWinRTのサポートに重点が置かれています。これらのリリースの機能の詳細については、Rxチームのブログ(現在は廃止)に記載されています。2.xのリリース期間中は、Bart De Smetが開発を担当していました。Rx.NETは、NuGetパッケージのセットとして提供されています。
The first release of Rx was shipped in 2010, focusing on completeness of the operator set and rigorous correctness checking through the notion of virtual time scheduling. The core Rx team consisted of Erik Meijer, Wes Dyer, Jeffrey van Gogh, Danny van Velzen, and Bart De Smet. A second release of Rx .NET was shipped in 2012, mostly focusing on performance enhancements and supporting various modern flavors of the .NET Framework and WinRT. More information on the feature set of these releases can be found on the (now defunct) Rx team blog. For the duration of the 2.x releases, Bart De Smet led the development efforts. Rx.NET is made available as a set of NuGet packages.
Rxの他の言語への実装は、オリジナルチームによって行われました。特に、JavaScript(Jeffrey van GoghとMatthew PodwysockiによるRxJS)とC++(Aaron Lahman)が有名です。その後,サードパーティによって,Dag BrattliによるRx for Python,NetflixによるRxJava,Rx for Rubyなど,さまざまなバージョンが実装されました.利用可能な実装の全リストはreactivex.ioで見ることができます。
Implementation efforts of Rx for other languages were bootstrapped by the original team, most notably in JavaScript (RxJS, by Jeffrey van Gogh and Matthew Podwysocki) and C++ (by Aaron Lahman). 3rd parties later implemented many other variants, including Rx for Python by Dag Brattli, RxJava by folks at Netflix, Rx for Ruby, etc. The full list of available implementations can be found at reactivex.io.
Rx .NET技術は、2012年頃にMicrosoft OpenTech組織(現在は廃止)を経由した後、2016年に.NET Foundationに移行し、現在はOSSコミュニティによって主に維持されています。このコミュニティは、.NET Coreをサポートする3.0リリースの出荷に成功し、現在はこの技術が他の.NETエコシステムとうまく統合されるようにすることに主眼を置いています。
After a detour through the (now defunct) Microsoft OpenTech organization around 2012, the Rx .NET technology transitioned to the .NET Foundation in 2016, where it’s largely maintained by the OSS community nowadays. The community successfully shipped a 3.0 release supporting .NET Core and is now largely focused on ensuring the technology is well-integrated with the rest of the .NET ecosystem.
今日、Rxテクノロジー分野の革新のほとんどはRxJSとRxJavaで行われています。RxJSは、イベントハンドリングと非同期プログラミングモデルの標準化が歴史的に不足しているJavaScriptのために非常に人気があり、これらの異なるプログラミングモデルを統一して合成するための普遍的な接着剤として機能しています。RxJavaは、バックプレッシャーのような基礎的な機能を追加する試みを行ってきましたが、これらの構成要素の設計は誤っていると筆者は考えています。IAsyncEnumerable<T>の使用は、そのような構造のためのより良い選択です(以下を参照)。
Today, most of the innovation in the Rx technology space is happening in RxJS and RxJava. The former is quite popular due to the historical lack of standardization of event handling and asynchronous programming models in JavaScript, acting as a universal glue to unify and compose across these different programming models. RxJava has made some attempts at adding some foundational capabilities such as back pressure, although it’s the author’s belief that the design for these constructs is misguided. The use of IAsyncEnumerable<T> is a better choice for such constructs (see below).