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