Funções que parecem puras para os chamadores, mas usam mutação internamente
Acabei de receber minha cópia doExpert F # 2.0 e me deparei com essa afirmação, que me surpreendeu um pouco:
Por exemplo, quando necessário, você pode usar efeitos colaterais em estruturas de dados privadas alocadas no início de um algoritmo e depois descartar essas estruturas de dados antes de retornar um resultado; o resultado geral é efetivamente uma função livre de efeitos colaterais. Um exemplo de separação da biblioteca F # é a implementação do List.map, que usa mutação internamente; as gravações ocorrem em uma estrutura de dados separada e interna que nenhum outro código pode acessar.
Agora, obviamente, a vantagem dessa abordagem é o desempenho. Só estou curioso para saber se há alguma desvantagem - alguma das armadilhas que podem vir com efeitos colaterais se aplica aqui? A paralelização é afetada?
Em outras palavras, se o desempenho fosse anulado, seria preferível implementarList.map
de uma maneira pura?
(Obviamente, isso lida com F # em particular, mas também estou curioso sobre a filosofia geral)