Skip to content

Releases: Kotlin/kotlinx.coroutines

1.3.8

16 Jul 21:47
Compare
Choose a tag to compare

New experimental features

  • Added Flow.transformWhile operator (#2065).
  • Replaced scanReduce with runningReduce to be consistent with the Kotlin standard library (#2139).

Bug fixes and improvements

  • Improve user experience for the upcoming coroutines debugger (#2093, #2118, #2131).
  • Debugger no longer retains strong references to the running coroutines (#2129).
  • Fixed race in Flow.asPublisher (#2109).
  • Fixed ensureActive to work in the empty context case to fix IllegalStateException when using flow from suspend fun main (#2044).
  • Fixed a problem with AbortFlowException in the Flow.first operator to avoid erroneous NoSuchElementException (#2051).
  • Fixed JVM dependency on Android annotations (#2075).
  • Removed keep rules mentioning kotlinx.coroutines.android from core module (#2061 by @mkj-gram).
  • Corrected some docs and examples (#2062, #2071, #2076, #2107, #2098, #2127, #2078, #2135).
  • Improved the docs and guide on flow cancellation (#2043).
  • Updated Gradle version to 6.3 (it only affects multiplatform artifacts in this release).

1.3.7

19 May 12:35
1eeed50
Compare
Choose a tag to compare
  • Fixed problem that triggered Android Lint failure (#2004).
  • New Flow.cancellable() operator for cooperative cancellation (#2026).
  • Emissions from flow builder now check cancellation status and are properly cancellable (#2026).
  • New currentCoroutineContext function to use unambiguously in the contexts with CoroutineScope in receiver position (#2026).
  • EXACTLY_ONCE contract support in coroutine builders.
  • Various documentation improvements.

1.3.6

08 May 17:51
583ec6e
Compare
Choose a tag to compare

Flow

  • StateFlow, new primitive for state handling (#1973, #1816, #395). The StateFlow is designed to eventually replace ConflatedBroadcastChannel for state publication scenarios. Please, try it and share your feedback. Note, that Flow-based primitives to publish events will be added later. For events you should continue to either use BroadcastChannel(1), if you put events into the StateFlow, protect them from double-processing with flags.
  • Flow.onEmpty operator is introduced (#1890).
  • Behavioural change in Flow.onCompletion, it is aligned with invokeOnCompletion now and passes CancellationException to its cause parameter (#1693).
  • A lot of Flow operators have left its experimental status and are promoted to stable API.

Other

  • runInterruptible primitive to tie cancellation with thread interruption for blocking calls. Contributed by @jxdabc (#1947).
  • Integration module with RxJava3 is introduced. Contributed by @ZacSweers (#1883)
  • Integration with BlockHound in kotlinx-coroutines-debug module (#1821, #1060).
  • Memory leak in ArrayBroadcastChannel is fixed (#1885).
  • Behavioural change in suspendCancellableCoroutine, cancellation is established before invoking passed block argument (#1671).
  • Debug agent internals are moved into kotlinx-coroutines-core for better integration with IDEA. It should not affect library users and all the redundant code should be properly eliminated with R8.
  • ClassCastException with reusable continuations bug is fixed (#1966).
  • More precise scheduler detection for Executor.asCoroutineDispatcher (#1992).
  • Kotlin updated to 1.3.71.

1.3.5

17 Mar 15:18
3bb3e55
Compare
Choose a tag to compare

Version 1.3.5

  • firstOrNull operators. Contributed by @bradynpoulsen
  • java.time adapters for Flow operators. Contributed by @fvasco
  • kotlin.time.Duration support (#1402). Contributed by @fvasco
  • Memory leak with a mix of reusable and non-reusable continuations is fixed (#1855)
  • DebugProbes are ready for production installation: its performance is increased, the flag to disable creation stacktraces to reduce the footprint is introduced (#1379, #1372)
  • Stacktrace recovery workaround for Android 6.0 and earlier bug (#1866).
  • New integration module: kotlinx-coroutines-jdk9 with adapters for java.util.concurrent.Flow
  • BroadcastChannel.close properly starts lazy coroutine (#1713).
  • kotlinx-coroutines-bom is published without Gradle metadata.
  • Make calls to service loader in reactor integrations optimizable by R8 (#1817)

1.3.4

06 Mar 12:03
d7de5f5
Compare
Choose a tag to compare

Flow

  • Detect missing awaitClose calls in callbackFlow to make it less error-prone when used with callbacks (#1762, #1770). This change makes callbackFlow different from channelFlow
  • ReceiveChannel.asFlow extension is introduced (#1490)
  • Enforce exception transparency invariant in flow builder (#1657)
  • Proper Dispatcher support in Flow reactive integrations (#1765)
  • Batch Subscription.request calls in Flow reactive integration (#766)
  • ObservableValue.asFlow added to JavaFx integration module (#1695)
  • ObservableSource.asFlow added to RxJava2 integration module (#1768)

Other changes

  • kotlinx-coroutines-core is optimized for R8, making it much smaller for Android usages (75 KB for 1.3.4 release)
  • Performance of Dispatchers.Default is improved (#1704, #1706)
  • Kotlin is updated to 1.3.70
  • CoroutineDispatcher and ExecutorCoroutineDispatcher experimental coroutine context keys are introduced (#1805)
  • Performance of various Channel operations is improved (#1565)

1.3.3

13 Dec 12:47
99b78e4
Compare
Choose a tag to compare

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

  • 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.

1.3.2

25 Sep 15:57
7f0da42
Compare
Choose a tag to compare

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.

1.3.1

04 Sep 15:42
Compare
Choose a tag to compare

This is a minor update with various fixes:

  • Flow: Fix recursion in combineTransform<T1, T2, R> (#1466).
  • Fixed race in the Semaphore (#1477).
  • Repaired some of ListenableFuture.kt's cancellation corner cases (#1441).
  • Consistently unwrap exception in slow path of CompletionStage.asDeferred (#1479).
  • Various fixes in documentation (#1496, #1476, #1470, #1468).
  • Various cleanups and additions in tests.

Note: Kotlin/Native artifacts are now published with Gradle metadata format version 1.0, so you will need Gradle version 5.3 or later to use this version of kotlinx.coroutines in your Kotlin/Native project.

1.3.0

23 Aug 12:46
f7335d0
Compare
Choose a tag to compare

Flow

This version is the first stable release of Flow API.

All Flow API not marked with @FlowPreview or @ExperimentalCoroutinesApi annotations are stable and here to stay.
Flow declarations marked with @ExperimentalCoroutinesApi have the same guarantees as regular experimental API.
Please note that API marked with @FlowPreview have weak guarantees on source, binary and semantic compatibility.

Changelog

  • A new guide section about Flow.
  • CoroutineDispatcher.asExecutor extension (#1450).
  • Fixed bug when select statement could report the same exception twice (#1433).
  • Fixed context preservation in flatMapMerge in a case when collected values were immediately emitted to another flow (#1440).
  • Reactive Flow integrations enclosing files are renamed for better interoperability with Java.
  • Default buffer size in all Flow operators is increased to 64.
  • Kotlin updated to 1.3.50.

1.3.0-RC2

09 Aug 18:19
0d7f3fb
Compare
Choose a tag to compare

Flow improvements

  • Operators for UI programming are reworked for the sake of consistency, naming scheme for operator overloads is introduced:

    • combineLatest is deprecated in the favor of combine.
    • combineTransform operator for non-trivial transformations (#1224).
    • Top-level combine and combineTransform overloads for multiple flows (#1262).
    • switchMap is deprecated. flatMapLatest, mapLatest and transformLatest are introduced instead (#1335).
    • collectLatest terminal operator (#1269).
  • Improved cancellation support in flattenMerge (#1392).

  • channelFlow cancellation does not leak to the parent (#1334).

  • Fixed flow invariant enforcement for suspend fun main (#1421).

  • delayEach and delayFlow are deprecated (#1429).

General changes

  • Integration with Reactor context

    • Propagation of the coroutine context of await calls into Mono/Flux builder.
    • Publisher.asFlow propagates coroutine context from collect call to the Publisher.
    • New Flow.asFlux builder.
  • ServiceLoader-code is adjusted to avoid I/O on the Main thread on newer (3.6.0+) Android toolchain.

  • Stacktrace recovery support for minified builds on Android (#1416).

  • Guava version in kotlinx-coroutines-guava updated to 28.0.

  • setTimeout-based JS dispatcher for platforms where process is unavailable (#1404).

  • Native, JS and common modules are added to kotlinx-coroutines-bom.

  • Fixed bug with ignored acquiredPermits in Semaphore (#1423).