Здравствуйте, Somescout, Вы писали:
MH>>Хотя с точки зрения строителей компиляторов/ран-таймов чистый функционализм (без мутабельности и присваиваний) конечно хорошо, так как позволяет делать много крутых оптимизаций.
S>Например? Вроде единственное что позволяет делать иммутабельность — это раскидывать исполнение по потокам не боясь побочных эффектов.
Иммутабельность дает возможность реализовать совершенно другую модель вычислений. Например, в какой то момент обнаруживается, что проведенные изменения фейлятся на самом позднем этапе. В мутабельной модели нужно писать upfront все возможные валидации и тд и тд или делать глубокие откаты, что не всегда возможно. В иммутабельной присваивание делается ровно один раз в конце или не делается вовсе.
То есть, фактически это честные транзакции.
Другой пример — обнаружение изменений. Запилить на коленке мутабельную модель с трекингом изменений дело мягко говоря для упоротых трудоголиков с гигантским экспириенсом, квалификацией как у бога и наличием хорошего бюджета и запаса времени.
С иммутабельной моделью всё гораздо проще. Но за это надо заплатить — памяти может потребоваться намного больше.
Еще одна вещь — всевозможные вычисления, во время которых у тебя есть гарантия, что неосторожным присваиванием ты не подломаешь разделяемый объект.
Оптимизации производительности растут из этих же свойств, например, кеширование.