Avatar
Avatar
Yuta Saito
このコミットで@escapingクロージャに対するactor-isolationの制約が無効になって、escapingクロージャが定義位置のアクターを引き継ぐようになったようです。 non-escapingであれば、関数の脱出までに寿命が尽きるので、スレッドを跨ぐことはないので、アクターを引き継ぐ仮定は正しいです。 escapingではこの仮定は明らかに安全ではないんですが、既存のコードを壊さないための妥協として5.5に入ってるそうです。 https://github.com/apple/swift/commit/5ecb9ebec2168582e0197453ba06b7d556e680fd で、Combineのsinkは、渡したクロージャの実行スレッドがreceiveで変わってしまうので、まさにその安全でないケースだった、ということだと思います。 (edited)
escapingクロージャが定義位置のアクターを引き継ぐようになった
これはコンパイラが、アクターを引き継いでいると 判断するようになった という話で、エラーが出なくなるだけで実際にそのアクターに守られているわけではない、という理解で合ってますか?