<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Reactive Extensions Team Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/rxteam/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/rxteam/feed.xml</link>
    <description>News about Reactive Extensions for .NET &amp;amp; Silverlight</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:27:47 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>The Reactive Extensions for .NET 2.2.4 Released</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/the-reactive-extensions-for-net-2-2-4-released</link>
      <pubDate>Tue, 29 Apr 2014 12:54:01 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2014/04/29/the-reactive-extensions-for-net-2-2-4-released/</guid>
      <description><![CDATA[This is a minor update from Rx.NET v2.2.3 which includes two fixes. First is the support for...]]></description>
      <content:encoded><![CDATA[<div class="markdown-body">
<p>This is a minor update from Rx.NET v2.2.3 which includes two fixes. First is the support for Windows Universal libraries, and the second is <code>ReplaySubject</code> performance enhancements. With the help from the community, we are moving the Reactive Extensions forward and we have plenty more coming soon.</p>
<h2>Windows Universal Support</h2>
<p>With the release of Windows Phone 8.1, it is now possible to use the Windows Runtime to build apps that can target each form factor in the family of Windows devices. Using the universal Windows app project templates, you can now create one app where your business logic can be surfaced up through a user experience relevant to the device. This unified approach to app development means that your app has the potential to reach not just Windows phones and tablets, but Windows laptops and workstations as well.</p>
<p>Previously, our NuGet packages did not support Universal Windows Apps, but now, thanks to work from <a class="user-mention" href="https://github.com/paulcbetts">Paul Betts</a>, you can now write Universal Apps using the Reactive Extensions.</p>
<h2>ReplaySubject Performance Enhancements</h2>
<p>During the development of the Reactive Extensions version 2.0+, we have had a focus on performance as noted in <a href="http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx">Bart de Smet's post</a> on the <a href="http://blogs.msdn.com/b/rxteam/">Reactive Extensions Team Blog</a>. One of the overlooked areas of the performance work we did as Subjects. We had the community step up in this regard to helping performance better on the <code>ReplaySubject</code>. The details are laid out in <a href="http://leecampbell.blogspot.com.au/2014/01/replaysubject-performance-improvements.html">this very detailed blog post</a>.&nbsp; Many thanks to <a class="user-mention" href="https://github.com/LeeCampbell">Lee Campbell</a> for his hard work for this feature.</p>
<h2>Patterns in Using Generic Virtual Methods Issues</h2>
<p>Some patterns in using generic virtual methods may cause increases in compilation time and size on disk when used with Microsoft pre-compilation technologies such as NGEN. This bug fix removes those patterns so that Microsoft pre-compilation technologies such as NGEN work better with the Reactive Extensions library. This change was tested and found to have no noticeable performance impact, other than stabilizing compilation times and the size on disk.</p>
<h2>Closed Issues</h2>
<ul>
<li><a class="issue-link" title="Add Windows Universal support" href="https://github.com/Reactive-Extensions/Rx.NET/pull/4">#4</a> - Add Windows Universal support</li>
<li><a class="issue-link" title="Adding ReplaySubject perf improvements" href="https://github.com/Reactive-Extensions/Rx.NET/pull/3">#3</a> - Adding ReplaySubject perf improvements</li>
</ul>
<h2>Changelog</h2>
<ul>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/4be75495a11ab799b6b7ad7a3889a15d7d5df7d5"><tt>4be7549</tt></a> - Updating import.targets for flattening</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/d56e5d1076bf2d6e5eacee2b03420a32fb354bbc"><tt>d56e5d1</tt></a> - Add Wpa81 to BuildAll.proj</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/7041c402f8451a1c4b44d3128fcb27812d68bfdb"><tt>7041c40</tt></a> - Universal Unit Tests aren't A Thing yet</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/b94b695ea1cac75f3fe2404fa9aa9d05ce89260c"><tt>b94b695</tt></a> - Add Configurations for Wpa81</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/03368dab977141bbd099d117af5aa9cf8bebe3ee"><tt>03368da</tt></a> - Add a Windows 8.1 + Windows Phone 8.1 Target</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/7ea7fbbe026047e5057e00cd8f2125491d9bd5b5"><tt>7ea7fbb</tt></a> - Some patterns in using generic virtual methods may cause increases in compilation time and memory usage</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/0815ac71b524493483f4bb51196c3c0f892014f3"><tt>0815ac7</tt></a> - Included multiple disposals to Replay UnitTests</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/98ad5740a38075dfdc979206f91975f6a30fa896"><tt>98ad574</tt></a> - Remove comments</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/5449869cd7bed830e9b74eccef821fe5e8748408"><tt>5449869</tt></a> - Adding ReplaySubject perf improvements</li>
<li><a class="commit-link" href="https://github.com/Reactive-Extensions/Rx.NET/commit/044afd56c6e3c6dc30ee8baefb45ef4a43ce47d1"><tt>044afd5</tt></a> - Use background thread for long-running ThreadPoolScheduler</li>
</ul>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Reactive Extensions 2013 Year in Review</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/reactive-extensions-2013-year-in-review</link>
      <pubDate>Wed, 01 Jan 2014 12:30:33 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2014/01/01/reactive-extensions-2013-year-in-review/</guid>
      <description><![CDATA[This past year saw a number of changes with the Reactive Extensions (Rx).&#160; The team, with the...]]></description>
      <content:encoded><![CDATA[<p>This past year saw a number of changes with the Reactive Extensions (Rx).&#160; The team, with the help of the community, MS Open Tech and others, we have been super busy.&#160; We thought we’d take a little bit of time to recap the year, what we did and what we plan to do.&#160; </p>  <p>Of course, it cannot be said that there wasn’t change with the Reactive Extensions Team, as Erik Meijer, the founder of the Reactive Extensions, LINQ and many other contributions, left Microsoft so that he could work on Rx on the outside, helping with adoption.&#160; We continue as a team to work closely with him and the community on the future direction of Rx.</p>  <h1>Going Open Source</h1>  <p><a href="http://blogs.msdn.com/b/interoperability/archive/2012/11/06/ms-open-tech-open-sources-rx-reactive-extensions-a-cure-for-asynchronous-data-streams-in-cloud-programming.aspx">As we announced back in November 2012,</a> in conjunction with MS Open Tech, the Reactive Extensions for .NET, C++ and JavaScript were released as open source under the Apache 2 license on both CodePlex and GitHub.&#160; Since that time, we’ve released a number of other languages which now include:</p>  <ul>   <li>.NET (<a href="http://rx.codeplex.com/">CodePlex</a> | <a href="https://github.com/Reactive-Extensions/Rx.NET">GitHub</a>)</li>    <li>C++ - WinRT, MSVC and Clang (<a href="http://rxcpp.codeplex.com/">CodePlex</a> | <a href="https://github.com/Reactive-Extensions/RxCpp">GitHub</a>)</li>    <li>JavaScript (<a href="http://rxjs.codeplex.com/">CodePlex</a> | <a href="https://github.com/Reactive-Extensions/RxJS">GitHub</a>)</li>    <li>Python 3.x (<a href="http://rxpy.codeplex.com/">CodePlex</a> | <a href="https://github.com/Reactive-Extensions/RxPy">GitHub</a>)</li>    <li>Ruby (<a href="http://rxrb.codeplex.com/">CodePlex</a> | <a href="https://github.com/Reactive-Extensions/Rx.rb">GitHub</a>)</li> </ul>  <p>Some are more complete than others, but we’d love the community’s support with making these libraries better.&#160; Contributing has never been easier to the Rx projects has never been easier.&#160; You can contribute to Rx with examples, documentation, code, tests.&#160; Simply sign the <a href="https://cla.msopentech.com/">CLA</a> and be a part of Rx!</p>  <h1>RxJava</h1>  <p>Another great result of our open source work has been the collaboration with such companies as Netflix.&#160; The Netflix engineering team are big fans of the Reactive Extensions, and decided to port the Rx to the JVM in a project called <a href="https://github.com/Netflix/RxJava/">RxJava</a> so that their engineering teams can use Rx on both the client and the server.&#160; It currently supports Java 5+, Clojure, Scala and Groovy.&#160; The <a href="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html">Netflix API takes advantage of RxJava</a>, exposing all service methods to return Observable&lt;T&gt;, which allows for flexible composition, and concurrency safety.&#160; </p>  <p>The RxJava project has enabled Netflix developers to leverage server-side concurrency without the typical thread-safety and synchronization concerns. The API service layer implementation has control over concurrency primitives, which enables us to pursue system performance improvements without fear of breaking client code.</p>  <h1>Conferences</h1>  <p>Late 2012 and through 2013 was a busy year for the Reactive Extensions team for presentations.&#160; In addition, we’ll also be making an appearance at CodeMash in Sandusky, OH.</p>  <ul>   <li><a href="http://2012.cascadiajs.com/">CascadiaJS</a> – <a href="https://www.youtube.com/watch?v=FqBq4uoiG0M">Don’t Cross the Streams</a></li>    <li><a href="https://thestrangeloop.com/">Strange Loop</a> – <a href="http://www.infoq.com/presentations/rx-event-processing">Curing Your Event Processing Blues with Rx</a> (<a href="https://github.com/Reactive-Extensions/StrangeLoop2013">demos</a>)</li>    <li><a href="http://qconsf.com/">QCon San Francisco</a></li>    <ul>     <li><a href="http://qconsf.com/tutorial/functional-programming-js-w-focus-reactive-programming-rx-js">Functional Reactive Programming in JavaScript Tutorial</a></li>   </ul>    <li><a href="http://codemesh.io/">CodeMesh</a></li>    <ul>     <li><a href="http://codemesh.io/#jafar-husain">Reactive Programming in JavaScript Tutorial</a> (with Jafar Husain)</li>      <li><a href="http://codemesh.io/#jafar-husain">End to End Reactive Programming at Netflix</a> (with Jafar Husain)</li>   </ul>    <li><a href="http://ndc-london.com/">NDC London</a></li>    <ul>     <li><a href="http://ndclondon.oktaset.com/t-11659">Democratizing event processing at all scales and platforms with the Reactive Extensions</a> (with Jafar Husain)</li>   </ul> </ul>  <p>The Netflix team has also been quite busy giving presentations not only on RxJava, but also RxJS, which they frequently use as well. These are great presentations that show how a company with scaling needs such as Netflix uses Rx across all platforms and both on the client and server.</p>  <ul>   <li><a href="http://lambdajam.com/">LambdaJam Chicago</a> – <a href="https://speakerdeck.com/benjchristensen/functional-reactive-programming-in-the-netflix-api-lambdajam-2013">Functional Reactive Programming in the Netflix API</a> (Ben Christensen)</li>    <li><a href="http://qconsf.com/">QCon San Francisco</a></li>    <ul>     <li><a href="http://qconsf.com/presentation/reactive-javascript-netflix">Reactive JavaScript at Netflix</a> (Jafar Husain)</li>      <li><a href="http://qconsf.com/presentation/evolution-netflix-api">Evolution of the Netflix API</a> (Ben Christensen)</li>   </ul> </ul>    <h1>Release of Rx v2.2</h1>  <p>This year also saw the release of Rx v2.2 for .NET, C++ and JavaScript, which was announced on this blog <a href="http://blogs.msdn.com/b/rxteam/archive/2013/12/13/rxjs-2-2-released.aspx">here</a> and <a href="http://blogs.msdn.com/b/rxteam/archive/2013/12/09/rx-2-2-released.aspx">here</a>.&#160; What was great about these releases is that a lot of the material for this release was specifically driven by the community.&#160; So, a big thank you to the community for participating and moving Rx forward!&#160; </p>  <h1>Promises for the New Year</h1>  <p>This year, 2014, promises to be another great year for the Reactive Extensions team with a focus on many things such as:</p>  <ul>   <li>Version 2.3 with ideas around backpressure and other concerns</li>    <li>Language parity with Python, Ruby and C++ versions</li>    <li>New languages supported</li>    <li>And yes, more blogging</li> </ul>  <p>Although we don’t blog as much, you can always catch us on Twitter at <a href="https://twitter.com/ReactiveX">@ReactiveX</a>!&#160; We publish lots of information about Rx and what we’re up to, so follow us!</p>]]></content:encoded>
    </item>
    <item>
      <title>RxJS 2.2 Released</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/rxjs-2-2-released</link>
      <pubDate>Fri, 13 Dec 2013 12:26:36 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2013/12/13/rxjs-2-2-released/</guid>
      <description><![CDATA[As announced earlier this week by MS Open Tech, the Reactive Extensions for JavaScript (RxJS)...]]></description>
      <content:encoded><![CDATA[<p>As <a href="http://msopentech.com/blog/2013/12/11/new-reactive-extension-support-javascript-developers-compatibility-builds-lite-version-improvements-rxjs-2-2/">announced earlier this week</a> by MS Open Tech, the Reactive Extensions for JavaScript (RxJS) version 2.2 was released.&#160; This was a big release which encompassed a number of changes as you’ll see in this post.</p>  <h1>Documentation</h1>  <p>Perhaps the biggest change of all is the documentation which can be found <a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc">here</a>.&#160; This complete set of documentation not only includes the complete RxJS API, but also many things to help get you started with RxJS such as:</p>  <ul>   <li><a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc#getting-started-with-rxjs">Getting Started</a></li>    <li><a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc#getting-to-know-rxjs-libraries">Getting to Know the RxJS libraries</a></li>    <li><a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc#how-do-i">How To Guides</a></li>    <li><a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc#mapping-rxjs-from-different-libraries">Mapping from Other Libraries</a></li>    <li><a href="https://github.com/Reactive-Extensions/RxJS/tree/master/doc#reactive-extensions-class-library">API Documentation</a></li> </ul>  <p>All of this is a work in progress, and we’ve had a tremendous amount of support from the community in helping our documentation and examples.&#160; Have a sample you want to contribute or some documentation on mapping from your favorite library?&#160; Send us a pull request and we’ll work with you to get it included!</p>  <h1>Compatibility</h1>  <p>RxJS has strived for in the past to support both modern browsers in addition to legacy browsers dating back to IE6.&#160; Like many other projects like <a href="http://jquery.com">jQuery</a>, <a href="http://lodash.com/">Lo-Dash</a> among others have started to break with the past, but to also support legacy browsers.&#160; RxJS is no exception to this and as of version 2.2, <strong>rx.js</strong> will now only work with ES5 compatible browsers.&#160; In order to continue support for legacy browsers, we will ship <strong>rx.compat.js</strong> which adds polyfills for older browsers.</p>  <h1>Batteries Included</h1>  <p>Starting with this release, we made a number of changes, moving non-pertinent things out of the core rx.js file, such as the notion of virtual time and asynchronous functions.&#160; This resulted in the creation of two new files, <strong>rx.async.js</strong> and <strong>rx.virtualtime.js</strong>.</p>  <h2>rx.async.js</h2>  <p>A common request for RxJS was to include some bridges to such things as events, callbacks and Promises all in the core library.&#160; We’ve enabled this through the <a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/libraries/rx.async.md">rx.async.js</a> library to enable you to bind to any number of sources.&#160; By default, <strong>rx.async.js</strong> only works with ES5 compliant browsers, but as we mentioned above, backwards compatibility is important to us, so we’ve also included <strong>rx.async.compat.js</strong> which normalizes event behavior between browsers.</p>  <p>You can now bind to events using <strong><a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromeventelement-eventname-selector">Rx.Observable.fromEvent</a></strong>.&#160; </p>  <pre class="csharpcode"><span class="kwrd">var</span> block = document.getElementById(<span class="str">'block'</span>);

<span class="rem">// Get all events</span>
<span class="kwrd">var</span> mousemoves = Rx.Observable.fromEvent(block, <span class="str">'mousemove'</span>),
    mousedowns = Rx.Observable.fromEvent(document, <span class="str">'mousedown'</span>),
    mouseups = Rx.Observable.fromEvent(block, <span class="str">'mouseup'</span>);

<span class="rem">// Create a drag event</span>
<span class="kwrd">var</span> drag = mousdowns.selectMany(mousemoves.takeUntil(mouseups));</pre>


<p>Alternatively, there may be cases in which you would like to use existing libraries or patterns to create events.&#160; To that end, we’ve created <a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromeventpatternaddhandler-removehandler-selector">Rx.Observable.fromEventPattern</a>, which takes two functions, one for subscribe and one for unsubscribe.</p>

<p>In this example, we can wrap jQuery’s on method using <strong><a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromeventpatternaddhandler-removehandler-selector">Rx.Observable.fromEventPattern</a></strong>.</p>

<pre class="csharpcode"><span class="kwrd">var</span> $input = $(<span class="str">'#input'</span>);
<span class="kwrd">var</span> data = { name: <span class="str">'RxJS'</span> };

<span class="kwrd">var</span> clicks = Rx.Observable.fromEventPattern(
    <span class="kwrd">function</span> add (h) {
        $(<span class="str">'input'</span>).on(<span class="str">'click'</span>, data , h);
    },
    <span class="kwrd">function</span> remove (h) {
        $(<span class="str">'input'</span>).off(<span class="str">'click'</span>, h); 
    });

clicks.subscribe(<span class="kwrd">function</span> (e) {
    console.log(e.data.name);
});</pre>


<p>Promises are a great pattern for dealing single value asynchronous computations.&#160; They can be found in any number of libraries such as <a href="http://angularjs.org">Angular</a>, <a href="http://jquery.com">jQuery</a>, <a href="http://dojotoolkit.org">Dojo</a>, WinJS, and even libraries dedicated to them such as <a href="http://documentup.com/kriskowal/q/">Q</a> or <a href="https://github.com/cujojs/when">when.js</a>.&#160; Promises are even making their way into the next version of ECMAScript.&#160; Naturally, we would like a way to bridge natively towards a common standard of the <a href="http://promises-aplus.github.com/promises-spec">Promises A+ spec</a> in RxJS.</p>

<p>In this example, we can query Wikipedia by wrapping the jQuery ajax method with the <a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefrompromisepromise">Rx.Observable.fromPromise</a> method.</p>

<pre class="csharpcode"><span class="kwrd">function</span> searchWikipedia (term) {
    <span class="kwrd">var</span> promise = $.ajax({
        url: <span class="str">'http://en.wikipedia.org/w/api.php'</span>,
        dataType: <span class="str">'jsonp'</span>,
        data: {
            action: <span class="str">'opensearch'</span>,
            format: <span class="str">'json'</span>,
            search: encodeURI(term)
        }
    }).promise();

    <span class="kwrd">return</span> Rx.Observable.fromPromise(promise);
}</pre>

<p>Callbacks are also a way of life with JavaScript, especially true in Node.js.&#160; In RxJS version 2.2, you have multiple ways of binding to callbacks, first a standard callback, and then secondly a Node.js-style callback in which the error is always the first parameter to the callback function.</p>

<p>In this first example, we can determine whether a file exists by wrapping the fs.exists function, which has a callback which only returns a Boolean as to whether the file exists.&#160; Since it only has a single value and no error, we can use the <a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromcallbackfunc-scheduler-context-selector">Rx.Observable.fromCallback</a> method.</p>

<pre class="csharpcode"><span class="kwrd">var</span> Rx = require(<span class="str">'rx'</span>);
<span class="kwrd">var</span> fs = require(<span class="str">'fs'</span>);
<span class="kwrd">var</span> path = require(<span class="str">'path'</span>);

<span class="kwrd">var</span> fileName = path.join(__dirname, <span class="str">'file.txt'</span>);

<span class="rem">// Wrap the function</span>
<span class="kwrd">var</span> exists = Rx.Observable.fromCallback(fs.exists);

<span class="rem">// Call the function and then subscribe to get the result</span>
exists(fileName).subscribe(<span class="kwrd">function</span> (result) {
    console.log(<span class="str">'File exists? '</span> + result);
});
</pre>


<p>That covers one case, but we want to handle cases in which errors are automatically handled for us by RxJS.&#160; We can wrap Node.js error style callbacks easily with the <a href="https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromnodecallbackfunc-scheduler-context-selector">Rx.Observable.fromNodeCallback</a> method.&#160; The next example, we’ll wrap the fs.stat function to get the file statistics.&#160; </p>

<pre class="csharpcode"><span class="kwrd">var</span> Rx = require(<span class="str">'rx'</span>);
<span class="kwrd">var</span> fs = require(<span class="str">'fs'</span>);
<span class="kwrd">var</span> path = require(<span class="str">'path'</span>);

<span class="kwrd">var</span> file = path.join(__dirname, <span class="str">'file.txt'</span>);

<span class="rem">// Wrap stat</span>
<span class="kwrd">var</span> stat = Rx.Observable.fromNodeCallback(fs.stat);

<span class="rem">// Run stat, get results and check for errors</span>
<span class="kwrd">var</span> subscription = stat(file).subscribe(
    <span class="kwrd">function</span> (fsStat) {
        console.log(<span class="str">'Is file? '</span> + fsStat.isFile());
    },
    <span class="kwrd">function</span> (err) {
        console.log(<span class="str">'Error: '</span> + err);
    }
);</pre>


<p>In addition to this, we also moved Rx.Observable.toAsync and Rx.Observable.start out of core and into rx.async.js.</p>

<h2>rx.virtualtime.js</h2>

<p>As above, we are very conscious of the size of files that we ship as part of RxJS, so another piece that was removed from core was the notion of virtual time.&#160; Both the <strong>VirtualTimeScheduler</strong> and <strong>HistoricalScheduler</strong> were moved to this file.</p>

<p>In order to continue to make your tests work, you will need to add <strong>rx.virtualtime.js</strong> along with <strong>rx.testing.js</strong> as shown here.</p>

<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">=&quot;rx.js&quot;</span><span class="kwrd">&gt;&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>
&lt;script src=<span class="str">&quot;rx.virtualtime.js&quot;</span>&gt;&lt;/script&gt;
&lt;script src=<span class="str">&quot;rx.testing.js&quot;</span>&gt;&lt;/script&gt;

&lt;script&gt;
test(<span class="str">'map should produce values'</span>, <span class="kwrd">function</span> () {
    <span class="kwrd">var</span> scheduler = <span class="kwrd">new</span> TestScheduler();

    <span class="rem">// Set up sequence to run through  </span>
    <span class="kwrd">var</span> xs = scheduler.createHotObservable(
        Rx.ReactiveTest.onNext(210, 1),
        Rx.ReactiveTest.onNext(220, 2),
        Rx.ReactiveTest.onCompleted(230)
    );

    <span class="rem">// Run computation</span>
    <span class="kwrd">var</span> results = scheduler.startWithCreate(<span class="kwrd">function</span> () {
        <span class="kwrd">return</span> xs.map(<span class="kwrd">function</span> (x) { <span class="kwrd">return</span> x * x; });
    });

    <span class="rem">// Assert using custom assertions</span>
    assertCollectionEqual(results, [
        Rx.ReactiveTest.onNext(210, 1),
        Rx.ReactiveTest.onNext(220, 4),
        Rx.ReactiveTest.onCompleted(230)
    ]);
});
<span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span></pre>


<p>This also gives us more flexibility to define more virtual time based schedulers in the future.</p>

<h1>Going Lite</h1>

<p>A common ask of the team is to create a “bite sized” version of RxJS which contains most of the operators that one would need on a daily basis.&#160; Instead of the a la carte tradition of RxJS, using only the pieces you need, this build has the most commonly used operators from factory methods, standard query operators, time-based operators, binding operators such as multicast, and async operators such as <strong>Rx.Observable.fromEvent</strong>, <strong>Rx.Observable.fromPromise</strong> and more in the form of <strong>rx.lite.js</strong>.&#160; We also have a compatibility version which supports older browsers in <strong>rx.lite.compat.js</strong>.&#160; The size of the entire library is about 7kb gzipped, which offers a lot of possibilities without much cost.</p>

<p>With this capability, we now have the ability to write our complete autocomplete example without needing any external library other than one to provide us Ajax support.</p>

<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">=&quot;jquery.com&quot;</span><span class="kwrd">&gt;&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>
&lt;script src=<span class="str">&quot;rx.lite.js&quot;</span>&gt;&lt;/script&gt;
&lt;script&gt;
<span class="rem">// Search Wikipedia using jQuery JSONP</span>
<span class="kwrd">function</span> searchWikipedia (term) {
    <span class="kwrd">var</span> promise = $.ajax({
        url: <span class="str">'http://en.wikipedia.org/w/api.php'</span>,
        dataType: <span class="str">'jsonp'</span>,
        data: {
            action: <span class="str">'opensearch'</span>,
            format: <span class="str">'json'</span>,
            search: encodeURI(term)
        }
    }).promise();
    <span class="kwrd">return</span> Rx.Observable.fromPromise(promise);
}

<span class="kwrd">var</span> $input = $(<span class="str">'#input'</span>),
    $results = $(<span class="str">'#results'</span>);

<span class="rem">// Get the data from the text field</span>
<span class="kwrd">var</span> text = Rx.Observable.fromEvent(input, <span class="str">'keyup'</span>)
    .map(<span class="kwrd">function</span> (e) {
        <span class="kwrd">return</span> e.target.value;
    })
    .filter(<span class="kwrd">function</span> (text) {
        <span class="kwrd">return</span> text.length &gt; 2;
    })
    .throttle(500)
    .distinctUntilChanged();

<span class="kwrd">var</span> subscription = text.flatMapLatest(searchWikipedia).subscribe(
    <span class="kwrd">function</span> (results) {
        <span class="rem">// Bind results to UI</span>
    },
    <span class="kwrd">function</span> (err) {
        <span class="rem">// Handle error</span>
    });
<span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span></pre>


<p>We’re working on making custom builds so that you can create your own lite version using the operators that you need.&#160; Stay tuned for that.</p>

<h1>Breaking Changes</h1>

<p>With all of these changes, we had a few breaking changes, for example:</p>

<ul>
  <li><strong>Rx.Observable.toAsync</strong> moved to <strong>rx.async.js</strong></li>

  <li><strong>Rx.Observable.start</strong> moved to <strong>rx.async.js</strong></li>

  <li><strong>Rx.HistoricalScheduler</strong> moved to <strong>rx.virtualtime.js</strong></li>

  <li><strong>Rx.VirtualTimeScheduler</strong> moved to <strong>rx.virtualtime.js</strong></li>
</ul>

<p>In addition, the behavior of <strong>Rx.Observable.prototype.scan</strong> was also changed as it was in the Reactive Extensions for .NET.&#160; This is to reflect behavior found in other languages such as F#, Haskell and others.&#160; The basic rule is, if you have an empty observable sequence with a seed, then you should yield that seed, else if it is an empty sequence with no seed, it should be an empty sequence.&#160; This breaks from the old behavior which yielded nothing with an empty observable sequence even when it had a seed.</p>

<pre class="csharpcode"><span class="kwrd">function</span> add(x, y) {
    <span class="kwrd">return</span> x + y;
}

<span class="rem">// With seed</span>
Rx.Observable.empty().scan(add, 0)
    .subscribe(console.log.bind(console));
<span class="rem">// =&gt; 0</span>

<span class="rem">// Without seed</span>
Rx.Observable.empty().scan(add)
    .subscribe(console.log.bind(console));
// =&gt; Nothing</pre>

<p>We will try in the future to keep breaking changes to a minimum as we continue to innovate with the Reactive Extensions.</p>

<h1>Get It Now</h1>

<p>There are many ways of getting RxJS, including through:</p>

<ul>
  <li><a href="https://npmjs.org/package/rx">NPM</a></li>

  <li><a href="http://sindresorhus.com/bower-components/#!/search/rxjs">Bower</a></li>

  <li><a href="http://jamjs.org/packages/#/details/rx">Jam</a></li>

  <li><a href="http://www.nuget.org/packages?q=RxJS">NuGet</a></li>

  <li><a href="http://cdnjs.com/libraries/rxjs/">cdnjs</a> or <a href="http://www.jsdelivr.com/#!rxjs">jsdelivr</a> CDNs</li>

  <li><a href="https://github.com/Reactive-Extensions/RxJS">GitHub</a> or <a href="http://rxjs.codeplex.com">CodePlex</a></li>
</ul>

<h1>We’re Not Done Yet</h1>

<p>Even though we accomplished a lot in this release, we are by no means done.&#160; In fact, we have plenty that we are researching for our next version which could include the following:</p>

<ul>
  <li>Query expression parsing to create LINQ to IndexedDB, OData, etc</li>

  <li>Backpressure to handle situations when the Observer cannot keep up</li>

  <li>And much more.</li>
</ul>

<p>As always, we’d like to hear from you as to what’s important with the Reactive Extensions for JavaScript, so let us know through <a href="http://social.msdn.microsoft.com/Forums/en-US/home?forum=rx">our forum</a>, our blogs, and our <a href="http://rxjs.codeplex.com/">CodePlex</a> and <a href="https://github.com/Reactive-Extensions/RxJS">GitHub</a> repos.</p>

<h1>Conclusion</h1>

<p>We were able to accomplish quite a bit with this release of RxJS 2.2, and the future is quite bright with it.&#160; We are working with our partners including Netflix on how we can improve the library, and best of all, make it approachable for just about anybody.&#160; We’d love to hear what you think!</p>]]></content:encoded>
    </item>
    <item>
      <title>Rx 2.2 Released!</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/rx-2-2-released</link>
      <pubDate>Mon, 09 Dec 2013 11:25:08 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2013/12/09/rx-2-2-released/</guid>
      <description><![CDATA[The MS Open Tech Hub releases Rx 2.2
Today Microsoft Open Technologies, Inc. (MS Open Tech), is...]]></description>
      <content:encoded><![CDATA[<h2 class="entry-title">The MS Open Tech Hub releases Rx 2.2</h2>
<p>Today Microsoft Open Technologies, Inc. (MS Open Tech), is happy to share the news of recent improvements we have made to&nbsp;<a href="http://blogs.msdn.com/b/interoperability/archive/2012/11/06/ms-open-tech-open-sources-rx-reactive-extensions-a-cure-for-asynchronous-data-streams-in-cloud-programming.aspx">Reactive Extensions</a>.</p>
<p>Rx 2.2 is now available via the&nbsp;<a href="http://rx.codeplex.com/">Rx CodePlex project</a>&nbsp;and includes more support for Windows Phone 8, various bug fixes and contributions from the community.</p>
<p>For more about the release, see the<a href="http://rx.codeplex.com/releases/view/114891"> release notes for Rx.NET 2.2</a> and the MS Open Tech <a href="http://msopentech.com/blog/2013/12/05/ms-open-tech-hub-releases-rx-2-2/">blog post</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Rx 2.1 is available on NuGet!</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/rx-2-1-is-available-on-nuget</link>
      <pubDate>Wed, 06 Feb 2013 19:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2013/02/06/rx-2-1-is-available-on-nuget/</guid>
      <description><![CDATA[To follow up on our announcement of releasing Rx 2.1, we'd like to let you know what changed in this...]]></description>
      <content:encoded><![CDATA[<p>To follow up on our <a title="Announcing Rx 2.1" href="http://blogs.msdn.com/b/interoperability/archive/2013/02/04/new-releases-from-the-ms-open-tech-hub-rx-2-1-and-actorfx-v0-2.aspx">announcement of releasing Rx 2.1</a>, we'd like to let you know what changed in this release.</p>
<p>We have updated the Reactive Extensions for .NET, primarily to re-enable Windows Phone 8 support.&nbsp; We ran into a bug with a partner team's tooling and the strong name crypto key we use to sign Rx.&nbsp;&nbsp;To work around the problem, we had to change the crypto key back from a SHA-2 key to the SHA-1 key we used with Rx previously.&nbsp; This affected our portable library and other flavors of Rx, so we recommend that you download a new version and recompile everything that depends on Rx.&nbsp;</p>
<p>Additionally, we have decided to simplify our distribution story for developers.&nbsp; Rx 2.1 binaries&nbsp;are available only on NuGet.&nbsp;&nbsp;You can easily get this in Visual Studio by right clicking in your project's References tab and selecting "Manage NuGet packages..." then typing Rx in the search box.&nbsp; Alternately, you can go to <a title="Rx on NuGet" href="http://www.nuget.org/packages/Rx-Main/">NuGet.org and use their package manager to install Rx on the command line</a> if you desire.&nbsp; Or you can grab the source from <a title="Rx on CodePlex" href="http://rx.codeplex.com">CodePlex</a>&nbsp;and run with it.</p>
<p>Beyond the new strong name key, we've made a few minor additions:</p>
<p>*) Added several SelectMany overloads that provide you with indices, so you know which element in an IObservable or IEnumerable you're dealing with.&nbsp; The simple overloads look like this:</p>
<pre class="scroll"><code class="csharp"> IObservable&lt;TResult&gt; SelectMany&lt;TSource, TResult&gt;(<br /> &nbsp;&nbsp;&nbsp;&nbsp;IObservable&lt;TSource&gt; source, <br /> &nbsp;&nbsp;&nbsp;&nbsp;Func&lt;TSource, int, IObservable&lt;TResult&gt;&gt; selector);<br /> </code></pre>
<p>The more complex ones look like this:</p>
<pre class="scroll"><code class="csharp"> IObservable&lt;TResult&gt; SelectMany&lt;TSource, TCollection, TResult&gt;(<br /> &nbsp;&nbsp;&nbsp;&nbsp;IObservable&lt;TSource&gt; source, <br /> &nbsp;&nbsp;&nbsp;&nbsp;Func&lt;TSource, int, IObservable&lt;TCollection&gt;&gt; collectionSelector,<br /> &nbsp;&nbsp;&nbsp;&nbsp;Func&lt;TSource, int, TCollection, int, TResult&gt; resultSelector);</code></pre>
<p><br />*) Added helper methods for dealing with anonymous types.&nbsp; If you want to create instances of a generic type using an anonymous type as the type argument, that's not expressible in some languages like C#.&nbsp; Instead, we can create a static generic method on a&nbsp;non-generic type that serves as a factory method and uses type inference to work around the&nbsp;lack of any name for the anonymous type.&nbsp; Consider the following illegal and legal examples:</p>
<pre class="scroll"><code class="csharp"> DateTimeOffset time = ...;<br /> var anonType = new { x = 5, y = "hi" };<br /> var v = new Timestamped&lt;typeof(anonType)&gt;(anonType, time); // illegal<br /> var v = Timestamped.Create(anonType, time); // legal<br /> </code></pre>
<p>We used the anonymous type trick while testing SelectMany too!</p>
<p>Enjoy!</p>]]></content:encoded>
    </item>
    <item>
      <title>Update on Windows Phone 8 support for Rx v2.0</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/update-on-windows-phone-8-support-for-rx-v2-0</link>
      <pubDate>Wed, 14 Nov 2012 12:04:04 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2012/11/14/update-on-windows-phone-8-support-for-rx-v2-0/</guid>
      <description><![CDATA[Last week, an update for Rx v2.0 was released, adding support for Windows Phone 8.&#160;...]]></description>
      <content:encoded><![CDATA[<p>Last week, an update for Rx v2.0 was released, adding support for Windows Phone 8.&#160; Unfortunately, an issue was discovered with the enhanced strong name signing used for the portable core assemblies of Rx, preventing the binaries from loading correctly on physical devices. The issue is under investigation with the Rx, CLR, and Windows Phone teams.</p>  <p>In order to stop the problem from impacting more developers (discovering the problem only during deployment to physical devices, typically late in a development cycle), we’ve decided to temporarily pull the Rx v2.0 for Windows Phone 8 binaries from the Visual Studio Gallery and NuGet, until a fix is available.</p>  <p>We apologize for the inconvenience this is causing and will post updates as we’re working towards resolving this issue. In the meantime, the Rx v2.0 for Windows Phone 7 binaries can be used for Windows Phone 8 projects. While those binaries are compatible with Windows Phone 8, they won’t contain Rx’s Task&lt;T&gt; support and a variety of other enhancements.</p>]]></content:encoded>
    </item>
    <item>
      <title>The Reactive Extensions for JavaScript (RxJS) V2.0 now released</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/the-reactive-extensions-for-javascript-rxjs-v2-0-now-released</link>
      <pubDate>Wed, 19 Sep 2012 21:48:39 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2012/09/19/the-reactive-extensions-for-javascript-rxjs-v2-0-now-released/</guid>
      <description><![CDATA[Hot on the heels of the announcement of the availability of the Reactive Extensions for .NET v2.0...]]></description>
      <content:encoded><![CDATA[<p>Hot on the heels of the announcement of the availability of the Reactive Extensions for .NET v2.0 RTM, we are pleased to announce the release of the <a href="http://msdn.microsoft.com/en-us/data/gg577610">Reactive Extensions for JavaScript (RxJS) v2.0 RTM</a>.&#160; This release, just as in previous releases, strives to maintain parity with the Reactive Extensions for .NET as much as possible, minus such things as the blocking operators.&#160; This is a major milestone in the life of the RxJS, including shipping source that you can use for debug purposes.</p>  <p>This post will focus on what’s inside and how you can get started.</p>  <h1>Getting the Reactive Extensions for JavaScript</h1>  <p>The Reactive Extensions for JavaScript consists of a number of files, which you can include based upon the functionality you want.&#160; This keeps the size of your includes down significantly, where you may only end up using a few of the many Observable operators we support.&#160; Currently, we ship three variations of each file, a source version, a Visual Studio Documentation (VSDoc) version and the minimized version.</p>  <p>RxJS consists of the following files and we’ll cover the details of each in subsequent posts:</p>  <ul>   <li><strong>rx.js – </strong>the&#160; main library for the Reactive Extensions </li>    <li><strong>rx.aggregates.js</strong> – aggregation operators such as min/max, count, sum, and average</li>    <li><strong>rx.binding.js</strong> – binding operators such as multicast, publish and replay</li>    <li><strong>rx.coincidence.js</strong> – coincidence operators such as join, and groupJoin</li>    <li><strong>rx.experimental.js</strong> – experimental operators such as the imperative operators and forkJoin</li>    <li><strong>rx.joinpatterns.js</strong> – join pattern calculus implementation</li>    <li><strong>rx.testing.js</strong> – used to write unit tests for complex processing queries</li>    <li><strong>rx.time.js</strong> – time-based event processing query operations</li> </ul>  <p> You have a number of ways of getting RxJS including a direct download from <a href="http://msdn.microsoft.com/en-us/data/gg577610">MSDN</a>, <a href="http://nuget.org/packages?q=rxjs">NuGet</a> <a href="https://npmjs.org/package/rx">NPM</a> via Node.js, and as well on our <a href="https://github.com/reactive-extensions/rxjs">GitHub page</a>.</p>  <h2>Installing with NuGet</h2>  <p>The first option of getting RxJS is through NuGet.&#160; Starting with Visual Studio 2012, NuGet is automatically built in, but for previous versions you can install via <a href="http://www.nuget.org">www.nuget.org</a><strike></strike>.&#160; We have a number of packages in NuGet which correspond to the names of our files from above.&#160; Each package contains the source file, as well as the documentation via a VSDoc file, and a minimized version.&#160; </p>  <p>We ship the following packages in NuGet:</p>  <ul>   <li><strong>RxJS-All</strong></li>    <li><strong>RxJS-Main</strong></li>    <li><strong>RxJS-Aggregates </strong></li>    <li><strong>RxJS-Binding</strong></li>    <li><strong>RxJS-Coincidence</strong></li>    <li><strong>RxJS-Experimental</strong></li>    <li><strong>RxJS-JoinPatterns</strong></li>    <li><strong>RxJS-Testing</strong></li>    <li><strong>RxJS-Time</strong></li> </ul>  <p>In addition to these main packages, we will continue to deliver the bridges to other libraries such as jQuery, Dojo, MooTools, ExtJS and more.&#160; Just search for RxJS-Bridges to find them all.</p>  <h2>Installing with NPM and Node.js</h2>  <p>In this release we’ve also made the Reactive Extensions for JavaScript available through NPM, a package manager built on the popular Node.js platform.&#160;&#160; With this past release, we’ve made an effort to make sure the Reactive Extensions for JavaScript works great on Node.js.&#160; We’ve worked on modularization where you can include all of RxJS including all the operators all the files such as aggregates, binding, time, and more.&#160;&#160; </p>  <p>To get started, just install <strong>rx</strong> from NPM from a command window.&#160; </p>  <div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 200px; background-color: rgb(244, 244, 244);">   <div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">     <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">&gt; npm install rx</pre>
<!--CRLF--></div>
</div>

<p>Once installed, you can reference RxJS like the following example of returning a single value and then writing the value to the console when we subscribe.</p>

<div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 200px; background-color: rgb(244, 244, 244);">
  <div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">
    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"><span style="color: rgb(0, 128, 0);">// Reference main Rx</span></pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"><span style="color: rgb(0, 0, 255);">var</span> Rx = require(<span style="color: rgb(0, 96, 128);">'rx'</span>);</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">&#160;</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"><span style="color: rgb(0, 0, 255);">var</span> observable = Rx.Observable.returnValue(42);</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">&#160;</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"><span style="color: rgb(0, 0, 255);">var</span> subscription = observable.subscribe( <span style="color: rgb(0, 0, 255);">function</span> (value) {</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">    console.log(value);</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">});</pre>
<!--CRLF--></div>
</div>

<p>RxJS, with its emphasis on querying streams of data, is really well suited for Node.js applications. We’ll explore more of RxJS and Node.js in subsequent posts</p>

<p>&#160;</p>

<h2>Asynchronous Module Definition (AMD) support</h2>

<p>Modularity is important for many JavaScript developers as code bases in JavaScript become larger, we look for ways of modularizing our code bases and loading only what we need.&#160; One emerging format for modularity has emerged in <a href="https://github.com/amdjs/amdjs-api/wiki/AMD">Asynchronous Module Definition (AMD)</a> which provides a way for JavaScript developers to build modularity into your web based applications.&#160; The AMD format has been embraced by such libraries as jQuery, Dojo, MooTools and now, RxJS.</p>

<p>In the following example, we can use <a href="http://requirejs.org/">Require.js</a> to load both the main RxJS library as well as the time-based operators to build a simple observable sequence which writes to the console every half second. </p>

<div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 200px; background-color: rgb(244, 244, 244);">
  <div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">
    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"><span style="color: rgb(0, 128, 0);">// Require both core and time-based operators</span></pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">require([<span style="color: rgb(0, 96, 128);">'rx'</span>, <span style="color: rgb(0, 96, 128);">'rx.time'</span>], <span style="color: rgb(0, 0, 255);">function</span> (Rx) {</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">    </pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">&#160;</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">    <span style="color: rgb(0, 128, 0);">// Print a value every 500ms</span></pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">    <span style="color: rgb(0, 0, 255);">var</span> subscription = Rx.Observable</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">        .interval(500 <span style="color: rgb(0, 128, 0);">/* ms */</span>)</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">        .subscribe( <span style="color: rgb(0, 0, 255);">function</span> (x) {</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">            console.log(x);</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">        });</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;">&#160;</pre>
<!--CRLF-->

    <pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &quot;Courier New&quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);">});</pre>
<!--CRLF--></div>
</div>

<h1>How Do I Get Started…</h1>

<p>One of the often asked questions when it comes to RxJS is how one gets started using the library.&#160; This To that end, we’ve created a GitHub repository especially for our samples called <a href="https://github.com/Reactive-Extensions/RxJS-Examples">RxJS-Examples</a>.&#160; This is just a sampling of some of the examples we have which highlight some of the Reactive Extensions capabilities.</p>

<ul>
  <li><strong>Autocomplete</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/autocomplete">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/autocomplete/autocomplete.html">demo</a>) 

    <br />An autocomplete scenario which throttles typing to query Wikipedia for search suggestions.

    <br /></li>

  <li><strong>Canvas Painting</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/canvaspaint">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/canvaspaint/canvaspaint.html">demo</a>) 

    <br />Painting on a HTML5 Canvas.

    <br /></li>

  <li><strong>Drag and Drop</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/dragndrop">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/dragndrop/dragndrop.html">demo</a>) 

    <br />Drag and Drop example with the Volta logo.

    <br /></li>

  <li><strong>AMD and Require.js Integration</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/requirejs">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/requirejs/require-example.html">demo</a>)&#160;&#160;&#160;&#160; <br />Integration of the Asynchronous Module Definition pattern, <a href="http://requirejs.org/">Require.js</a> and RxJS.

    <br /></li>

  <li><strong>Time Flies Like an Arrow</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/timeflies">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/timeflies/timeflies.html">demo</a>) 

    <br />A time based delay for each letter based upon its position .

    <br /></li>

  <li><strong>Testing using QUnit</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/testing/qunit">source</a>) (<a href="http://reactive-extensions.github.com/RxJS-Examples/testing/qunit/tests.html">demo</a>)&#160;&#160;&#160;&#160; <br />Unit testing example using <a href="http://qunitjs.com/">QUnit</a> showing how you can test the timing aspects of observable sequences. 

    <br /></li>

  <li><strong>Testing using Node.js and Mocha</strong> (<a href="https://github.com/Reactive-Extensions/RxJS-Examples/tree/master/testing/nodejs">source</a>) 

    <br />Unit testing example with <a href="http://visionmedia.github.com/mocha/">Mocha</a> and Node.js, which shows how to test the timings of observable sequences. 

    <br /></li>
</ul>

<p>This is just the start of some of the samples and we’ll be posting more in the near future as well as more complete documentation.</p>

<h1>Conclusion</h1>

<p>We hope you enjoy the Reactive Extensions for JavaScript V2.0!&#160; Stay tuned to this blog for more in the coming weeks and check out our samples on how you can get started with RxJS.</p>]]></content:encoded>
    </item>
    <item>
      <title>Reactive Extensions v2.0 has arrived!</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/reactive-extensions-v2-0-has-arrived</link>
      <pubDate>Wed, 15 Aug 2012 22:13:14 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2012/08/15/reactive-extensions-v2-0-has-arrived/</guid>
      <description><![CDATA[function noHiggsCelebration() {
   $("#higgs").parent().find('font').removeAttr('face');...]]></description>
      <content:encoded><![CDATA[<script language="javascript" id="higgs">
function noHiggsCelebration() {
   $("#higgs").parent().find('font').removeAttr('face');
   $("#disableHiggs").remove();
   $("#regularFont").remove();
}
</script>  <p><font face="Comic Sans MS">Today, we’re extremely pleased to <a href="http://www.guardian.co.uk/artanddesign/2012/jul/04/higgs-boson-comic-sans-twitter">announce</a> the availability of <strong>Reactive Extensions for .NET (Rx) v2.0 RTM</strong>, aligned with the availability of <a href="http://blogs.msdn.com/b/jasonz/archive/2012/08/15/visual-studio-2012-and-net-framework-4-5-released-to-the-web.aspx">Visual Studio 2012 RTM</a> and <a href="http://windowsteamblog.com/windows/b/bloggingwindows/archive/2012/08/01/windows-8-has-reached-the-rtm-milestone.aspx">Windows 8 RTM</a> for MSDN subscribers. This is a major milestone for the Rx project and we hope you’ll love what you see!</font></p>  <p><font face="Comic Sans MS">In this post, we’ll focus on how to download and install the bits for use in various application frameworks. Unlike <a href="http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx">previous</a> <a href="http://blogs.msdn.com/b/rxteam/archive/2012/06/20/reactive-extensions-v2-0-release-candidate-available-now.aspx">posts</a> about the v2.0 pre-releases, we’ll defer further technical details to a series of follow-up posts. Nonetheless, we’ll give a brief introduction into the use of Portable Library with Rx v2.0 RTM.</font></p>  <blockquote id="disableHiggs">   <p><strong>Note:</strong>&#160; We’ve written this post in the typical <a href="http://www.guardian.co.uk/artanddesign/2012/jul/04/higgs-boson-comic-sans-twitter">font used for big announcements nowadays</a> – Comic Sans – in honor of the <a href="http://press.web.cern.ch/press/PressReleases/Releases2012/PR17.12E.html">Higgs boson discovery</a>. In case you don’t want to partake in this celebration for the remainder of the post, <a onclick="javascript:noHiggsCelebration();">click here</a> to switch fonts.</p> </blockquote>  <p><font face="Comic Sans MS">Before we get started, make a note of the <strong>supported platforms</strong> for this release:</font></p>  <ul>   <li><font face="Comic Sans MS">.NET Framework 4</font></li>    <li><font face="Comic Sans MS">.NET Framework 4.5</font></li>    <li><font face="Comic Sans MS">.NET Framework 4.5 for Windows Store apps</font></li>    <li><font face="Comic Sans MS">Silverlight 5</font></li>    <li><font face="Comic Sans MS">Windows Phone 7.5</font></li> </ul>  <p><font face="Comic Sans MS">Although this post was authored on Windows 8 using Visual Studio 2012 for screenshots, Rx can be used with Visual Studio 2010, and/or on older versions of the operating system as well. (For example, at the time of writing this post, Windows Phone development wasn’t yet publicly available in Visual Studio 2012, so that’d be a case where you have to use Visual Studio 2010 for the time being.)</font></p>  <p><font face="Comic Sans MS"><strong>Reactive Extensions for JavaScript (RxJS) </strong>users can expect the v2.0 release – including support for WinJS used in Windows Store apps – to hit the web very soon. Watch this blog for the announcement.</font></p>  <p><font face="Comic Sans MS"></font></p>  <h1><font face="Comic Sans MS">Option 1 – Installing the Rx SDK using Windows Installer</font></h1>  <p><font face="Comic Sans MS">The traditional way of installing the Reactive Extensions SDK is through the Windows Installer (MSI) package <a href="http://go.microsoft.com/fwlink/?LinkId=261938">one can get from the Download Center</a>. Using this approach, you’ll get tight integration with Visual Studio through the Add Reference dialog for various target platforms.</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/4336.image_29A521C6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/4336.image_5F00_29A521C6.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7455.image_thumb_377767C1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7455.image_5F00_thumb_5F00_377767C1.png" width="509" height="399" /></a></p> </blockquote>  <p>We’ll talk about the integration with Visual Studio shortly. Let’s focus on the target platforms first. After clicking through the EULA page, you’re presented with an option to install the “Typical” feature set of the SDK, the “Complete” on, or to customize the installation using “Custom”. Let’s choose the latter option to illustrate the target platforms and talk a bit about some important changes here.</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/6283.image_696F084B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/6283.image_5F00_696F084B.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/4130.image_thumb_4953FB8E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/4130.image_5F00_thumb_5F00_4953FB8E.png" width="509" height="399" /></a></p> </blockquote>  <p><font face="Comic Sans MS">As you can see from the next screenshot, the structure of the SDK has changed quite a bit:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/3644.image_3E2A7144.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/3644.image_5F00_3E2A7144.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7776.image_thumb_702211CE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7776.image_5F00_thumb_5F00_702211CE.png" width="509" height="399" /></a></p> </blockquote>  <p><font face="Comic Sans MS">First of all, notice how the <strong>“.NET Framework 4” binaries</strong> are not installed by default. We chose this approach to reduce the clutter in the Add Reference dialog in Visual Studio 2012 when installing both the “.NET Framework 4.5” and “.NET Framework 4” assemblies.</font></p>  <p><font face="Comic Sans MS">When both sets of assemblies are installed on the system, projects targeting .NET Framework 4.5 will have duplicate entries for the Rx assemblies in the Add Reference dialog. Because .NET 4.5 is fully compatible with .NET 4 assemblies, the project management system shows the .NET 4 SDK assemblies as well, alongside the .NET 4.5 SDK assemblies which are optimized for the target platform.</font></p>  <p><font face="Comic Sans MS">Though one can safely run Rx v2.0 on .NET 4.5 using our .NET 4 assemblies, this is suboptimal. Various features such as “await” support on observable sequences and improved exception propagation (using ExceptionDispatchInfo) wouldn’t be available. Also, users have to make sure not to mix-and-match Rx assemblies targeting different versions of the .NET Framework. For example, using System.Reactive.Core built for .NET 4 together with a copy of System.Reactive.Linq built for .NET 4.5 may or may not work. Such combinations were never tested and will likely result in unexpected runtime behavior.</font></p>  <blockquote>   <p><font face="Comic Sans MS"><strong>Tip:&#160; </strong>If you’re planning on using Rx v2.0 for both .NET Framework 4 and .NET Framework 4.5 projects, consider using NuGet to prevent issues when referencing assemblies. Using NuGet – which we’ll cover further on – it suffices to pick the Rx packages you need, and the package manager will take care of downloading the binaries that match (or are best suited for) your project’s target platform.</font></p> </blockquote>  <p><font face="Comic Sans MS">Secondly, the refactoring of Rx v2.0 into a <strong>Portable Library</strong> based core and platform-specific assemblies for “.NET Framework 4.5” and “.NET for Windows Store apps” (used by Windows 8 XAML applications) is reflected in the feature tree as well. We’ll come back to this in a bit.</font></p>  <p><font face="Comic Sans MS">After completing the installation, you’ll find the product binaries for selected target platforms under “Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0” (omit the x86 part in the path if you’re on a 32-bit system). We changed the installation location – compared to our v1.x release – to consolidate all of Microsoft’s SDKs under the same file system location.</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/8446.image_50070511.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/8446.image_5F00_50070511.png"><font face="Comic Sans MS"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0027.image_thumb_2FEBF854.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0027.image_5F00_thumb_5F00_2FEBF854.png" width="777" height="586" /></font></a></p> </blockquote>  <p><font face="Comic Sans MS">At this point, you’re ready to start playing with Rx v2.0 inside Visual Studio 2012. In the screenshot below, you can see the Rx assemblies show up in the Add Reference dialog for a Console Application project targeting .NET Framework 4.5:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/6864.image_3DBE3E4F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/6864.image_5F00_3DBE3E4F.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7444.image_thumb_08B1AF1F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7444.image_5F00_thumb_5F00_08B1AF1F.png" width="781" height="449" /></a></p> </blockquote>  <p><font face="Comic Sans MS">If you decide to use the Reference Manager instead of NuGet (see further), make sure to include <strong>System.Reactive.PlatformServices</strong>. This assembly contains the so-called platform enlightenment provider that’s responsible to discover platform-specific capabilities for use by the platform-neutral core assemblies that are based on Portable Library. In the selection above, System.Reactive.Interfaces, System.Reactive.Core, and System.Reactive.Linq are all portable assemblies that are shared with Rx v2.0 for .NET 4.5 for Windows Store apps. We’ll come back to enlightenments later in this post.</font></p>  <p><font face="Comic Sans MS">One additional thing that the MSI-based installer takes care of is installing the so-called Rx v2.0 “Extension SDK” for Windows Store apps. In such projects, the Add Reference dialog has Rx presence in two spots. First of all, the regular Assemblies, Extensions tab contains all of the Rx assemblies in one spot:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/8015.image_1683F51A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/8015.image_5F00_1683F51A.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/3247.image_thumb_7668E85C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/3247.image_5F00_thumb_5F00_7668E85C.png" width="781" height="449" /></a></p> </blockquote>  <p><font face="Comic Sans MS">When going down this route, make sure to include System.Reactive.PlatformServices for the same reasons as the ones we discussed before. Doing so will enable Rx to take advantage of the WinRT APIs to introduce concurrency on the WinRT thread pool. However, when using the <strong>Extension SDK</strong> model, you don’t have to worry about picking the right set of assemblies at all. On the Windows, Extensions tab in the Reference Manager dialog you’ll find a one-click way to include all of Rx, tailored for Windows Store apps:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/1104.image_564DDB9F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/1104.image_5F00_564DDB9F.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0508.image_thumb_08457C2A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0508.image_5F00_thumb_5F00_08457C2A.png" width="781" height="449" /></a></p> </blockquote>  <p><font face="Comic Sans MS">This new Extension SDK model greatly simplifies the procedure of using another SDK, regardless of its internal organization. </font><font face="Comic Sans MS">In the past, different pieces of functionality were often fused together in massive assemblies without proper layering, merely to simplify development and deployment operations. In fact, for Rx v1.0 ease of adoption was an important goal. Long time Rx fans may recall an old split of the Rx API – prior to the v1.0 RTM release – where we had an assembly called System.CoreEx. In order to simplify the usage of Rx, we decided to fuse this assembly with System.Reactive.</font></p>  <p><font face="Comic Sans MS">However, as portability became an important goal, some things had to be split into a separate assembly (System.Reactive.PlatformServices). At the same time, some use cases didn’t require the full set of Rx operators to be deployed, e.g. because some apps’ sole purpose is to render a sequence on a UI thread. As a result, the core of Rx was split into System.Reactive.Core and System.Reactive.Linq. The former contains core scheduler infrastructure as well as a bunch of base classes, while the latter contains the LINQ query language layer of Rx. Assemblies like System.Reactive.Windows.Threading (for synchronization with the UI in Silverlight, WPF, Windows Phone, or Windows Store apps) only depend on System.Reactive.Core.</font></p>  <p><font face="Comic Sans MS">Thanks to the new Extension SDK model, as well as the increasing popularity of the NuGet package manager, the inclusion of Rx (or any other SDK for that matter) has become largely friction-free, whilst allowing a better internal organization of the API with proper layering in place. From a deployment point of view, an increasing amount of application models rely on packaging mechanisms, e.g. to upload apps to a store or to a cloud platform, taking away the friction of copying many assemblies.</font></p>  <p><font face="Comic Sans MS">After installing the Rx SDK, you’ll find the Extension SDK showing up in the Tools, Extensions and Updates dialog as well:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7455.image_7D1BF1DF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7455.image_5F00_7D1BF1DF.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/2577.image_thumb_480F62AF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/2577.image_5F00_thumb_5F00_480F62AF.png" width="750" height="401" /></a></p> </blockquote>  <p><font face="Comic Sans MS"></font></p>  <h1><font face="Comic Sans MS">Intermezzo – The refactored API surface</font></h1>  <p><font face="Comic Sans MS">From the discussion above, you’ll likely have noticed the refactored API surface with different assembly names than what you were used to in Rx v1.0. As explained briefly, part of this has to do with splitting platform-specific from platform-neutral functionality, which allowed us to support Portable Library for projects that use Rx. The layered cake diagram of Rx, when hosted in a .NET 4.5 “desktop app” process is shown below:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/2148.image_35C69BED.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/2148.image_5F00_35C69BED.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/6371.image_thumb_15AB8F30.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/6371.image_5F00_thumb_5F00_15AB8F30.png" width="702" height="690" /></a></p> </blockquote>  <p><font face="Comic Sans MS">In here, the green assemblies are portable, meaning they don’t rely on specifics of the underlying platform and can be ported to other target platforms as well. In particular, those assemblies are shared with the Rx v2.0 SDK features targeting .NET 4.5 for Windows Store apps. As a result, this common core cannot depend on various capabilities that don’t exist in the intersection of those platforms, such as thread creation, timer, or thread pool APIs.</font></p>  <p><font face="Comic Sans MS">For Rx to achieve optimal performance, it needs to find out about platform-specific capabilities that can be used to enhance performance and provide the best possible experience. This is where the blue assembly on the right comes in. While it’s a separate assembly, various infrastructure-only (i.e. not for public consumption) interfaces provide a very tight integration with the portable subset of Rx. When this so-called “platform enlightenment provider” is not available, the portable core falls back to functionality in the intersection of the targeted portable platforms.</font></p>  <p><font face="Comic Sans MS">The orange assemblies contain bridges to platform-specific APIs such as Windows Forms and WPF (for synchronization with the UI thread), which existed before in Rx v1.0. One notable new assembly is System.Reactive.Runtime.Remoting which contains the .NET Remoting support allowing observable sequences to be exposed as a MarshalByRefObject.</font></p>  <p><font face="Comic Sans MS">When targeting .NET 4.5 for Windows Store apps, there are different platform-specific assemblies, including the blue enlightenment provider that now leverages Windows Runtime functionality, as well as the orange assemblies that provide access to platform-specific APIs such as Windows XAML and various Windows Runtime APIs (such as the new IAsyncOperation&lt;T&gt; interface). On this platform, the picture looks as follows:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7851.image_609EFFFF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7851.image_5F00_609EFFFF.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/5707.image_thumb_4083F342.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/5707.image_5F00_thumb_5F00_4083F342.png" width="702" height="690" /></a></p> </blockquote>  <p><font face="Comic Sans MS">The green assemblies are byte-by-byte identical to the ones used for Rx v2.0 targeting .NET 4.5 “desktop apps”, and are really Portable Library assemblies. When building a Portable Class Library (discussed in a future blog post dedicated to this topic), you’ll directly include those assemblies as well.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">In order to show you the effect of running the same portable core of Rx with different System.Reactive.PlatformServices assemblies, have a look at the two call stacks illustrated below. The first runs a timer-based Rx source generator in a .NET 4.5 Console Application, while the latter runs exactly the same code in a Windows Store app.</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/2654.image_2068E685.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/2654.image_5F00_2068E685.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0511.image_thumb_2E3B2C80.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0511.image_5F00_thumb_5F00_2E3B2C80.png" width="800" height="480" /></a></p> </blockquote>  <p><font face="Comic Sans MS">versus</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/1172.image_0E201FC3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/1172.image_5F00_0E201FC3.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/5466.image_thumb_1BF265BE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/5466.image_5F00_thumb_5F00_1BF265BE.png" width="800" height="414" /></a></p> </blockquote>  <p><font face="Comic Sans MS">As you can see, running the same piece of portable code on different platforms resulted in Rx taking advantage of whatever is the best possible way to run timers for the target platform. Notice the System.Reactive.PlatformServices assembly show up in both runs; this is where the platform-specific Rx functionality sneaked itself in underneath the portable System.Reactive.Core and System.Reactive.Linq assemblies.</font></p>  <p>&#160;</p>  <h1><font face="Comic Sans MS">Option 2 – Installing the Rx assemblies using NuGet</font></h1>  <p><font face="Comic Sans MS">An alternative way of including Rx into your projects is by using <a href="http://www.nuget.org">NuGet</a>. Starting with Visual Studio 2012, you’ll find the Package Manager directly integrated in the IDE experience, so you won’t have to do anything special to use NuGet. For previous releases of Visual Studio, follow the instructions on <a href="http://www.nuget.org">www.nuget.org</a> to download and install the Package Manager.</font></p>  <p><font face="Comic Sans MS">The following package names are commonly used with Reactive Extensions v2.0:</font></p>  <ul>   <li><font face="Comic Sans MS"><strong>Rx-Main </strong>– installs the System.Reactive.Interfaces, System.Reactive.Core, and System.Reactive.Linq assemblies, as well as the project’s target platform enlightenment provider in System.Reactive.PlatformServices.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-Xaml</strong> – installs Rx-Main as well as System.Reactive.Windows.Threading. This package is used for UI synchronization and can be used on any platform that supports XAML, including WPF, Silverlight, Windows Phone, and Windows Store apps.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-WinForms</strong> – installs Rx-Main as well as System.Reactive.Windows.Forms. Similar to the XAML package, this one is used for UI synchronization, but with the Windows Forms message loop instead of the XAML-specific dispatcher. Only available for .NET 4.0 and .NET 4.5 projects.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-Remoting</strong> – installs Rx-Main as well as System.Reactive.Runtime.Remoting. Use this package to get access to the Remotable extension method that can be used to expose an observable sequence over .NET Remoting. Only available on .NET 4.0 and .NET 4.5 projects.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-Providers</strong> – installs Rx-Main as well as System.Reactive.Providers. This is where the Qbservable mirror image of the System.Reactive.Linq API lives, allowing creation of query providers that translate event stream queries from expression trees to target query languages.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-WinRT </strong>– installs Rx-Main as well as System.Reactive.WindowsRuntime. If you need to bridge with the IAsyncInfo family of interfaces in Windows Runtime, this is the additional package you need. Only available for Windows Store apps projects.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-WindowsStore</strong> – equivalent to the Extension SDK, including all assemblies that are tailored for use with Windows Store app projects. Besides the Rx-Xaml package, this also installs Rx-WindowsRuntime, and transitively includes Rx-Main.</font></li>    <li><font face="Comic Sans MS"><strong>Rx-Testing </strong>– provides access to the testing library, used for writing unit tests for reactive queries using virtual time scheduling. Integrates with the test framework in Visual Studio.</font></li> </ul>  <p><font face="Comic Sans MS">In case you need fine grained control over the lowest layers of the Rx stack, you can also use Rx-Interfaces, Rx-Core, Rx-Linq, and Rx-PlatformServices directly. This is only recommended for advanced scenarios where you don’t need enlightenments, for example when writing a library on top of (part of) Rx.</font></p>  <p><font face="Comic Sans MS">The screenshot below shows the experience of using NuGet to include Rx-Xaml in a WPF project. Needless to say, this experience is completely analogous in other project types:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0508.image_14D32946.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0508.image_5F00_14D32946.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7455.image_thumb_46CAC9D0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7455.image_5F00_thumb_5F00_46CAC9D0.png" width="329" height="294" /></a></p> </blockquote>  <p><font face="Comic Sans MS">Search for Rx-Xaml in the search box. Notice the dependencies listed on the right.</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7345.image_3BA13F86.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7345.image_5F00_3BA13F86.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/8424.image_thumb_3482030E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/8424.image_5F00_thumb_5F00_3482030E.png" width="750" height="500" /></a></p> </blockquote>  <p><font face="Comic Sans MS">After resolving and expanding the dependencies, NuGet asks to accept the license. Notice how the Rx-PlatformServices package was included as well, which will ensure Rx performance is optimal for the target platform (here .NET 4.5).</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0005.image_465E96DB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0005.image_5F00_465E96DB.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7851.image_thumb_26438A1E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7851.image_5F00_thumb_5F00_26438A1E.png" width="400" height="450" /></a></p> </blockquote>  <p><font face="Comic Sans MS">Finally, we end up with the required assemblies referenced in the project:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/5707.image_3415D019.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/5707.image_5F00_3415D019.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7026.image_thumb_7F0940E8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7026.image_5F00_thumb_5F00_7F0940E8.png" width="329" height="520" /></a></p> </blockquote>  <p><font face="Comic Sans MS">And you’re ready to start playing with Rx!</font></p>  <p><font face="Comic Sans MS"></font></p>  <h1><font face="Comic Sans MS">Intermezzo – What about the “Experimental Release”?</font></h1>  <p><font face="Comic Sans MS">Historically, we released Rx at two difference cadences. Before hitting v1.0 RTM, we did a lot of experimentation to land the final design for the core API of Rx. During this process, quite a few semi-baked ideas were introduced in the API surface. By the time we release Rx v1.0 RTM, we had to find a place for those APIs that we were still noodling around with. This is what become known as the <a href="http://blogs.msdn.com/b/rxteam/archive/2011/06/29/first-official-release.aspx">“<strong>Experimental Release</strong>”</a>.</font></p>  <p><font face="Comic Sans MS">The model for the Experimental Release was to ship the whole of Rx as a separate “dot” release: v1.0.* was the <strong>Stable Release</strong> and v1.x.* was the Experimental Release. While this approach worked well, it had a number of drawbacks:</font></p>  <ul>   <li><font face="Comic Sans MS">To use the Experimental Release, on had to toss out references to the Stable Release and replace all binaries with experimental ones. Doing so is a painful process, also involving the change of NuGet package names to Rx_Experimental (at the time, there was no semantic versioning).</font></li>    <li><font face="Comic Sans MS">With the above, the support for the product also vanished when using the Experimental Release, even though the experimental functionality was largely additive on top of the stable API surface. The wholesale binary replacement didn’t reflect the additive nature at all.</font></li> </ul>  <p><font face="Comic Sans MS">Because a picture is worth a thousands words, here’s an illustration of this model (omitting a few other experimental releases):</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/5873.image_5EEE342B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/5873.image_5F00_5EEE342B.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/8015.image_thumb_3ED3276E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/8015.image_5F00_thumb_5F00_3ED3276E.png" width="844" height="288" /></a></p> </blockquote>  <p><font face="Comic Sans MS">One of the reasons we went with this approach was to make sure functionality migrating from experimental to stable didn’t break as it moved up. How could that happen? Well, if you have a static method – say for an observable sequence generator method - that’s not meant to be invoked as an extension method, defining it on a class called “ObservableEx” isn’t future proof. As the method moves to stable and gets defined on the “Observable” class instead, this breaks existing code that depended on the experimental functionality. Essentially, splitting a class definition across assemblies isn’t supported.</font></p>  <p><font face="Comic Sans MS">While moving to the Rx v2.0 release, we felt the cost of maintaining two parallel releases far outweighed the name <strong>compatibility</strong> advantage. Especially given the refactored API and assembly surface, the pain of replacing a whole bunch of assemblies (and hence loosing support) feels like non-justifiable. At the same time, it wasn’t at all clear how to position a v2.0 Beta in the grand scheme of things. Would a Beta Release be an experimental one?</font></p>  <p><font face="Comic Sans MS">By the time we shipped Rx v2.0 Beta, it became clear we couldn’t drop the experimental API on the floor, as it’d prevent our cutting edge users to migrate from the latest Experimental Release to the v2.0 Beta release. In the picture below, you can see this transition:</font></p>  <p><font face="Comic Sans MS"></font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/6862.image_33A99D24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/6862.image_5F00_33A99D24.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/5466.image_thumb_65A13DAE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/5466.image_5F00_thumb_5F00_65A13DAE.png" width="614" height="415" /></a></p> </blockquote>  <p><font face="Comic Sans MS">I’m drawing the assemblies in the Beta Release in purple, to emphasize their blended nature of the original stable (blue) and experimental (orange/red) functionality we inherited directly from the latest v1.1 build. Nothing here changed in the Release Candidate stage, where we still had all of the what-used-to-be experimental functionality in the product. We left all of this functionality marked with an <strong>[Experimental] attribute</strong>, so users could keep track of what was still not considered to be fully baked.</font></p>  <blockquote>   <p><font face="Comic Sans MS"><strong>Note:</strong>&#160; For Beta and RC we used NuGet’s <a href="http://docs.nuget.org/docs/Reference/Versioning">semantic versioning</a> feature. We will continue to ship pre-release software using this capability. We consider pre-release builds to be early previews of what we plan to ship for a next major release. Experimental functionality – as discussed below – is more unstable with no promises made yet, and we <u>won’t</u> use the terminology of Beta, Release Candidate, etc. for this going forward.</font></p> </blockquote>  <p><font face="Comic Sans MS">For RTM, we revisited the list of experimental APIs and decided to refactor what was left as truly experimental into a <strong>System.Reactive.Experimental</strong> assembly, which is <u>only</u> available through NuGet as the <strong>Rx-Experimental</strong> package. This allows us to ship frequently as we have new experiments we feel our users may be interested in, without having to worry about complex test matrices for the SDK installer, VSIX packages, etc. The new picture looks as follows:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/0508.image_5A77B364.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0508.image_5F00_5A77B364.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/2727.image_thumb_3A5CA6A7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/2727.image_5F00_thumb_5F00_3A5CA6A7.png" width="846" height="636" /></a></p> </blockquote>  <p><font face="Comic Sans MS">The System.Reactive.Experimental assembly extends all of the Rx APIs (here only showing four assemblies, in reality the experimental library may also extend the capabilities in System.Reactive.Windows.Threading, etc.) and “sits around” all of the stable assemblies as an <strong>additive set of APIs</strong>. You can continue to run the stable product assemblies, combining them with one single experimental one, rather than having to replace all of Rx wholesale. With this, we can provide better support as we know the heart of Rx was unmodified despite the addition of an experimental layer.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">Going forward, the System.Reactive.Experimental assembly will continue to live its own life, moving independently from the stable core of Rx. Today, together with the Rx v2.0 RTM stable set of assemblies, we also shipped the first version of System.Reactive.Experimental. Currently, both have version numbers that are in sync (v2.0.20814), but in the future you’ll see the experimental assembly moving forward independently.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">For a next major release of Rx (no promises on timing in this post, though), some of the experimental functionality may promote to that release’s Beta to make its way to the release’s RTM stage. Once a feature enters the major release train, it’s meant to ship eventually in the stable core. Some experimental stuff may stay experimental forever though.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">So, what about compatibility for API member names? Quite simply, we don’t make any guarantees that functionality in experimental will work as-is when (if ever) it moves to the stable API. For example, extra query operators in System.Reactive.Experimental are defined on a static class called <strong>ObservableEx</strong> (where “Ex” stands for “Experimental” and not “Extensions”), paired with <strong>QbservableEx</strong> for query provider support. Both classes live in the System.Reactive.Linq namespace just like the stable querying API in the System.Reactive.Linq assembly, so all of this functionality blends in nicely. (You can still recognize such operators by looking for the [Experimental] attribute annotation, which could also be used to write tooling to analyze your use of experimental unstable functionality.)</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">Because a lot of those experimental operators are defined as extension methods, an eventual move to the stable assemblies won’t cause breakages. However, for static methods that can only be invoked using static method invocation syntax, there will be a source-level compatibility break, requiring you to substitute uses of ObservableEx for Observable.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">As we prepared for this split, we took the opportunity to promote a few operators to the stable API. One set of such methods are the “imperative operators”, such as “If”, “Case”, “DoWhile”, etc. We’ve seen those being used quite a bit (surprisingly to some extent) and we shipped those in the ROM of Windows Phone 7 before. Considering both those points, and given that their functionality is well-defined and no longer considered “experimental”, we went ahead and polished those (including performance-related work) to put them straight on Observable in the stable API. Not doing so would require them to move to ObservableEx, impairing migration for Windows Phone 7 users from the Rx version in the ROM to the Rx v2.0 release.</font></p> <font face="Comic Sans MS"></font>  <p><font face="Comic Sans MS">The list of experimental APIs for the initial Rx v2.0 System.Reactive.Experimental is rather small:</font></p> <font face="Comic Sans MS"></font>  <ul><font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>Create </strong>for use with iterators (largely redundant due to the introduction of the new async features)</font></li>   <font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>Expand </strong>to recursively expand a sequence (potentially leading to unbounded concurrency if not used carefully)</font></li>   <font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>ForkJoin</strong> which can be replaced with composition of CombineLatest and LastAsync</font></li>   <font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>Let </strong>for trivial observable bindings (not preventing duplication of side-effects, hence quite dangerous)</font></li>   <font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>ManySelect</strong>, the “co-monadic bind operator” which no-one really understood</font></li>   <font face="Comic Sans MS"></font>    <li><font face="Comic Sans MS"><strong>ToListObservable </strong>which was introduced to be paired up with the Create on the top of the list (and in a lot of cases ToList is better anyway)</font></li> </ul>  <p><font face="Comic Sans MS"></font></p>  <p><font face="Comic Sans MS"></font></p>  <h1><font face="Comic Sans MS">Option 3 – Installing the Extension SDK from the Visual Studio Gallery </font></h1>  <p><font face="Comic Sans MS">While discussion Option 1, using the Rx SDK MSI, you already saw the concept of Extension SDKs. One additional way to get the Rx v2.0 Extension SDK for Windows Store apps is to go straight to the <strong>Tools, Extensions and Updates</strong> menu in Visual Studio 2012 and navigate to the Visual Studio Gallery, Tools, Extension SDK section on the left. In there, you’ll find Reactive Extensions listed as well:</font></p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/7345.image_6C544731.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/7345.image_5F00_6C544731.png"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/31/75/metablogapi/2543.image_thumb_65350AB9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/2543.image_5F00_thumb_5F00_65350AB9.png" width="750" height="518" /></a></p> </blockquote>  <p><font face="Comic Sans MS">If you haven’t installed the Rx SDK yet, this window provides you with an option to install the Extension SDK. After completing this step, you can simply include Rx in a Windows Store app project by the steps outlined before: simply go to the Add Reference option and navigate to Windows, Extensions on the left of the Reference Manager dialog. Simply mark the checkbox next to the Reactive Extensions entry and you’re done.</font></p>  <p>&#160;</p>  <p><font face="Comic Sans MS">We hope you’ll enjoy Rx v2.0! Stay tuned to this blog for more posts <span id="regularFont">(in the <a href="http://www.theverge.com/2012/7/4/3136652/cern-scientists-comic-sans-higgs-boson">regular font</a> again, I promise)</span> about various Rx v2.0 features and improvements.</font></p>  <p>&#160;</p>  <p>Bart J.F. De Smet    <br /><em>Senior SDE – Cloud Programmability Team</em></p>]]></content:encoded>
    </item>
    <item>
      <title>Channel 9 Live from TechEd Europe – Ask Bart about Rx and LINQ!</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/channel-9-live-from-teched-europe-ask-bart-about-rx-and-linq</link>
      <pubDate>Wed, 27 Jun 2012 03:11:32 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2012/06/27/channel-9-live-from-teched-europe-ask-bart-about-rx-and-linq/</guid>
      <description><![CDATA[Got a question about Rx or LINQ? Join us on Channel 9 Live, streaming from TechEd Europe in...]]></description>
      <content:encoded><![CDATA[<p>Got a question about Rx or LINQ? Join us on Channel 9 Live, streaming from TechEd Europe in Amsterdam.</p>  <p>For the full schedule, see <a title="https://channel9.msdn.com/Events/Ch9Live/Channel-9-Live-at-Tech-Ed-Europe-2012" href="https://channel9.msdn.com/Events/Ch9Live/Channel-9-Live-at-Tech-Ed-Europe-2012">https://channel9.msdn.com/Events/Ch9Live/Channel-9-Live-at-Tech-Ed-Europe-2012</a>. I’m on at 2:45PM local time, so tweet any questions you have about Rx or LINQ then.</p>]]></content:encoded>
    </item>
    <item>
      <title>“Strong name validation failed” error with Rx v2.0 Release Candidate</title>
      <link>https://docs.microsoft.com/archive/blogs/rxteam/strong-name-validation-failed-error-with-rx-v2-0-release-candidate</link>
      <pubDate>Fri, 22 Jun 2012 05:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Rx team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rxteam/2012/06/22/strong-name-validation-failed-error-with-rx-v2-0-release-candidate/</guid>
      <description><![CDATA[Over the last 24 hours, we’ve received a number of mails and forum messages on an issue with the...]]></description>
      <content:encoded><![CDATA[<p>Over the last 24 hours, we’ve received a number of mails and <a href="http://social.msdn.microsoft.com/Forums/en-US/rx/thread/27269e9d-574d-4407-af8f-2f45693b8f6c">forum messages</a> on an issue with the current Rx v2.0 Release Candidate bits, causing “Strong name validation failed” errors when using the binaries for platforms other than .NET 4.5 and .NET for Metro style apps.</p>  <p>We’ve been able to repro the issue and trace it back to new code signing procedures that have been introduced in Rx v2.0 Release Candidate for .NET 4.5 and .NET for Metro style apps (see <a href="http://msdn.microsoft.com/en-us/library/hh415055(v=VS.110).aspx">Enhanced Strong Naming</a>). Unfortunately, the regression for older platforms went unnoticed due to “strong name verification skip entries” being set up on various build and test agents. We’re working on correcting the issue.</p>  <p>Our sincere apologies for the inconvenience. We’ll update this page as we issue a fix very soon.</p>  <p><strong><font color="#ff0000">Update:</font></strong>&#160; We’ve updated the <a href="http://nuget.org/packages/Rx-Main/2.0.20622-rc"><strong>NuGet packages</strong></a> with a fix. The new package version number is <strong>2.0.20622-rc</strong>.</p>  <p><strong><font color="#ff0000">Update:</font></strong>&#160; The <a href="http://www.microsoft.com/en-us/download/details.aspx?id=30145"><strong>SDK MSI installer</strong></a> has also been updated (publication date <strong>6/22/2012</strong>). It suffices to install the new MSI, which will perform an in-place upgrade.</p>]]></content:encoded>
    </item>
  </channel>
</rss>