C'è un'enorme incomprensione nell'immutabilità.
L'immutabilità è una caratteristica della semantica, ma non implica l'immutabilità nell'implementazione.
Un semplice esempio è l'implementazione della pigrizia.
Quando i calcoli sono pigri, il risultato di un'espressione è concettualmente un valore, ma l'implementazione sottostante è un thunk che contiene gli argomenti da valutare e una funzione per creare il valore, nonché uno slot per memorizzare il valore in .
La prima volta che chiederai (nella lingua) il valore, il calcolo verrà effettivamente eseguito, il suo risultato sarà valutato e il valore restituito a te (o a un handle).
Questo è trasparente nella semantica del linguaggio e tutto ciò che sai è che questa variabile è stata associata a un valore (o a un valore futuro) e che una volta eseguita non è possibile modificare il valore che verrà restituito. La rappresentazione della memoria sottostante cambierà, ma non ne saprai nulla.
La stessa differenza di implementazione / semantica esiste in qualsiasi linguaggio ed è in effetti al centro dell' ottimizzazione . Qualunque sia la lingua, la semantica garantisce alcune cose, ma lascia gli altri non specificati per lasciare spazio all'ottimizzazione.
Ora, è vero che le lingue praticamente funzionali non sono veloci come il C ++, per esempio. Tuttavia, Go
(che è ancora abbastanza hype) è più lento di Haskell o Lisp, e lo stesso vale per C # Mono ( fonte ).
Quando vedi come C ++ o C inaffidabili possono darti quei risultati, potresti desiderare di lasciarti andare un po '.
Quando ti rendi conto che Haskell sta crescendo rapidamente oggi e c'è ancora molto spazio per l'ottimizzazione nel suo compilatore / runtime (GHC è appena passato di recente a LLVM, ad esempio, Microsoft Research sta finanziando i miglioramenti del runtime), potresti essere disposto scommettere che presto migliorerà.
Divertimento: A Play on Regular Expressions o come un team Haskell ha creato un matcher di espressioni regolari che sovraperforma re2
, la libreria C di Google, in una serie di scenari.