Funktionen, die für Anrufer rein aussehen, aber intern die Mutation verwenden

Ich habe gerade meine Kopie vonExpert F # 2.0 und stieß auf diese Aussage, die mich etwas überraschte:

Bei Bedarf können Sie Nebenwirkungen auf private Datenstrukturen anwenden, die zu Beginn eines Algorithmus zugewiesen wurden, und diese Datenstrukturen anschließend verwerfen, bevor Sie ein Ergebnis zurückgeben. das Gesamtergebnis ist dann effektiv eine nebenwirkungsfreie Funktion. Ein Beispiel für die Trennung von der F # -Bibliothek ist die Implementierung von List.map in der Bibliothek, die intern Mutationen verwendet. Die Schreibvorgänge erfolgen in einer internen, getrennten Datenstruktur, auf die kein anderer Code zugreifen kann.

Jetzt ist der Vorteil dieses Ansatzes natürlich die Leistung. Ich bin nur neugierig, ob es irgendwelche Nachteile gibt. Trifft hier eine der Gefahren zu, die mit Nebenwirkungen verbunden sein können? Ist die Parallelisierbarkeit betroffen?

Mit anderen Worten, wenn Leistung beiseite gelegt würde, wäre es vorzuziehen, @ zu implementierList.map auf eine reine Art?

(Offensichtlich betrifft dies insbesondere F #, aber ich bin auch neugierig auf allgemeine Philosophie)

Antworten auf die Frage(14)

Ihre Antwort auf die Frage