Hay un gran malentendido en la inmutabilidad.
La inmutabilidad es una característica de la semántica, pero no implica inmutabilidad en la implementación.
Un ejemplo simple es la implementación de la pereza.
Cuando los cálculos son perezosos, el resultado de una expresión es conceptualmente un valor, pero la implementación subyacente es un procesador que contiene los argumentos que deben evaluarse y una función para crear el valor, así como una ranura para almacenar el valor. .
La primera vez que solicitará (en el idioma) el valor, el cálculo se realizará, se evaluará su resultado y se le devolverá el valor (o un identificador).
Esto es transparente en la semántica del lenguaje, y todo lo que sabe es que esta variable se ha vinculado a un valor (o un valor futuro) y que una vez que está listo, no puede cambiar el valor que se devolverá. La representación de la memoria subyacente cambiará, pero usted no lo sabrá.
La misma diferencia semántica / de implementación existe en casi cualquier idioma y, de hecho, está en el corazón de la optimización . Cualquiera que sea el idioma, la semántica garantiza algunas cosas, pero deja otras sin especificar para dejar espacio para la optimización.
Ahora, es cierto que los lenguajes prácticamente funcionales no son tan rápidos como C ++, por ejemplo. Sin embargo, Go
(que todavía es bastante exagerado) es más lento que Haskell o Lisp, y también lo es C # Mono ( source ).
Cuando vea cuán poco confiable puede ser C ++ o C para obtener esas actuaciones, es posible que desee dejar pasar un poco.
Cuando se da cuenta de que Haskell está creciendo rápidamente hoy en día, y todavía hay mucho espacio para la optimización en su compilador / tiempo de ejecución (GHC acaba de cambiar recientemente a LLVM, por ejemplo, Microsoft Research está financiando activamente las mejoras en tiempo de ejecución), podría estar dispuesto apostar a que va a mejorar pronto.
Diversión: Un juego con expresiones regulares o cómo un equipo de Haskell creó un comparador de expresiones regulares que supera a re2
, la biblioteca de C de Google, en varios escenarios.