none
Reactive Extensions for JavaScript v1.0.10621 SP1 available now

    General discussion

  • To wrap up the Rx-y year 2011, we've released the Reactive Extensions for JavaScript (RxJS) v1.0.10621 SP1. The last release of RxJS - version 1.0.2838 - was published back in December last year, and a lot has happened since. Today, we're extremely happy to provide all of you with an up-to-date release of RxJS.

    You can download the .zip file here, or use NuGet to install the RxJS packages that start with the RxJS- prefix.

     

    Asynchrony and event processing in JavaScript

    JavaScript environments are big on asynchrony. Nobody likes a web page (or more generally, a client application, e.g. using WinRT) that's stuck. Unfortunately, there's little unification between all the asynchronous programming patterns in JavaScript, leading to a jungle of concepts.

    Building on the observation (pun intended) of asynchronous programming fragmentation across different JavaScript libraries, the RxJS project started out over two years ago, providing an API similar to the one built for .NET.

    Reactive Extensions for JavaScript (RxJS) provides a unification of asynchronous programming patterns based on a single abstraction of observable sequences. More information can be found in last year's RxJS talk at MIX11.

    Today, the problem of unifying asynchronous programming patterns in JavaScript is bigger than ever with many new APIs exposing interfaces similar to the concept of an observable sequence. For example, the WebSockets API has striking similarities with its onmessage and onerror callbacks.

     

    Where has Rx(JS) been?

    2011 was a big year for Reactive Extensions. The first half year, we focused mainly on stabilizing the API surface, leading to the first official release of Rx on June 21st (v1.0.10621). A few days ago, we released the first service pack for v1.0, including support for Windows Phone 7.5 and Silverlight 5.

    At the same time, we kept innovating the API surface with new combinators, support for next-generation platforms such as .NET 4.5 and WinRT, and providing a better together story with the upcoming support for asynchronous programming in C# 5.0 and Visual Basic 11. Most of this work has been bundled in the Experimental Release of Rx, the latest version being v1.1.11111.

    Internally, we've partnered with many teams to adopt Reactive Extensions in their products. Most uses today are under the covers, but we expect public API surfaces to appear in the next months. Some examples of internal adopters include SQL Server Reporting Services, various System Center components, Windows manageability APIs, teams in Bing, etc.

    However, to ship is to choose. In order to release the first official release and support various internal projects, we had to choose between delaying the product while keeping RxJS in sync, or to bring RxJS on par with the Rx .NET APIs at a later point. As you may have guessed, the last plan was chosen.

    Today, we're pleased to break you the news of having a new RxJS build out, with an API surface that mirrors the first official Rx .NET release. Big thanks go to Matthew Podwysocki, who did most of the work on maintaining, extending, developing, porting, and testing RxJS. This release wouldn't have been possible without him!

     

    What's new in this release?

    This release of RxJS contains quite a bit of changes compared to previous releases. More details will be published later, but here are the highlights:

    • Casing of function names has been changed to reflect JavaScript conventions. For example, the Select operator from Rx .NET is named select in Rx for JavaScript.
    • Some functions have been renamed in order to disambiguate conflicts with JavaScript keywords. For example, the Return operator has been renamed to returnValue because return is a JavaScript keyword. Notice the original RxJS choice for casing (e.g. Return) was in part to avoid those issues. The same holds for operators such as Throw (throwException), Catch (catchException), and Finally (finallyAction).
    • Functionality is brought on par with the first official Rx .NET release. As a result, experimental functionality has been cut for the time being. This includes imperative control flow operators such as If, While, etc. We'll consider bringing experimental functionality back in the future.
    • Semantics of some operators have changed to reflect the semantics of the first official Rx .NET release. Essentially, the differences reflect all the changes that have happened in Rx .NET between the 1.0.2838 build in December 2010 and the 1.0.10621 build in June 2011.
    • A lot of bug fixes. As part of this RxJS release effort, we ported the extensive set of Rx .NET tests to JavaScript, resulting in better quality and consistent semantics across .NET and JavaScript (in cases where essential language or runtime differences don't prohibit this).
    • Full IntelliSense support using vsdoc files. In order to take advantage of this, simply put the rx*-vsdoc.js files alongside the rx*.js, and Visual Studio will pick up the documentation files. Those help tremendously to understand the meaning of parameters and function overloads.
    • Bridges to common JavaScript libraries are no longer included but will be made available as samples on github and as NuGet packages soon. Keep an eye on this, and feel welcome to suggest other bridges to your favorite JavaScript libraries.

     

    Enjoy this new RxJS release and wishing you a happy 2012 full of Rx fun!


    using (Microsoft.Sql.Cloud.DataProgrammability.Rx) { Signature.Emit("Bart De Smet"); }
    Friday, December 30, 2011 9:59 AM
    Owner

All replies

  • Nice, I'm going to learn Javascript soon (somewhere after my exams) and I'll keep this in mind to play around with :D 
    0x2B |~ 0x2B Blog : www.it-ca.net/blogdylan
    Tuesday, January 03, 2012 4:26 PM
  • I see l2o.js is not included in this release. What are the plans for l2o.js?
    Wednesday, January 04, 2012 9:06 AM
  • l2O.js is available at github.

    https://github.com/Reactive-Extensions/l2o-js

    (It would be awesome to have entire RxJs there, too...) ;)

    Friday, January 06, 2012 1:21 PM
  • Thanks a lot!

    RxJs.dll is no longer available for new version?

    Monday, January 09, 2012 8:21 PM
  • It seems the URL for l2o-js is not valid anymore, though it was some days ago ... ? :(
    • Edited by DEADBEEFh Friday, January 20, 2012 8:47 AM
    Friday, January 20, 2012 8:47 AM
  • Hi.

    Nice to see that RxJS is evolving!

    Only one question - why is there no sources again (or I missed something) ???


    Sergei Dorogin, Lead Developer, CROC Inc. (www.croc.ru)
    Wednesday, January 25, 2012 9:29 PM
  • One very important thing you've failed to mention is that Rx-JS was cut up into a number of tiny pieces with dependencies between them. I have to include rx.time to get the simple Interval operator? 

    What is this madness? It's great that you guys are improving it, but don't improve it to death.

    The casing changes completely broke my old code. :(

    And  Observable.returnValue is  just... terrible semantics. I get that you want more javascript developers to start using Rx, but blowing off your existing users is just terrible

    Saturday, January 28, 2012 12:12 PM
  • Thanks a lot!

    RxJs.dll is no longer available for new version?

    Correct, we no longer ship the Script# bindings due to a low number of requests for using it.

    Matt

    Thursday, March 29, 2012 8:25 PM
  • One very important thing you've failed to mention is that Rx-JS was cut up into a number of tiny pieces with dependencies between them. I have to include rx.time to get the simple Interval operator? 

    What is this madness? It's great that you guys are improving it, but don't improve it to death.

    The casing changes completely broke my old code. :(

    And  Observable.returnValue is  just... terrible semantics. I get that you want more javascript developers to start using Rx, but blowing off your existing users is just terrible

    There should be no inter dependencies on our libraries other than all other files rely upon rx.min.js.  As for the rewrite (which it was), we felt we needed the more idiomatic way of dealing with JavaScript in terms of naming, which caused conflicts with such operators as noted by Bart above, but it was an investment worth doing in the long run.  If you have suggestions for names of operators and anything else, please do let us know.

    Matt

    Thursday, March 29, 2012 8:29 PM