概要
Swift5.5で導入されたactorに分離された状態の生成や解放の過程においていくつかの側面(リスク)が見逃されていた。この提案では、actorの定義を強化して、actorに分離された状態がいつ開始/終了するかやinit/deinitでできることを明確にする。
詳細
Swift actorのinitとdeinitの新しいルールを理解する
タイムライン
- オープニング (00:00 ~)
- 今回のテーマ (01:24 ~)
- 用語の紹介(actor、Sendable、エグゼキュータなど) (02:00 ~)
- Swift5.5で何が問題なのか? (07:03 ~)
- non-asyncなイニシャライザの制限が厳しすぎる (08:03 ~)
- デイニシャライザでデータ競合を起こす可能性がある (10:00 ~)
- global-actorアノテーションの付いた格納プロパティのデフォルト値を設定する式が適切なエグゼキュータで行われない (12:51 ~)
- 委譲(Delegate)イニシャライザのconvenienceキーワード (13:43 ~)
- 解決策 (14:38 ~)
- actorの非委譲イニシャライザ (14:51 ~)
- isolated selfの参照を保持するイニシャライザ (16:30 ~)
- nonisolated selfの参照を保持するイニシャライザ (17:30 ~)
- 委譲イニシャライザ (20:32 ~)
- actorのイニシャライザの引数とSendable (21:36 ~)
- global-actorのイニシャライザの引数とSendable (23:14 ~)
- デイニシャライザ (24:24 ~)
- global-actorアノテーションの付いた格納プロパティのデフォルト値の設定 (25:38 ~)
- 値型(struct, enum)の格納プロパティへのglobal-actorアノテーション (26:40 ~)
- actorのglobal-actorアノテーションの付いた格納プロパティを保持できないというルールの徹底 (27:50 ~)
- ソース上で必要な変更 (28:17 ~)
- エンディング (29:24 ~)
感想等は #LFK_DEVPODS へ!