Чисто функциональные структуры данных имеют следующие преимущества:
Стойкость: старые версии можно использовать повторно безопасно, зная, что их нельзя было изменить.
Совместное использование: многие версии структуры данных могут храниться одновременно только с небольшими требованиями к памяти.
Потокобезопасность: любая мутация скрыта внутри ленивых блоков (если таковые имеются) и, следовательно, обрабатывается языковой реализацией.
Простота: отсутствие необходимости отслеживать изменения состояния упрощает использование чисто функциональных структур данных, особенно в контексте параллелизма.
Инкрементальность: чисто функциональные структуры данных состоят из множества крошечных частей, что делает их идеальными для поэтапного сбора мусора, что приводит к снижению задержек.
Обратите внимание, что я не указал параллелизм как преимущество чисто функциональных структур данных, потому что я не считаю, что это так. Эффективный многоядерный параллелизм требует предсказуемой локализации для того, чтобы использовать кэши и избежать узкого места в общем доступе к основной памяти, и чисто функциональные структуры данных имеют в лучшем случае неизвестные характеристики в этом отношении. Следовательно, многие программы, которые используют чисто функциональные структуры данных, плохо масштабируются при распараллеливании на многоядерные процессоры, поскольку они проводят все свое время в промахах кэша, борясь за пути общей памяти.
То, что я имею в виду под чисто функциональной структурой данных, отличается от постоянной структуры данных.
Здесь есть некоторая путаница. В контексте чисто функциональных структур данных постоянство - это термин, используемый для обозначения возможности возврата к предыдущим версиям структуры данных, которые безопасны, зная, что они все еще действительны. Это естественный результат того, что он является чисто функциональным, и поэтому постоянство является неотъемлемой характеристикой всех чисто функциональных структур данных.