Tutto nella tua macchina funziona su una CPU che carica e memorizza le parole di memoria, ed esegue comparazioni e rami goto-like.
La programmazione funzionale significa che la mutazione è nascosta sotto il tappeto, non che va via.
Non è fattibile, con la tecnologia attuale, che un linguaggio funzionale possa essere implementato completamente fino in fondo. Questo perché non è possibile continuare a allocare nuovo hardware. I programmi funzionali generano spazzatura mentre vengono eseguiti e l'implementazione deve identificare la spazzatura e quindi riutilizzare la sua memoria per i nuovi oggetti. Questa è una forma di mutazione.
Se questa mutazione non viene eseguita, significa che non riutilizzerai la memoria in serie.
Se non riutilizzi la memoria, devi continuare a ricevere nuova memoria da qualche parte.
Inoltre, non ti è permesso riavviare il computer. Devi usarne uno nuovo.
La CPU deve continuare a allocare nuovi registri, perché non è possibile caricare un nuovo valore in un registro esistente. Et cetera.
Come puoi vedere, la programmazione funzionale è un sogno sciocco che è reso possibile solo dal pragmatismo della mutazione.
Esiste una mutazione intrinseca nella stessa programmazione funzionale (nell'astrazione). È semplicemente ignorato.
Il fatto è che quando costruisci un nuovo oggetto, il mondo è cambiato: non c'era nessun oggetto del genere prima, e ora c'è. La stessa cosa quando entra in gioco una nuova legatura di variabili.
Puoi fingere che sia stato allocato un intero nuovo universo che è proprio come il vecchio, tranne che per la differenza che ora esiste un nuovo elemento, ma non è la realtà. (Se il vecchio "mondo" non è stato mutato / distrutto dalla creazione di un nuovo oggetto, mostrami dov'è quello vecchio.)
Inoltre, nei programmi funzionali, l'oggetto viene distrutto tutto il tempo! I collegamenti variabili (che non vengono catturati in alcune chiusure) escono dall'ambito e gli oggetti cadono dal grafico di raggiungibilità (se non c'è alcuna mutazione, come può qualcosa essere in un grafico in un momento e non essere in quel grafico il prossimo momento?)
Sai che la vecchia copia del mondo non viene preservata, perché quegli oggetti irraggiungibili vengono calpestati per crearne di nuovi.
In altre parole, la distruttività della programmazione funzionale si rivela dall'incapacità di rivisitare tutti gli stati passati di computazione e ispezionare ogni oggetto che sia mai stato creato.