Avatar
Avatar
Iceman
with...Continuation系が特別に同期的に呼び出しされるのは知ってましたが、それって@_unsafeInheritExecutorつけることで実現されてたんですね
omochimetaru 11/2/2023 1:16 AM
ですね。Swift部分も普通には実装できなそうで謎だったけど、これみたいですね
1:22 AM
1:23 AM
左: asyncを呼び出す時、呼び出し側で、「現在のexecutorを採取」して、呼び出し先のexecutorに入って、呼び出して、その後「採取したexecutorに戻る」 (edited)
1:25 AM
あーここは微妙だな
1:26 AM
👀 1
1:26 AM
こっちのほうがいいかな
1:26 AM
左: 現在のexecutorを採取、actor呼び出し、戻ったらexecutorを復旧 右: 関数冒頭で自身のexecutorに突入、actor呼び出しから戻ったら再入
1:27 AM
冒頭で突入してるのが重要そう
1:28 AM
callerがactorでcalleeがnonisolatedなケースが一番大事か
👍 1
1:30 AM
このパッチでは変わってない気がする これがfirst halfだからか?
1:33 AM
1:33 AM
いやわかった、そっちは昔から今まで変わってない
1:33 AM
1:33 AM
これで説明ができる
1:33 AM
testAsyncFunction が (nonisolatedな)callee を呼ぶ流れを見ると (edited)
1:34 AM
左だと hop_to_exector が無い (CHECK-NOT) だから
1:34 AM
で、呼び出し側は MyActor に hop してから callee を呼ぶだけだから
1:35 AM
以前の挙動だと sticky な executor になってる
1:35 AM
右だと callee が内部で自分でグローバルアクターにhopするから
1:35 AM
Actorを手放してる
1:37 AM
@kntk まあそういうわけでSE-0388もコンパイラプロジェクトではSwiftコードではテストしてないですね、SILですね
🙇 1
1:37 AM
Async functions are now expected to set ExpectedExecutor in their prologue (and, generally, immediately hop to it). I updated the prologue code for a bunch of function emission, most of which was ...
1:38 AM
↑あともう一個見つけた、SE0388は5.6にも適用されてる
1:38 AM
なので 5.6.3 でテストするのは不適切かもしれない
👍 1