Skip to content

Commit 203973b

Browse files
Version 0.11.0
1 parent 177a77c commit 203973b

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

CHANGES.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,50 @@
11
# RxJava Releases #
22

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+
348
### 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)) ###
449

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

0 commit comments

Comments
 (0)