Avatar
omochimetaru 3/13/2024 5:30 AM
まとめ書く前に寝落ちして記憶が飛んだ
5:31 AM
メソッドのような関数宣言においては
5:31 AM
nonisolated、グローバルアクター、isolated引数を指定できる
5:32 AM
クロージャの定義においても、その3種類が書ける
5:34 AM
クロージャもその3種類と、キャプチャ変数によるisolateができる
5:35 AM
関数の型としては、グローバルアクターと、明示的なisolatedパラメータがあって、キャプチャは型に現れない
5:36 AM
で、関数にしようとしたときにこれらのisolationを静的に統一したインターフェースで動的に取得する方法がない (edited)
5:37 AM
なので、Task.initにMainActor指定したクロージャとかを渡す場合
5:37 AM
nonisolatedな関数として渡されて、関数の内部でMainActorにホップする挙動になってしまっている
5:38 AM
@isolated(any)は、関数型の追加属性として、実行時に動的にその関数isolationを取得できるようにする、というもので、
5:39 AM
このアトリビュートがついた関数型は、f.isolationというプロパティが生えていて、これがActor?型として3種類のisolationを値として取得できる
5:40 AM
これによってTask.initは関数を受け取るときにnonisolatedにラップさせる必要がなくなり
5:40 AM
その関数のisolationが要求するexecutorに直接即座に投入できるようになるらしい
5:41 AM
ユーザーからすると、Task.initに@MainActorなクロージャを渡した時に、
5:42 AM
それが呼び出される前後順が、Task.initの前後順を保ってくれるようになって便利
👀 4
5:42 AM
という話みたい