Я только что получил свою копию Expert F # 2.0 и наткнулся на это утверждение, которое меня несколько удивило:
Например, при необходимости вы можете использовать побочные эффекты для частных структур данных, выделенных в начале алгоритма, а затем отбросить эти структуры данных перед возвратом результата; Таким образом, общий результат - это функция без побочных эффектов. Одним из примеров отделения от библиотеки F # является реализация библиотеки List.map, которая использует внутреннюю мутацию; записи происходят во внутренней, разделенной структуре данных, к которой не может получить доступ никакой другой код.
Очевидно, что преимущество этого подхода - производительность. Мне просто любопытно, есть ли какие-либо недостатки - применимы ли здесь какие-либо подводные камни, которые могут иметь побочные эффекты? Влияет ли параллельность?
Другими словами, если бы производительность была отложена, было бы предпочтительнее реализовать List.map
в чистом виде?
(Очевидно, это касается, в частности, F #, но мне также интересна общая философия)