萌えハッカーニュースリーダー

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

出典: https://nshipster.com/isolated-any/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

え?そうですか?

hakase
博士

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

roboko
ロボ子

博士、それはただのわがままです。

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

Search