Releases: Kotlin/kotlinx.coroutines
Releases · Kotlin/kotlinx.coroutines
1.8.0-RC
- Implement the library for the Web Assembly (Wasm) for JavaScript (#3713). Thanks @igoriakovlev!
- On Android, ensure that
Dispatchers.Main != Dispatchers.Main.immediate(#3545, #3963). kotlinx-coroutines-debugis published with the incorrect Java 9 module info (#3944).- Major Kotlin version update: was 1.8.20, became 1.9.21.
kotlinx-coroutines-test: set the default timeout ofrunTestto 60 seconds, added the ability to configure it on the JVM with thekotlinx.coroutines.test.default_timeout=10s(#3800).kotlinx-coroutines-test: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#3800).delay(Duration)rounds nanoseconds up to whole milliseconds and not down (#3920). Thanks @kevincianfarini!Dispatchers.Defaultand the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#3832).- It is guaranteed that by the time
SharedFlow.collectsuspends for the first time, it's registered as a subscriber for thatSharedFlow(#3885). Before, it was also true, but not documented. - Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code (#3954).
- Added a workaround for miscompilation of
withLockon JS (#3881). Thanks @CLOVIS-AI! - Small tweaks and documentation fixes.
1.7.3
1.7.2
Bug fixes and improvements
- Coroutines debugger no longer keeps track of coroutines with empty coroutine context (#3782).
CopyableThreadContextElementnow properly copies an element when crossing the coroutine boundary inflowOn(#3787). Thanks @wanyingd1996!- Coroutine timeouts no longer prevent K/N
newSingleThreadContextfrom closing (#3768). - A non-linearizability in
MutexduringtryLock/unlocksequence with owners is fixed (#3745). - Atomicfu version is updated to 0.21.0.
1.7.1
1.7.0
Core API significant improvements
- New
Channelimplementation with significant performance improvements across the API (#3621). - New
selectoperator implementation: faster, more lightweight, and more robust (#3020). MutexandSemaphorenow share the same underlying data structure (#3020).Dispatchers.IOis added to K/N (#3205)newFixedThreadPoolandDispatchers.Defaultimplementations on K/N were wholly rewritten to support graceful growth under load (#3595).
kotlinx-coroutines-testrework:- Add the
timeoutparameter torunTestfor the whole-test timeout, 10 seconds by default (#3270). This replaces the configuration of quiescence timeouts, which is now deprecated (#3603). - The
withTimeoutexception messages indicate if the timeout used the virtual time (#3588). TestCoroutineScheduler,runTest, andTestScopeAPI are promoted to stable (#3622).runTestnow also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine (#1205).
- Add the
Breaking changes
- Old K/N memory model is no longer supported (#3375).
- New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates (#3393).
kotlinx-coroutines-coreandkotlinx-coroutines-jdk8artifacts were merged into a single artifact (#3268).- Artificial stackframes in stacktrace recovery no longer contain the
\bsymbol and are now navigable in IDE and supplied with proper documentation (#2291). CoroutineContext.isActivereturnstruefor contexts without any job in them (#3300).
Bug fixes and improvements
- Kotlin version is updated to 1.8.20
- Atomicfu version is updated to 0.20.2.
JavaFxversion is updated to 17.0.2 inkotlinx-coroutines-javafx(#3671)..- JPMS is supported (#2237). Thanks @lion7!
BroadcastChanneland all the corresponding API are deprecated (#2680).- Added all supported K/N targets (#3601, #812, #855).
- K/N
Dispatchers.Defaultis backed by the number of threads equal to the number of available cores (#3366). - Fixed an issue where some coroutines' internal exceptions were not properly serializable (#3328).
- Introduced
Job.parentAPI (#3201). - Fixed a bug when
TestSchedulerleaked cancelled jobs (#3398). TestScope.timeSourcenow provides comparable time marks (#3617). Thanks @hfhbd!- Fixed an issue when cancelled
withTimeouthandles were preserved in JS runtime (#3440). - Ensure
awaitFrameonly awaits a single frame when used from the main looper (#3432). Thanks @pablobaxter! - Obsolete
Class-Pathattribute was removed fromkotlinx-coroutines-debug.jarmanifest (#3361). - Fixed a bug when
updateThreadContextoperated on the parent context (#3411). - Added new
Flow.filterIsInstanceextension (#3240). Dispatchers.Defaultthread name prefixes are now configurable with system property (#3231).- Added
Flow.timeoutoperator as@FlowPreview(#2624). Thanks @pablobaxter! - Improved the performance of the
futurebuilder in case of exceptions (#3475). Thanks @He-Pin! Mono.awaitSingleOrNullnow waits for theonCompletesignal (#3487).Channel.isClosedForSendandChannel.isClosedForReceiveare promoted from experimental to delicate (#3448).- Fixed a data race in native
EventLoop(#3547). Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)no longer creates an additional wrapper (#3442). Thanks @dovchinnikov!- Various
@FlowPreviewand@ExperimentalCoroutinesApiare promoted to experimental and stable respectively (#3542, #3097, #3548). - Performance improvements in
Dispatchers.DefaultandDispatchers.IO(#3416, #3418). - Fixed a bug when internal
suspendCancellableCoroutineReusablemight have hanged (#3613). - Introduced internal API to process events in the current system dispatcher (#3439).
- Global
CoroutineExceptionHandleris no longer invoked in case of unprocessedfuturefailure (#3452). - Performance improvements and reduced thread-local pressure for the
withContextoperator (#3592). - Improved performance of
DebugProbes(#3527). - Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly (#3193).
CoroutineDispatcher.asExecutor()runs tasks without dispatching if the dispatcher is unconfined (#3683). Thanks @odedniv!SharedFlow.toMutableListandSharedFlow.toSetlints are introduced (#3706).Channel.invokeOnCloseis promoted to stable API (#3358).- Improved lock contention in
Dispatchers.DefaultandDispatchers.IOduring the startup phase (#3652). - Fixed a bug that led to threads oversubscription in
Dispatchers.Default(#3642). - Fixed a bug that allowed
limitedParallelismto perform dispatches even after the underlying dispatcher was closed (#3672). - Fixed a bug that prevented stacktrace recovery when the exception's constructor from
causewas selected (#3714). - Improved sanitizing of stracktrace-recovered traces (#3714).
- Introduced an internal flag to disable uncaught exceptions reporting in tests as a temporary migration mechanism (#3736).
- Various documentation improvements and fixes.
1.7.0-RC
- Kotlin version is updated to 1.8.20.
- Atomicfu version is updated to 0.20.2.
JavaFxversion is updated to 17.0.2 inkotlinx-coroutines-javafx(#3671).previous-compilation-data.binfile is removed from JAR resources (#3668).CoroutineDispatcher.asExecutor()runs tasks without dispatching if the dispatcher is unconfined (#3683). Thanks @odedniv!SharedFlow.toMutableListlint overload is undeprecated (#3706).Channel.invokeOnCloseis promoted to stable API (#3358).- Improved lock contention in
Dispatchers.DefaultandDispatchers.IOduring the startup phase (#3652). - Fixed a bug that led to threads oversubscription in
Dispatchers.Default(#3642). - Fixed a bug that allowed
limitedParallelismto perform dispatches even after the underlying dispatcher was closed (#3672). - Restored binary compatibility of previously experimental
TestScope.runTest(Long)(#3673).
1.7.0-Beta
Core API significant improvements
- New
Channelimplementation with significant performance improvements across the API (#3621). - New
selectoperator implementation: faster, more lightweight, and more robust (#3020). MutexandSemaphorenow share the same underlying data structure (#3020).Dispatchers.IOis added to K/N (#3205)newFixedThreadPoolandDispatchers.Defaultimplementations on K/N were wholly rewritten to support graceful growth under load (#3595).
kotlinx-coroutines-testrework:- Add the
timeoutparameter torunTestfor the whole-test timeout, 10 seconds by default (#3270). This replaces the configuration of quiescence timeouts, which is now deprecated (#3603). - The
withTimeoutexception messages indicate if the timeout used the virtual time (#3588). TestCoroutineScheduler,runTest, andTestScopeAPI are promoted to stable (#3622).runTestnow also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine (#1205).
- Add the
Breaking changes
- Old K/N memory model is no longer supported (#3375).
- New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates (#3393).
kotlinx-coroutines-coreandkotlinx-coroutines-jdk8artifacts were merged into a single artifact (#3268).- Artificial stackframes in stacktrace recovery no longer contain the
\bsymbol and are now navigable in IDE and supplied with proper documentation (#2291). CoroutineContext.isActivereturnstruefor contexts without any job in them (#3300).
Bug fixes and improvements
- Kotlin version is updated to 1.8.10.
- JPMS is supported (#2237). Thanks @lion7!
BroadcastChanneland all the corresponding API are deprecated (#2680).- Added all supported K/N targets (#3601, #812, #855).
- K/N
Dispatchers.Defaultis backed by the number of threads equal to the number of available cores (#3366). - Fixed an issue where some coroutines' internal exceptions were not properly serializable (#3328).
- Introduced
Job.parentAPI (#3201). - Fixed a bug when
TestSchedulerleaked cancelled jobs (#3398). TestScope.timeSourcenow provides comparable time marks (#3617). Thanks @hfhbd!- Fixed an issue when cancelled
withTimeouthandles were preserved in JS runtime (#3440). - Ensure
awaitFrameonly awaits a single frame when used from the main looper (#3432). Thanks @pablobaxter! - Obsolete
Class-Pathattribute was removed fromkotlinx-coroutines-debug.jarmanifest (#3361). - Fixed a bug when
updateThreadContextoperated on the parent context (#3411). - Added new
Flow.filterIsInstanceextension (#3240). Dispatchers.Defaultthread name prefixes are now configurable with system property (#3231).- Added
Flow.timeoutoperator as@FlowPreview(#2624). Thanks @pablobaxter! - Improved the performance of the
futurebuilder in case of exceptions (#3475). Thanks @He-Pin! Mono.awaitSingleOrNullnow waits for theonCompletesignal (#3487).Channel.isClosedForSendandChannel.isClosedForReceiveare promoted from experimental to delicate (#3448).- Fixed a data race in native
EventLoop(#3547). Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)no longer creates an additional wrapper (#3442). Thanks @dovchinnikov!- Various
@FlowPreviewand@ExperimentalCoroutinesApiare promoted to experimental and stable respectively (#3542, #3097, #3548). - Performance improvements in
Dispatchers.DefaultandDispatchers.IO(#3416, #3418). - Fixed a bug when internal
suspendCancellableCoroutineReusablemight have hanged (#3613). - Introduced internal API to process events in the current system dispatcher (#3439).
- Global
CoroutineExceptionHandleris no longer invoked in case of unprocessedfuturefailure (#3452). - Performance improvements and reduced thread-local pressure for the
withContextoperator (#3592). - Improved performance of
DebugProbes(#3527). - Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly (#3193).
- Various documentation improvements and fixes.
1.6.4
- Added
TestScope.backgroundScopefor launching coroutines that perform work in the background and need to be cancelled at the end of the test (#3287). - Fixed the POM of
kotlinx-coroutines-debughaving an incorrect reference tokotlinx-coroutines-bom, which cause the builds of Maven projects using the debug module to break (#3334). - Fixed the
Publisher.awaitfunctions inkotlinx-coroutines-reactivenot ensuring that theSubscribermethods are invoked serially (#3360). Thank you, @EgorKulbachka! - Fixed a memory leak in
withTimeouton K/N with the new memory model (#3351). - Added the guarantee that all
Throwableimplementations in the core library are serializable (#3328). - Moved the documentation to https://kotlinlang.org/api/kotlinx.coroutines/ (#3342).
- Various documentation improvements.
1.6.3
1.6.2
- Fixed a bug with
ThreadLocalElementnot being correctly updated when the most outersuspendfunction was called directly withoutkotlinx.coroutines(#2930). - Fixed multiple data races: one that might have been affecting
runBlockingevent loop, and a benign data race inMutex(#3250, #3251). - Obsolete
TestCoroutineContextis removed, which fixes thekotlinx-coroutines-testJPMS package being split betweenkotlinx-coroutines-coreandkotlinx-coroutines-test(#3218). - Updated the ProGuard rules to further shrink the size of the resulting DEX file with coroutines (#3111, #3263). Thanks, @agrieve!
- Atomicfu is updated to
0.17.2, which includes a more efficient and robust JS IR transformer (#3255). - Kotlin is updated to
1.6.21, Gradle version is updated to7.4.2(#3281). Thanks, @wojtek-kalicinski! - Various documentation improvements.