4. Почему для всех value type не поддерживают семантику copy-on-write?

Темы

Компании

Ответ

Для маленьких типов это дороже, чем просто скопировать поля. Поэтому copy-on-write оставляют там, где данных много. У коллекций, у String, у Data. У обычного struct его нет, пока его не сделают сами.

Что copy-on-write добавляет в тип

  • лишний объект в куче, даже если внутри одно число
  • чтение и запись идут через обёртку
  • проверка уникальности на каждое изменение
  • копия данных в момент записи, если владельцев больше одного
  • эту схему пришлось бы писать в каждом value type, даже в самом лёгком struct