Avatar
例えば class Cat { var toy: Toy? } と class Dog { var toy: Toy? } が class Toy {} を共有してるっていうのが今のARCだとできますよね
2:06 AM
Ownership で導入されるのは、 shared 参照とmoveonly structですけど、 ARCが無いってことは、classが無いので、↑みたいな構造が作れないです struct Cat { var toy: Toy? } struct Dog { var toy: Toy? } struct Toy {} とやってしまうと、これは共有じゃなくて、Toyの実体が2つになるので、データ構造としては意味が違う。
2:07 AM
struct Cat { shared var toy: Toy? } ←こういうことはできない、一級参照じゃないから
2:08 AM
struct Cat { var toy: UnsafePointer<Toy>? } ←こういうことならできますけど、これはUnsafePointerのじてんでOwnership Systemの保護から外れるので、C言語に戻ってるだけで、安全性が0
2:11 AM
SwiftのOwnership Systemは、↑のような、「共有したい状況」では何ら状況を改善するものではなくて、
2:11 AM
オブジェクトの所有者が明確な、「専有所有する状況」(とそれの貸出と移動)においてはいろいろ改善できるってだけなので、
2:12 AM
既存のclass ARC はまず前提にあって、その中で共有が要らない部分で一部の処理を最適化するためにあるって位置づけ