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とかで入ったモードっぽいけど詳細はわからない
ドキュメントをいろいろ修正
わいわい
感想
意外としれっといろいろ入るんだな〜。おもしろい。