Функции, которые выглядят чистыми для вызывающих, но внутренне используют мутацию

Я только что получил свою копию Expert F # 2.0 и наткнулся на это утверждение, которое меня несколько удивило:

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

Очевидно, что преимущество этого подхода - производительность. Мне просто любопытно, есть ли какие-либо недостатки - применимы ли здесь какие-либо подводные камни, которые могут иметь побочные эффекты? Повлияет ли параллелизм?

Другими словами, если бы производительность была отложена, было бы предпочтительнее реализовать List.map в чистом виде?

(Очевидно, это касается, в частности, F #, но Мне также интересна общая философия)

8
задан Don Stewart 22 April 2011 в 22:12
поделиться