|
1 | 1 | # RxJava Releases #
|
2 | 2 |
|
| 3 | +### Version 0.11.0 ([Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.netflix.rxjava%22%20AND%20v%3A%220.11.0%22)) ### |
| 4 | + |
| 5 | +This is a major refactor of rxjava-core and the language adaptors. |
| 6 | + |
| 7 | +Note that there are *breaking changes* in this release. Details are below. |
| 8 | + |
| 9 | +After this refactor it is expected that the API will settle down and allow us to stabilize towards a 1.0 release. |
| 10 | + |
| 11 | +* [Pull 332](https://github.com/Netflix/RxJava/pull/332) Refactor Core to be Statically Typed |
| 12 | + |
| 13 | +RxJava was written from the beginning to target the JVM, not any specific language. |
| 14 | + |
| 15 | +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. |
| 16 | + |
| 17 | +To bridge the rxjava-core written in Java with the various languages a FunctionalLanguageAdaptor was registered at runtime for each language of interest. |
| 18 | + |
| 19 | +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. |
| 20 | + |
| 21 | +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 |
| 22 | + |
| 23 | +This release: |
| 24 | + |
| 25 | +- removes all `Object` overload methods from rxjava-core so it is statically typed |
| 26 | +- removes dynamic FunctionalLanguageAdaptors |
| 27 | +- uses idiomatic approaches for each language adaptor |
| 28 | + - Java core is statically typed and has no knowledge of other languages |
| 29 | + - Scala uses implicits |
| 30 | + - Groovy uses an ExtensionModule |
| 31 | + - Clojure adds a new macro ([NOTE: this requires code changes](https://github.com/Netflix/RxJava/tree/master/language-adaptors/rxjava-clojure#basic-usage)) |
| 32 | + - JRuby has been temporarily disabled (discussing new implementation at https://github.com/Netflix/RxJava/issues/320) |
| 33 | +- language supports continue to be additive |
| 34 | + - 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 |
| 35 | +- deletes deprecated methods |
| 36 | +- deletes redundant static methods on `Observable` that cluttered the API and in some cases caused dynamic languages trouble choosing which method to invoke |
| 37 | +- deletes redundant methods on `Scheduler` that gave dynamic languages a hard time choosing which method to invoke |
| 38 | + |
| 39 | +The benefits of this are: |
| 40 | + |
| 41 | +1) Everything is statically typed so compile-time checks for Java, Scala, etc work correctly |
| 42 | +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. |
| 43 | +3) Interaction from each language should work as expected idiomatically for that language. |
| 44 | + |
| 45 | +Further history on the various discussions and different attempts at solutions can be seen at https://github.com/Netflix/RxJava/pull/304, https://github.com/Netflix/RxJava/issues/204 and https://github.com/Netflix/RxJava/issues/208 |
| 46 | + |
| 47 | + |
3 | 48 | ### Version 0.10.1 ([Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.netflix.rxjava%22%20AND%20v%3A%220.10.1%22)) ###
|
4 | 49 |
|
5 | 50 | A new contrib module for Android: https://github.com/Netflix/RxJava/tree/master/rxjava-contrib/rxjava-android
|
|
0 commit comments