simbolos para lenguajes inteligencia funcionales entornos descargar desarrollo caracteristicas artificial haskell ghc

para - haskell simbolos



¿Qué técnicas han contribuido más a la mejora del rendimiento de Haskell? (1)

Una idea aproximada de la contribución cuantitativa que cada una de estas técnicas

El problema con esta pregunta es que es esencialmente imposible de responder en ese nivel de detalle.

Durante 15 años, se han mejorado todos los aspectos de la pila de software, desde el código de usuario y los idiomas, hasta las bibliotecas, las optimizaciones del compilador, la generación de código y el tiempo de ejecución. El rendimiento ha sido un foco importante para más de una docena de desarrolladores, desde hace varios años.

Como resultado, se han realizado miles de cambios, que han resultado en el rendimiento que obtenemos hoy de GHC. No hay una lista simple.

Aquí hay una lista rápida para indicar qué tan amplio e imposible de responder es esta pregunta.

Optimizaciones del compilador

Las optimizaciones mejoradas del compilador hacen mejoras generales de 1 a 15% cada una.

Mejores bibliotecas

Las bibliotecas mejoradas pueden tener un gran impacto en dominios particulares. Por ejemplo, para datos de matriz y cadena ahora tenemos:

  • bytestring ( mejora 8x en comparación con las listas)
  • vector
  • repa

Que a menudo son 10 veces mejores que las versiones de la lista.

Mejores interfaces

Mejores interfaces para escribir código rápido.

Mejores herramientas

Mejores herramientas para analizar el rendimiento.

  • Núcleo de GHC
  • hilo de rosca
  • mejor perfilador
  • mejores herramientas de GC

Tiempo de ejecución

El tiempo de ejecución se volvió más inteligente, por ejemplo, el recolector de basura es significativamente mejor

Codigo de GENERACION

El generador de código es mejor.

  • En lugar de generar C, GHC apunta a que LLVM mejore algunos programas de arreglo en un 25%, algunos en un 100%.
  • El generador de código nativo también es reescrito y mejorado.

Mejores modismos

Y, finalmente, los modismos para escribir código rápido ahora se comprenden mucho más ampliamente.

Por lo tanto, puede nombrar cualquier lugar en la pila de software, y se han producido algunas mejoras por ciento. También se han producido importantes avances en el diseño de tiempo de ejecución, compilador y biblioteca.

Aprendí un poco de Haskell en la universidad a fines de los 90. En ese momento, aunque el rendimiento era adecuado y mucho mejor de lo que uno esperaría para un lenguaje de alto nivel, todavía no era nada del otro mundo.

Las cosas han cambiado. Haskell (GHC) hoy tiene un gran rendimiento, a menudo no muy lejos de C / C ++. Entonces, ¿qué se cambió exactamente en el compilador que más contribuyó a esta mejora? Soy consciente de varias técnicas que se usan a menudo, como un mejor análisis de descarte y rigor. Lo que me gustaría tener es una idea aproximada de la contribución cuantitativa que cada una de estas técnicas ha aportado a la mejora general del rendimiento.

Si lo prefiere, la pregunta también puede encuadrarse en los siguientes términos: considere el desempeño no tan bueno de GHC Haskell a mediados de los 90. ¿Cuáles serían las 5 áreas principales a mejorar para acercar el desempeño al de GHC Haskell 2013?