Duals of ranges and reactive D

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Thu May 8 09:50:21 PDT 2014


On 2/27/14, 4:41 AM, Szymon Gatner wrote:
> C#'s IObservable<>/IObserver<> made me think how would a dual [1][2] of
> a range concept look in D. Since D has no equivalent IEnumerable<> (as
> it is no needed thanks to templates) it is only about IEnumerator<> /
> IObserver<> part which relates to a D range.
>
> Ranges/enumerators are models of 'pull' style interface whereas their
> duals represent models of 'push' style enabling reactive programming [3]
> techniques which are really nicely solving issues of asynchronous /
> event - based programming.
>
> I suppose OutptRange is similar in concept, although it has
> 'OnCompleted' / 'OnError' missing.
>
> What do you think? Rx along with LINQ is a really clean solution to the
> problem of asynchronous ranges of values. I think it would be very nice
> to have in D too.
>
> [1] http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf
> [2] http://josemigueltorres.net/index.php/ienumerableiobservable-duality/
> [3]
> https://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx

Continuing an old thread. Seems like the Observable interface pioneered 
by RX would be of interest and good use to D, since observables are the 
dual of ranges and ranges are so useful to us.

Erik Meijer sent me a bunch of informative links about Rx, pasted below. 
I've perused a few and gained an understanding of Rx, and will grab him 
for some more chat later.

I think this is a great project to look into, but currently can't 
dedicate much time to it. I encourage anyone who feels passionate about 
this to grab the torch. Thanks!

* Netflix use case  server:
http://techblog.netflix.com/2013/01/optimizing-netflix-api.html, client: 
http://channel9.msdn.com/posts/YOW-2012-Jafar-Husain-Rx-and-Netflix-A-Match-Made-in-Composable-Asynchrony.

* RxJava: https://github.com/Netflix/RxJava/wiki, have a look at the 
docs 
https://github.com/Netflix/RxJava/wiki/Transforming-Observables#groupby-and-groupbyuntil.

* Increasingly people are providing RX bindings such as
http://slid.es/petermd/eclipsecon2014, http://camel.apache.org/rx.html.

* The Soundcloud folks started using RxJava on Android,
http://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/, 
and now that is catching like wildfire.
http://markhudnall.com/2013/10/15/rxjava-and-android/.

* GitHub is also all in on Rx, they wrote an ObjectiveC port
https://github.com/ReactiveCocoa/ReactiveCocoa.

* Early implementation for PHP https://github.com/asm89/Rx.PHP

* RxJs: https://github.com/Reactive-Extensions/RxJS. There are bindings
for several frameworks 
https://github.com/Reactive-Extensions/RxJS#what-about-my-libraries.

* Internal course for Netflix front-end engineers 
https://github.com/jhusain/learnrx.

* www.introtorx.com a free book written by a guy who has been using Rx 
to make real $$$$ writing high frequency trading algos in London.

* The new lift-based implementation makes it relatively straightforward 
to port an Rx implementation to another language; the main engineering 
effort wrt to pert is how to best handle thread safety. In RxJava we 
tried to do as much lock-free styles as possible, but the downside is 
crazy complex CAS state machines, and in many cases you cannot beat the 
JVM JIT when it comes to using regular locks & synchronized methods.


Andrei


More information about the Digitalmars-d mailing list