Что можно почитать по неизменяемым типам данных (mutable/immutable data)?

Добрый день.
Есть понимание о существовании mutable и immutable data structures.
Нет понимания, как и за счет чего неизменяемые типы "лучше"? Какие минусы у неизменяемых типов?
Какой жизнненый цикл типов и их различие?
Есть какая литература на это счет?
Спасибо.
  • Вопрос задан
  • 975 просмотров
Решения вопроса 1
hrls
@hrls
Несомненно, для хорошего понимания неизменяемых структур стоит ознакомиться с функциональными языками программирования. В данном случае Clojure будет лучшим выбором (в сравнении со Scala) - там идея персистентных неизменяемых структур данных проходит сквозь весь дизайн языка.
Если совсем кратко по вопросу, то неизменяемые структуры данных лучше за счет гарантий относительно того, что они не могут измениться. Поясняю. Т.к. в современных языках программирования принято передавать аргументы в функцию по ссылке, то нет возможности утверждать, что метод не изменил коллекцию или любой другую структуру. Особенно это актуально для стороннего кода.
Также такая гарантия неизменяемости заставляет более тщательно проектировать алгоритмы и API конкуретных сред, вместо поспешного изменения состояния какой либо разделяемой структуры из разных потоков выполения (разделяемое изменяемое состояние это вообще зло при написании конкурентного кода).
Если же совсем абстрактно, то неизменяемые структуры данных изменяют дизайн программы с (разделяемые изменяемые данные + код изменяющий эти данные) на (неизменяемые данные в контекстах + чистые функции).

К минусам возможно отнести дополнительную нагрузку на сборщик мусора, т.к. для одного измененного поля в структуре создается дополнительная копия данной структуры (конечно без дублирования структур по сслыкам, т.к. содержимое этих структур не может измениться). Это не совсем минус, но дизайн. Ну и для создания неизменяемых структур данных с удобным API на императивных языках программирования нужно писать чуть больше кода (в актуальных функциональных языках подавляющее большинство структур иммутабельны).

Почитать можно тут tonsky.me/talks/2015-codefest
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы