kotlinx.coroutines v1.3.3 Release Notes

Release Date: 2019-12-13 // about 2 months ago
  • Flow

    • 🐎 Flow.take performance is significantly improved (#1538).
    • 🔀 Flow.merge operator (#1491).
    • Reactive Flow adapters are promoted to stable API (#1549).
    • 🐎 Reusable cancellable continuations were introduced that improved the performance of various flow operators and iteration over channels (#1534).
    • 🛠 Fixed interaction of multiple flows with take operator (#1610).
    • 👍 Throw NoSuchElementException instead of UnsupportedOperationException for empty Flow in reduce operator (#1659).
    • onCompletion now rethrows downstream exceptions on emit attempt (#1654).
    • 👍 Allow non-emitting withContext from flow builder (#1616).

    Debugging

    • ⚡️ DebugProbes.dumpCoroutines is optimized to be able to print the 6-digit number of coroutines (#1535).
    • Properly capture unstarted lazy coroutines in debugger (#1544).
    • ✅ Capture coroutines launched from within a test constructor with CoroutinesTimeout test rule (#1542).
    • 👷 Stacktraces of Job-related coroutine machinery are shortened and prettified (#1574).
    • Stacktrace recovery unification that should provide a consistent experience recover of stacktrace (#1597).
    • 👍 Stacktrace recovery for withTimeout is supported (#1625).
    • 👻 Do not recover exception with a single String parameter constructor that is not a message (#1631).

    Other features

    • 0️⃣ Dispatchers.Default and Dispatchers.IO rework: CPU consumption is significantly lower, predictable idle threads termination (#840, #1046, #1286).
    • Avoid ServiceLoader for loading Dispatchers.Main (#1572, #1557, #878, #1606).
    • Consistently handle undeliverable exceptions in RxJava and Reactor integrations (#252, #1614).
    • 👍 yield support in immediate dispatchers (#1474).
    • CompletableDeferred.completeWith(result: Result<T>) is introduced.
    • ➕ Added support for tvOS and watchOS-based Native targets (#1596).

    🐛 Bug fixes and improvements

    • ⚡️ Kotlin version is updated to 1.3.61.
    • CoroutineDispatcher.isDispatchNeeded is promoted to stable API (#1014).
    • 🛠 Livelock and stackoverflows in mutual select expressions are fixed (#1411, #504).
    • Properly handle null values in ListenableFuture integration (#1510).
    • Making ReceiveChannel.cancel linearizability-friendly.
    • Linearizability of Channel.close in a complex contended cases (#1419).
    • 🛠 ArrayChannel.isBufferEmpty atomicity is fixed (#1526).
    • 📚 Various documentation improvements.
    • ⬇️ Reduced bytecode size of kotlinx-coroutines-core, reduced size of minified dex when using basic functionality of kotlinx-coroutines.

Previous changes from v1.3.2

  • 🚀 This is a maintenance release that does not include any new features or bug fixes.

    • Reactive integrations for Flow are promoted to stable API.
    • 🗄 Obsolete reactive API is deprecated.
    • 🗄 Deprecation level for API deprecated in 1.3.0 is increased.
    • 📚 Various documentation improvements.