Skip to content

Latest commit

 

History

History
320 lines (215 loc) · 21.4 KB

CHANGES.md

File metadata and controls

320 lines (215 loc) · 21.4 KB

RxJava Releases

Version 0.13.2 (Maven Central)

  • Pull 389 Scala Adaptor Improvements
  • Pull 382 Removing deprecated RxImplicits from rxjava-scala
  • Pull 381 Operator: mapWithIndex
  • Pull 380 Implemented distinct and distinctUntilChanged variants using a comparator
  • Pull 379 Make interval work with multiple subscribers

Version 0.13.1 (Maven Central)

This release includes a new Scala adaptor as part of the effort from issue ReactiveX#336 pursuing idiomatic Scala support.

Version 0.13.0 (Maven Central)

This release has some minor changes related to varargs that could break backwards compatibility if directly passing arrays but for most this release should not be breaking.

  • Pull 354 Operators: Count, Sum, Average
  • Pull 355 Operators: skipWhile and skipWhileWithIndex
  • Pull 356 Operator: Interval
  • Pull 357 Operators: first and firstOrDefault
  • Pull 368 Operators: Throttle and Debounce
  • Pull 371 Operator: Retry
  • Pull 370 Change zip method signature from Collection to Iterable
  • Pull 369 Generics Improvements: co/contra-variance
  • Pull 361 Remove use of varargs from API

Version 0.12.2 (Maven Central)

  • Pull 352 Groovy Language Adaptor: Add Func5-9 and N to the wrapper

Version 0.12.1 (Maven Central)

  • Pull 350 Swing module enhancements
  • Pull 351 Fix Observable.window static/instance bug

Version 0.12.0 (Maven Central)

This version adds to the static typing changes in 0.11 and adds covariant/contravariant typing via super/extends generics.

Additional cleanup was done, particularly related to BlockingObservable. Also the window operator was added.

The largest breaking change is that Observable.create now accepts an OnSubscribeFunc rather than a Func1.

This means that instead of this:

public static <T> Observable<T> create(Func1<? super Observer<? super T>, ? extends Subscription> func)

it is now:

public static <T> Observable<T> create(OnSubscribeFunc<T> func)

This was done to simplify the usage of Observable.create which was already verbose but made far worse by the ? super generics.

For example, instead of writing this:

Observable.create(new Func1<Observer<? super SomeType>, Subscription>() {
   /// body here
}

it is now written as:

Observable.create(new OnSubscribeFunc<SomeType>() {
   /// body here
}
  • Pull 343 Covariant Support with super/extends and OnSubscribeFunc as type for Observable.create
  • Pull 337 Operator: window
  • Pull 348 Rename switchDo to switchOnNext (deprecate switchDo for eventual deletion)
  • Pull 348 Delete switchDo instance method in preference for static
  • Pull 346 Remove duplicate static methods from BlockingObservable
  • Pull 346 BlockingObservable no longer extends from Observable
  • Pull 345 Remove unnecessary constructor from Observable

Version 0.11.2 (Maven Central)

Version 0.11.1 (Maven Central)

  • Pull 325 Clojure: Preserve metadata on fn and action macros

Version 0.11.0 (Maven Central)

This is a major refactor of rxjava-core and the language adaptors.

Note that there are breaking changes in this release. Details are below.

After this refactor it is expected that the API will settle down and allow us to stabilize towards a 1.0 release.

  • Pull 332 Refactor Core to be Statically Typed

RxJava was written from the beginning to target the JVM, not any specific language.

As a side-effect of Java not having lambdas/clojures yet (and other considerations), Netflix used dynamic languages with it predominantly for the year of its existence prior to open sourcing.

To bridge the rxjava-core written in Java with the various languages a FunctionalLanguageAdaptor was registered at runtime for each language of interest.

To enable these language adaptors methods are overloaded with Object in the API since Object is the only super-type that works across all languages for their various implementations of lambdas and closures.

This downside of this has been that it breaks static typing for Java, Scala and other statically-typed languages. More can be read on this issue and discussion of the subject here: https://groups.google.com/forum/#!topic/rxjava/bVZoKSsb1-o

This release:

  • removes all Object overload methods from rxjava-core so it is statically typed
  • removes dynamic FunctionalLanguageAdaptors
  • uses idiomatic approaches for each language adaptor
    • Java core is statically typed and has no knowledge of other languages
    • Scala uses implicits
    • Groovy uses an ExtensionModule
    • Clojure adds a new macro (NOTE: this requires code changes)
    • JRuby has been temporarily disabled (discussing new implementation at ReactiveX#320)
  • language supports continue to be additive
    • the rxjava-core will always be required and then whichever language modules are desired such as rxjava-scala, rxjava-clojure, rxjava-groovy are added to the classpath
  • deletes deprecated methods
  • deletes redundant static methods on Observable that cluttered the API and in some cases caused dynamic languages trouble choosing which method to invoke
  • deletes redundant methods on Scheduler that gave dynamic languages a hard time choosing which method to invoke

The benefits of this are:

  1. Everything is statically typed so compile-time checks for Java, Scala, etc work correctly
  2. Method dispatch is now done via native Java bytecode using types rather than going via Object which then has to do a lookup in a map. Memoization helped with the performance but each method invocation still required looking in a map for the correct adaptor. With this approach the appropriate methods will be compiled into the rx.Observable class to correctly invoke the right adaptor without lookups.
  3. Interaction from each language should work as expected idiomatically for that language.

Further history on the various discussions and different attempts at solutions can be seen at ReactiveX#304, ReactiveX#204 and ReactiveX#208

Version 0.10.1 (Maven Central)

A new contrib module for Android: https://github.com/Netflix/RxJava/tree/master/rxjava-contrib/rxjava-android

  • Pull 318 rxjava-android module with Android Schedulers

Version 0.10.0 (Maven Central)

This release includes a breaking change as it changes onError(Exception) to onError(Throwable). This decision was made via discussion at ReactiveX#296.

Any statically-typed Observer implementations with onError(Exception) will need to be updated to onError(Throwable) when moving to this version.

  • Pull 312 Fix for OperatorOnErrorResumeNextViaObservable and async Resume
  • Pull 314 Map Error Handling
  • Pull 315 Change onError(Exception) to onError(Throwable) - Issue #296

Version 0.9.2 (Maven Central)

  • Pull 308 Ensure now() is always updated in TestScheduler.advanceTo/By
  • Pull 281 Operator: Buffer

Version 0.9.1 (Maven Central)

Version 0.9.0 (Maven Central)

This release includes breaking changes that move all blocking operators (such as single, last, forEach) to BlockingObservable.

This means Observable has only non-blocking operators on it. The blocking operators can now be accessed via .toBlockingObservable() or BlockingObservable.from(observable).

Notes and link to the discussion of this change can be found at ReactiveX#272.

  • Pull 272 Move blocking operators into BlockingObservable
  • Pull 273 Fix Concat (make non-blocking)
  • Issue 13 Operator: Switch
  • Pull 274 Remove SLF4J dependency (RxJava is now a single jar with no dependencies)

Version 0.8.4 (Maven Central)

  • Pull 269 (Really) Fix concurrency bug in ScheduledObserver

Version 0.8.3 (Maven Central)

  • Pull 268 Fix concurrency bug in ScheduledObserver

Version 0.8.2 (Maven Central)

  • Issue 74 Operator: Sample
  • Issue 93 Operator: Timestamp
  • Pull 253 Fix multiple subscription bug on operation filter
  • Pull 254 SwingScheduler (new rxjava-swing module)
  • Pull 256 BehaviorSubject
  • Pull 257 Improved scan, reduce, aggregate
  • Pull 262 SwingObservable (new rxjava-swing module)
  • Pull 264 Publish, Replay and Cache Operators

Version 0.8.1 (Maven Central)

Version 0.8.0 (Maven Central)

This is a breaking (non-backwards compatible) release that updates the Scheduler implementation released in 0.7.0.

See ReactiveX#19 for background, discussion and status of Schedulers.

It is believed that the public signatures of Scheduler and related objects is now stabilized but ongoing feedback and review by the community could still result in changes.

Version 0.7.0 (Maven Central)

This release adds the foundations of Rx Schedulers.

There are still open questions, portions not implemented and assuredly bugs and behavior we didn't understand and thus implemented wrong.

Please provide bug reports, pull requests or feedback to help us on the road to version 1.0 and get schedulers implemented correctly.

See ReactiveX#19 (comment) for some known open questions that we could use help answering.

Version 0.6.3 (Maven Central)

  • Pull 224 RxJavaObservableExecutionHook

Version 0.6.2 (Maven Central)

  • Issue 101 Operator: Where (alias to filter)
  • Pull 197 TakeWhile observables do not properly complete
  • Issue 21 Operator: All
  • Pull 206 Observable.toList breaks with multiple subscribers
  • Issue 29 Operator: CombineLatest
  • Issue 211 Remove use of JSR 305 and dependency on com.google.code.findbugs
  • Pull 212 Operation take leaks errors
  • Pull 220 TakeWhile protect calls to predicate
  • Pull 221 Error Handling Improvements - User Provided Observers/Functions
  • Pull 201 Synchronize Observer on OperationMerge
  • Issue 43 Operator: Finally

Version 0.6.1 (Maven Central)

  • Pull 190 Fix generics issue with materialize() that prevented chaining

Version 0.6.0 (Maven Central)

  • Issue 154 Add OSGi manifest headers
  • Issue 173 Subscription Utilities and Default Implementations
  • Pull 184 Convert 'last' from non-blocking to blocking to match Rx.Net (see Issue 57)

NOTE: This is a version bump from 0.5 to 0.6 because Issue 173 and Pull 184 include breaking changes.

These changes are being done in the goal of matching the Rx.Net implementation so breaking changes will be made prior to 1.0 on 0.x releases if necessary.

It was found that the last() operator was implemented incorrectly (non-blocking instead of blocking) so any use of last() on version 0.5.x should be changed to use takeLast(1). Since the return type needed to change this could not be done via a deprecation.

Also removed were the Observable.createSubscription/Observable.noOpSubscription methods which are now on the rx.subscriptions.Subscriptions utility class as Subscriptions.create/Subscriptions.empty. These methods could have been deprecated rather than removed but since another breaking change was being done they were just cleanly changed as part of the pre-1.0 process.

Version 0.5.5 (Maven Central)

Version 0.5.4 (Maven Central)

Version 0.5.3 (Maven Central)

Version 0.5.2 (Maven Central)

Version 0.5.1 (Maven Central)

  • variety of code cleanup commits
  • Pull 132 Broke rxjava-examples module into each language-adaptor module
  • Issue 118 & Issue 119 Cleaned up Javadocs still referencing internal Netflix paths
  • Javadoc and README changes

Version 0.5.0 (Maven Central)