Recientemente he estado profundizando en la programación funcional, especialmente Haskell y F #, la anterior aún más. Después de buscar en Google, no pude encontrar una comparación de referencia de los lenguajes funcionales más destacados (Scala, F #, etc.).
Sé que no es necesariamente justo para algunos de los idiomas (me viene a la mente Scala) dado que son híbridos, pero solo quiero saber qué supera a cada uno en qué operaciones y en general.
CPython
vsPyPy
rápidamente viene a la mente.Respuestas:
Según el Great Benchmarks Game , ATS es más rápido que el resto con Haskell, Scala y una de las variantes de Common Lisp en un empate por la velocidad cerca de eso. Después de eso, Ocaml y F # están aproximadamente en la misma categoría de velocidad con Racket y Clojure rezagados ...
Sin embargo, casi nada de esto significa nada realmente. Todo es una cuestión de problema, máquina, compilador, técnicas de codificación y, en algunos casos, pura suerte. En términos generales, los lenguajes codificados directamente por máquina como Haskell superarán a los lenguajes compilados por VM como F # y superarán ampliamente a los lenguajes puramente interpretados. Además, en general, los lenguajes de tipo estático son más rápidos que los de tipo dinámico debido al análisis estático que permite calcular todas las operaciones de tipo en la compilación en lugar del tiempo de ejecución. Nuevamente, estas son reglas generales, siempre habrá excepciones. Los "paradigmas" tienen poco que ver con eso.
fuente
También debe señalarse que no puede medir / cuantificar el rendimiento de un lenguaje de programación . Lo mejor que puede hacer es medir el rendimiento de una implementación específica del lenguaje en plataformas específicas, ejecutando programas específicos.
Entonces, cuando pregunta sobre "el lenguaje funcional más rápido", lo que realmente está preguntando acerca de la mejor de las implementaciones actuales de los idiomas.
El comentario de @ igouy plantea que existen otras medidas de rendimiento para la implementación del lenguaje; por ejemplo, tiempo de compilación. Pero eso no cambia el hecho de que el tiempo de ejecución del programa de aplicación es una medida (indirecta) de la implementación de un lenguaje, no una medida del lenguaje en sí.
Considere Java por ejemplo. Supongamos que escribo un punto de referencia de subproceso único utilizando únicamente características de lenguaje de Java clásico (Java 1.0). Si compilo y ejecuto usando JDK 1.0, obtendré un bajo rendimiento (porque JDK 1.0 no tenía un compilador de código nativo). Si paso de JDK 1.1 a ... JDK 1.7, probablemente obtendré mejores resultados progresivamente. Pero esto no se debe a cambios en el lenguaje Java ... porque mi punto de referencia está usando el mismo subconjunto de idiomas. Más bien, la aceleración se debe a mejoras en los compiladores, el sistema de tiempo de ejecución y / o la implementación de bibliotecas de clases. Todos estos son problemas de implementación .
El otro punto es que estas diferencias de implementación pueden ser realmente significativas (por ejemplo, órdenes de magnitud) para el mismo idioma. Por lo tanto, el hecho de que la mejor implementación para el lenguaje X sea más rápida que la mejor (o única) implementación del lenguaje Y no necesariamente le dice mucho sobre el lenguaje en sí.
fuente
Si está buscando idiomas solo en la velocidad de ejecución, se están perdiendo algunos puntos importantes. La velocidad es algo bueno, pero no es lo único.
Haskell usa un sistema de tipos muy robusto para crear programas que serán mucho más propensos a ser libres de errores y robustos.
Erlang utiliza su sistema de monitoreo incorporado para permitirle crear sistemas de fallas que pueden brindarle un gran nivel de confiabilidad frente a varios tipos de fallas. Además, Erlang puede brindarle un nivel de concurrencia difícil de igualar en otros idiomas.
En verdad, consideraría que la velocidad de ejecución en la actualidad está bastante abajo en la lista de lo que consideraría en la mayoría de los casos. (Bien, si estuviera haciendo un cálculo numérico masivo, probablemente querría usar fortran para la velocidad, pero de lo contrario, no es lo suficientemente importante como para importar)
fuente