Avatar
Hi all, Thank you for all the great feedback on the proposal. Doug and I have been iterating on it a bit and have a draft #4 up. My sense is that this is getting close to convergence for a formal review. This proposal differs from draft #3 in the following major ways: This includes a more explicit definition of marker protocols. Conformanc...
11:19 AM
ConcurrentValue のピッチを読んだけどなかなかおもしろいです。
11:19 AM
SwiftにActorが導入されてアクターアイソレーションが導入されたとしても、
11:21 AM
参照型のオブジェクトをアクター間で受け渡してしまったら、 共有オブジェクトに並行同時アクセスすることになるので、スレッドバグが起きてしまうわけです
11:21 AM
そこでこのピッチで解決しようとしているのが
11:21 AM
「スレッドをまたいで受け渡しても安全である型かどうか」を静的に検査する仕組みを作ろうということです
11:22 AM
Swiftには値型があるけど、値型のプロパティとして参照型を持っていたらだめだとか、 参照型だったとしても、immutable class patternだったら安全であるとか
11:22 AM
そのへんをマーキング用のプロトコル ConcurrentValue で示す+コンパイラがデータ構造をチェックする
11:23 AM
によって保証しようとのこと
11:23 AM
UnsafeConcurrentValueというのもあって、これは、 検査なしで強制的にConcurrentValueにするためのマーカー。
11:23 AM
それと、関数型に対する @escaping のように @concurrent という属性も追加して
11:24 AM
関数がマルチスレッドセーフかどうかも検査します
11:24 AM
例えば何もキャプチャしていないクロージャなら、2つのスレッドから同時に使っても大丈夫だけど
11:25 AM
var をキャプチャしていると、そこを介してミュータブルステート共有が起きるのでだめだとか
11:25 AM
そのあたりをチェックするそうです