{"action":"created","issue":{"url":"https://api.github.com/repos/google/agera/issues/20","repository_url":"https://api.github.com/repos/google/agera","labels_url":"https://api.github.com/repos/google/agera/issues/20/labels{/name}","comments_url":"https://api.github.com/repos/google/agera/issues/20/comments","events_url":"https://api.github.com/repos/google/agera/issues/20/events","html_url":"https://github.com/google/agera/issues/20","id":149416093,"number":20,"title":"Question: what's the relation to RxJava?","user":{"login":"Konrad-Morawski","id":7110368,"avatar_url":"https://avatars.githubusercontent.com/u/7110368?v=3","gravatar_id":"","url":"https://api.github.com/users/Konrad-Morawski","html_url":"https://github.com/Konrad-Morawski","followers_url":"https://api.github.com/users/Konrad-Morawski/followers","following_url":"https://api.github.com/users/Konrad-Morawski/following{/other_user}","gists_url":"https://api.github.com/users/Konrad-Morawski/gists{/gist_id}","starred_url":"https://api.github.com/users/Konrad-Morawski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Konrad-Morawski/subscriptions","organizations_url":"https://api.github.com/users/Konrad-Morawski/orgs","repos_url":"https://api.github.com/users/Konrad-Morawski/repos","events_url":"https://api.github.com/users/Konrad-Morawski/events{/privacy}","received_events_url":"https://api.github.com/users/Konrad-Morawski/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":14,"created_at":"2016-04-19T10:24:35Z","updated_at":"2016-04-19T16:32:57Z","closed_at":null,"body":"This looks like a very interesting proposition. \r\n\r\nMy question - it's quite an elephant in the room, I should think - is what's the relation between this library and RxJava? \r\n\r\nIsn't it RxJava reinvented? Is it supposed to be more light-weight? Complementary? Or just inspired?\r\n\r\nNowhere do your docs seem to even acknowledge RxJava's existence (I'll stand corrected if I overlooked something), even though you're clearly adopting the same paradigm.\r\n\r\nI'd be very grateful if you were willing to shed some light on this (disclaimer: I'm not affiliated with RxJava nor its creators; just another Android dev on the lookout for the new shiny thing)."},"comment":{"url":"https://api.github.com/repos/google/agera/issues/comments/212007539","html_url":"https://github.com/google/agera/issues/20#issuecomment-212007539","issue_url":"https://api.github.com/repos/google/agera/issues/20","id":212007539,"user":{"login":"akarnokd","id":1269832,"avatar_url":"https://avatars.githubusercontent.com/u/1269832?v=3","gravatar_id":"","url":"https://api.github.com/users/akarnokd","html_url":"https://github.com/akarnokd","followers_url":"https://api.github.com/users/akarnokd/followers","following_url":"https://api.github.com/users/akarnokd/following{/other_user}","gists_url":"https://api.github.com/users/akarnokd/gists{/gist_id}","starred_url":"https://api.github.com/users/akarnokd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akarnokd/subscriptions","organizations_url":"https://api.github.com/users/akarnokd/orgs","repos_url":"https://api.github.com/users/akarnokd/repos","events_url":"https://api.github.com/users/akarnokd/events{/privacy}","received_events_url":"https://api.github.com/users/akarnokd/received_events","type":"User","site_admin":false},"created_at":"2016-04-19T16:32:56Z","updated_at":"2016-04-19T16:32:56Z","body":"I've glanced over the documentation and my impression is that  Agera is almost a 1st generation reactive library with strong 0th generation ties. To put it in perspective: \r\n\r\n  - 0th generation is when you have `addListener`/`removeListener` and `update()` with or without an actual value. `java.util.Observable` and most GUI frameworks can be considered 0th gen. It is possible, although generally cumbersome to make a composable, native library out of them.\r\n  - 1st generation is what the Microsoft folks invented back in ~2009. It's a step upwards with straightforward architecture and great composability. However, their concept has some shortcomings discovered in late ~2013. Example: Rx.NET, Reactive4Java\r\n  - 2nd generation is what RxJava 1.x currently is. It fixes the synchronous cancellation problem, introduced some optional backpressure and the notion of lifting into a chain.\r\n  - 3rd generation is the Reactive-Streams initiative with fleshed out, standardized APIs, designed ~2015. The architecture is reactive-push with backpressure. Examples are Reactor 1, 2 and Akka-Streams.\r\n  - 4th generation is the cutting edge of the field. It builds on Reactive-Streams and adds an adaptive push-pull option, in the form of operator-fusion, that allows both efficient synchronous and asynchronous use. Example is Reactor 2.5. (RxJava 2.x is in between 3 and 4 right now).\r\n\r\nI know this is an optional library, don't use it if you don't like it. Don't get me wrong, it's not about how many operators you have, how strong do you inline your reactive library with the underlying platform or that you don't care about backpressure in GUI. It's about the architectural experiences, pitfalls and possibilities of the Rx family that maybe could have helped/inspired this library. If Agera were based on Reactive-Streams or designed in spirit of it, I'd say okay, why not.\r\n\r\nAs for the original questions:\r\n\r\n> Isn't it RxJava reinvented? \r\n\r\nNo.\r\n\r\n> Is it supposed to be more light-weight? \r\n\r\nSeems so API-vise, not sure about performance-vise\r\n\r\n> Complementary? \r\n\r\nAs complementary as addListener-based APIs are in general. The name conflict of `Observable` and `Supplier` may be of some inconvenience.\r\n\r\n> Or just inspired?\r\n\r\nApparently not inspired by Rx.\r\n\r\n> Google Play Movies and we like to open source code whenever possible\r\n\r\nIn Netflix' footsteps I see. You see, they got significant help along the way..."}}