actorって結局なんなん?


Swiftのasync/awaitはわかりやすいアップデートだけど一緒に出てきたactorって結局何者なのか?というのを軽く調べてみたメモ

参考

Swift Proposal

ざっくり概要

並列化の安全を保証できるデータ構造、並列処理のためのクラス

何がいいの?

プロポーザルによるとactorの変更には以下のような制約がかかる

  • 属するプロパティを変更する際はselfに対して呼び出す必要がある
  • 他のactorインスタンス(用語がこれでいいのかは不明)に変更をかけようとするとコンパイラレベルでエラーが出る

すなわち、並列処理で別々のスレッドが同じインスタンスを触って変更に矛盾が生じるみたいな事故を言語レベルで防ごうぜってことだと思います。
他の機能もたくさんありそうですが、大事なのはここの理解かなと感じました。

結論

並列処理でガンガン変更を加えるデータにはclassではなくactorを使っていきましょう