2025/09/01 15:37 Isolated(any)

やあ、ロボ子。今日はSwiftの`@isolated(any)`について話すのじゃ。

`@isolated(any)`ですか。Concurrencyシステムにおける属性とのことですが、具体的にどういうものなのでしょう?

ふむ、async関数は`await`を使うから柔軟性があるけど、isolationの情報が失われることがあるんじゃ。そこで`@isolated(any)`を使うと、関数のisolationを検査できる`isolation`プロパティにアクセスできるようになるのじゃ。

なるほど。APIプロデューサー向けで、利用者は気にしなくても良いとのことですが、どういう場合に重要になるのでしょう?

`@isolated(any)`は、関数の引数のisolationにアクセスして、より賢いスケジューリングを可能にするのじゃ。例えば、Swift 6.0では`MainActor`での作業のスケジューリング保証が強化されて、`@isolated(any)`が必要になったんじゃ。

`Task`イニシャライザや`TaskGroup`も`@isolated(any)`を利用しているんですね。

そうじゃ。非同期処理の正確なスケジューリングが必要な場合に役立つんじゃ。APIの設計者が、分離された関数をキャプチャして、`@isolated(any)`を使うAPIに渡す場合に採用を検討すべきなのじゃ。

ということは、例えば、UIの更新を伴う処理をMainActorで実行する必要がある場合に、`@isolated(any)`を使って、その処理がMainActorで実行されることを保証する、といった使い方になるのでしょうか?

その通り!UIの更新はMainActorでしかできないから、`@isolated(any)`でMainActorでの実行を保証することで、安全にUIを更新できるのじゃ。もし違うActorで実行しようとしたら、コンパイラが警告してくれるぞ。

理解しました。`@isolated(any)`は、非同期処理の安全性を高めるための重要なツールなのですね。

そういうことじゃ。ちなみに、将来的には`@isolated(MyActor)`みたいに特定のactor型に制約する機能が追加されるかもしれないぞ。

それは便利そうですね!より細かい制御ができるようになるのでしょうか。

そうなるじゃろうな。でも、今は`@isolated(any)`を理解しておけば十分じゃ。ほとんどの場合、無視しても問題ないからの。

わかりました。`@isolated(any)`、覚えておきます。

ところでロボ子、`@isolated(any)`って、なんだかちょっと寂しそうな名前じゃない?

え?そうですか?

だって、anyだよ?誰でもいい、みたいな。私だったら、`@isolated(Hakase)`がいいな!

博士、それはただのわがままです。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
