Kotlin Coroutine 1.1.0-alpha Change log 全部読む
本エントリは Kotlin Advent Calendar 2018 の記事です。
Kotlin Coroutine 1.1.0-alphaがリリースされましたね。「kotlinx.coroutines/CHANGES.md at master · Kotlin/kotlinx.coroutines · GitHub」Change logを読むことの重要さを思い知ったので全部読みます。
Major improvements in coroutines testing and debugging
コルーチンのテストとデバッグの改善のために新しいモジュールが2つ増えました。
kotlinx-coroutines-debugの追加
ひとつめはkotlinx-coroutines-debug
。kotlinx.coroutines/core/kotlinx-coroutines-debug at master · Kotlin/kotlinx.coroutines · GitHub
コルーチンの追跡とトレースができるようになります。ByteBuddyを使っているらしい。Androidで使えるかな..? dependenciesをtestImplementation
に追加してねというのも気になる。
kotlinx-coroutines-testの追加
もう一つはkotlinx-coroutines-test
。kotlinx.coroutines/core/kotlinx-coroutines-test at master · Kotlin/kotlinx.coroutines · GitHub
Dispatchers.setMain
関数などを提供してくれるらしい!これは助かる。
スタックトレースの改善
System.setProperty("kotlinx.coroutines.debug", "")
ってセットしておくと、dispatcherを跨いでもスタックトレースで追えるようになる。これは助かる。
Basic stacktrace augmentation · Issue #493 · Kotlin/kotlinx.coroutines · GitHub
その他の改善
MainScope
ファクトリとCoroutineScope.cancel
関数を追加
https://github.com/Kotlin/kotlinx.coroutines/issues/829
MainScope
ファクトリの中身がCoroutineScope(Dispatchers.Main + SupervisorJob())
で、root scopeではSupervisorJob使っていこうなってことなのかな〜うーんという感じ。CoroutineScope.cancel
は便利そう。
resumeWithException
とcancel
のCancellableContinuationの競合が解決された。キャンセル中の例外は例外ハンドラに伝搬しなくなった。
- https://github.com/Kotlin/kotlinx.coroutines/issues/830
- https://github.com/Kotlin/kotlinx.coroutines/issues/892
特に感想なし
Dispatchers.Default
のJVM上のCPU消費量を削減
https://github.com/Kotlin/kotlinx.coroutines/issues/840
CoroutineSchedulerが処理がない時に余計に計算してたらしい。改善されてよかった
初期化されてないDispatcherをより素早く診断して検出
https://github.com/Kotlin/kotlinx.coroutines/issues/880
Dispatchers.Main使ってるのにandroid dependencies入れてないみたいな時にハングするケースがあったらしい。直ってよかった。普通に使ってる分にはあんまり関係なさそう。
Conflated channel
が線形化可能になった
どういうこと〜?
コルーチンの結果の型がDisposableHandle
だったときに起こる問題を修正
https://github.com/Kotlin/kotlinx.coroutines/issues/835
ハングっちゃうらしい。普通に使ってる分には関係なさそう。
Dispatchers. JavaFx
の初期化のバグを修正
https://github.com/Kotlin/kotlinx.coroutines/issues/816
withTimeout
関数のバグを修正
https://github.com/Kotlin/kotlinx.coroutines/issues/870
タイムアウトを負の数にすると、TimeoutCancellationException
じゃなくてCancellationException
が飛んでしまう問題を修正したらしい
Kotlin/Native でシングルスレッドワーカーをサポート
Kotlin/Nativeでもコルーチンが便利に使えるらしい。
JavascriptのDispatchers.Default
でjsdomをサポートした
あんまりよくわかってない
rxFlowableの型パラメータがAny
で制限された
あんまりよくわかってない
Guava 27をサポート
コルーチンをプログレッシブモードでビルドするようになった
Kotlin 1.2.50とかで入ったモードっぽいけど詳細はわからない
ドキュメントをいろいろ修正
わいわい
感想
意外としれっといろいろ入るんだな〜。おもしろい。