-
Notifications
You must be signed in to change notification settings - Fork 7.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Roadmap to 1.0 #1001
Comments
Based on discussion with @headinthebox we will probably move Completed in #1049 |
Migrating rx.joins into a separate contrib module as part of roadmap to 1.0: ReactiveX#1001 (comment) This is being done until the rx.joins API has further time to mature as it is likely to change and we can't make breaking changes any further once we hit 1.0.
Removing deprecated methods/classes. A few still remain to be done before 1.0 but can't be done until all operators are migrated:
|
Cleanup on path to 1.0: ReactiveX#1001 (comment)
Migrating operators to using I will personally be tackling the back pressure prototypes and eventually propose the change via a pull request. This work is being tracked at #1000. |
I'd like to start working on these. Is the Scheduler API stable for now, so any changes to it won't require me to rebase? In addition, could you setup an issue with checkboxes dedicated to each remaining operator? |
Thanks @akarnokd, I really appreciate your help on this. I believe the On the topic of migrating all of the operators, I think there are a few things we should nail down as patterns we want to follow so operator implementations are similar (to ease ongoing maintenance). Things I can think of are:
Perhaps we should create a README inside the What patterns do you think we should be following to the above questions and others you are considering? |
Version 0.18.0 was released with the |
Sorry for the delay, but I needed to implement a few operators to establish a pattern for myself. Ring buffer Locking & Synchronization OnSubscribe vs. Lift |
@akarnokd wrt to backpressure and groing. Shouldn't - if you want to mirror a ringbuffer - the ArrayDequeue or whatever be initalized to the required size upfront so you dont need to grow it? You can preallocate the slots more or less, so you also have less garbage flying around (like with the LinkedList). |
From the JDK source code |
Once we implement #1000 there should be very few places left that require unbounded buffers and we can leverage ring buffers even in places such as |
Thanks for the feedback, I'll take a stab at writing a README to record this for our sake and anyone else getting involved. |
One more question: when we need to handle the case that the source Observable doesn't obey the Rx contract? In my opinion, if |
What use case are you referring to? Operators assume sequential, correct behavior. |
The comment from @akarnokd here: #1115 (comment) |
Answered the specific question on that issue, more generally ... most operators should not need to concern themselves with |
With the release of 0.18 I am not aware of any further major breaking changes beyond the final removal of the last remaining deprecated signatures (such as There are a few operators (such as The goal is that within a few months we can have a stable API and release 1.0 and let the 1.x version live for a long time without further breaking changes. |
@benjchristensen I'm happy to help with any Gradle related stuff. |
Thanks @alkemist. I don't know enough quite yet to know what to ask for, but once I do I'll update here. |
For all contributors involved in this ... for a variety of reasons I'd really like to push towards having a 1.0 Release Candidate with the API locked down and all major features/bugs resolved by July 1st. This is only ~5 weeks away, but I intend on focusing as much as I can towards making this happen. Once we hit the 1.0RC phase, I expect we'll stay on RC for a while (month or two?) to ensure testing so that 1.0 Final can be considered battle tested. Issue #1000 is the biggest hurdle to achieving this as all of the other issues seem to almost be resolved. As we approach 1.0RC we will also split the major sub-modules into their own top-level projects. I'd appreciate input on this. |
A few issues with rxjava-core is covered by PRs and there seems to be things not properly exposed in Scala, but otherwise the the current standing is okay. I don't know about the standing with the new computation scheduler. However, backpressure is a huge undertaking; most of us need to learn a new paradigm and way of coding, and it will certainly affect all operators. Even if I had the time, I couldn't make it under a month, not to mention, in a battle-ready fashion. |
We can let RxScala continue pre 1.0 if we want? Our intent is to split it out.
I think we can get this stuff solved fairly soon and then let it bake for a while. None of that requires API changes though.
It is indeed non-trivial but we've done enough prototyping that it's not completely unknown.
Moved over to #1000 (comment) for discussion instead of hijacking this issue with a long discussion on backpressure. |
Scala bindings are just catchup, nothing fundamental, but I think it is fine to start separating the various bindings so they can move at their own pace such that we can stabilize the core. |
I think I should be able to finish the remaining methods of RxScala in 1-2 weeks. |
Removing all deprecated methods and types for 1.0 ReactiveX#1001
Deprecations are being removed in #1621 |
Before locking the API down, it might worth considering replacing |
I'd rather not replace It is very rare to be working with |
The consistency of having |
Migrating rx.joins into a separate contrib module as part of roadmap to 1.0: ReactiveX/RxJava#1001 (comment) This is being done until the rx.joins API has further time to mature as it is likely to change and we can't make breaking changes any further once we hit 1.0.
First 1.0 release candidate has been released: https://github.com/ReactiveX/RxJava/releases/tag/v1.0.0-rc.1 |
@benjchristensen will 1.0 include reactive stream adapters? |
I just created the project for it: https://github.com/ReactiveX/RxJavaReactiveStreams It will be released as artifact rxjava-reactive-streams and depend on rxjava-1.+ and reactive-streams-* and have its own release cycle so it can rev however it needs to separate from RxJava itself. I'm working on getting RxJava 1.0.0 Final and getting the many separated projects building again so likely won't focus on this adapter until after that. |
Great thanks, I’ll do my best to get it started. |
My intent is to have a class such as RxReactiveStreams with methods on it converting in both directions. |
As part of the move to 1.0 I'm considering moving the Anyone have a reason not to do this? /cc @headinthebox |
Status Update: September 19, 2014Build and Release: I have been a bottleneck to getting all the split projects released with the new Maven Central io.reactivex IDs using the new build process. Theoretically most projects should be able to get working quickly now that RxJava itself is building and releasing on the new process. The RxScala and possibly RxAndroid projects may have some extra work to achieve their goals. Release Candidates: It seems there will need to be some further time on release candidates due to the backlog of items we have accrued as shown here: https://github.com/ReactiveX/RxJava/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0 There is also one blocker affecting Netflix production that is not yet identified enough to have an issue opened. We found it while upgrading from 0.19 to 0.20. Canary tests showed that 0.20 worked, but after a longer period of testing we experienced a very hard to identity bug and the symptoms go away when we rollback to 0.19. Due to this and the other open issues linked to above I am not yet confident calling 1.0 "Final" as I want the 1.0 release to mean it is stable and can be trusted, even though we will surely have 1.x.y releases with further bug fixes, features and improvements. My personal time the past couple weeks has been pulled in different directions as well so I have caused things to slow down. I hope this won't last much longer so I can help get through the final work for 1.0 Final. |
Like! |
RxAndroid has been released on the new io.reactivex artifact: https://github.com/ReactiveX/RxAndroid/releases/tag/v0.21.0 |
@headinthebox and I are targeting November 18th as the release date for RxJava 1.0 Final. All blocking issues appear to be resolved as of 1.0.0-rc.5. The next month will be for other bug fixes found while using RxJava 1.0 release candidates and to provide time for testing and usage. If anyone has critical bugs or problems with the public API (method or class signatures) please report them now. |
1.0.0-rc.10 is released with all known bugs fixed and API changes made. There are new features and backpressure work that will continue in 1.0.x (https://github.com/ReactiveX/RxJava/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0.x) but unless we find something we've missed in the next week 1.0.0-rc.10 is either what will release as 1.0.0 or very close to it. Please provide feedback on either: a) critical bugs I would appreciate you trying 1.0.0-rc.10 in your apps to make sure it works. Thank you. |
I think we're ready for 1.0 Final as of 1.0.0-rc.11. Does anyone know of any reason not to release 1.0 Final on Tuesday? There are obviously still bugs, performance improvements we can pursue and functionality to explore and add, but we need to stabilize and commit to the API at some point, so all of that will come in future releases. Is there anything more that must be done before 1.0 Final? Here are the near-term milestones: |
/cc @zsxwing @samuelgruetter @akarnokd @jmhofer @mairbek @mttkay @mattrjacobs @davidmoten @jbripley @abersnaze @JakeWharton @headinthebox @daschl and anyone else watching this project. Any reason not to release 1.0 Final in 3 days on Tuesday, November 18th? Here is the Javadoc with the public API as of 1.0.0-rc.11 http://reactivex.io/RxJava/javadoc/rx/Observable.html |
No objections from my side - we'll then already ship 1.0.0 with 2.0.2 first werk of december (currently 2.0.1 is on rc9) Awesome work from all involved :) and special kudos to you @benjchristensen of course |
+1 On Sat Nov 15 2014 at 10:29:11 PM Michael Nitschinger <
|
I think the merge bug needs to be resolved, but otherwise the release can proceed. |
|
+1. Tested RxScala with rc12. |
@YannRobert @akarnokd #1886 was included in rc.12 and will be part of 1.0 I'm proceeding to release 1.0.0 |
I want everyone to know where we're heading and what's left before we hit 1.0.
From the beginning we have allowed ourselves to do breaking changes on each 0.x release as we were aware that the design was not finished when we started this project. We are getting close to being done. Our goal is to release 1.0 in the coming months after stabilizing the API so that it can be relied upon without breaking every couple months.
Project Structure
When we hit 1.0 we intend on splitting out the language adaptors into their own top-level projects such as RxScala, RxClojure, RxGroovy, RxKotlin, RxJRuby etc.
This will allow each project to iterate as needed at their own pace, especially since some will need to continue iterating while the RxJava core stabilizes. For example, if RxScala needs breaking changes it can bump it's major version while RxJava does not. This is particularly important to RxScala for handling changes such as Scala 2.10 -> 2.11 -> 2.12 etc.
Major contrib modules will also be moved out, such as RxAndroid which also needs its own life-cycle.
Outstanding Work
The major items of work to be finished before 1.0 are:
Backpressure: Backpressure #1000[Completed]Serialization Behavior: Serialization Behavior #998[Completed in newmerge
implementation]Scheduler API: Proposed Scheduler Interface Change for 0.18 (yes, again) #997CompletedRemove all deprecated methods/classes[Completed] #1053 #1621Finish migrating all operators to using[Completed]lift
and chaining theSubscription
viaSubscriber
(current priority)The primary goal is to nail down the public API. New functionality can come in 1.1, 1.2, etc. The secondary goal is for all operators to work as advertised (regarding unsubscribe, back pressure and non-blocking). There will always be bugs, that's why 1.x.y will still be active after release, but the desire is to not need to ship 2.x soon after 1.x as this is a low level library that once entrenched becomes hard to migrate (we create significant pain at Netflix on each 0.x release).
Going Forward
Please comment if you feel there are other critical things to achieve before 1.0. The fastest way to getting us to 1.0 is helping us achieve the work stated above.
The text was updated successfully, but these errors were encountered: