
Photo by
marikooota
Swift6がむずかしい
Swift6がむずかしい。データ競合安全がむずかしい。
日本語に翻訳されたドキュメントも存在しているがそれだけでは心が折れていたかもしれない
分かりやすかった動画
Swift6のConcurrency周りが特に難しいと感じていたがKoherさんの動画が分かりやすかった。
特に2つ目の動画が背景から説明されていてライブコーディングで分かりやすかった。
これらの変更の背景や目的はデータ競合を防ぐため。それをコンパイル時に検出するために4つのルールを設ける。
あるエリア(Isolation Domain)では同時に1つの処理しか実行しない
エリアとエリアの境界(Isolation boundary)を超えるものは複数のスレッドで扱われるので安全なもの(Sendable)しか渡せないようにする。
これらを知った上で改めて文法を見直すと、1を表すためにActorやGlobal Actorが必要で、2を表現するためにSendableやSending、Region based Isolationが必要であることが理解できた。