2011-01-18 8 views
20

Por lo tanto, los lenguajes puramente funcionales tienen su propia clase de potenciales debido a la clara separación entre el código puro y el impuro. He visto varias características que son algo más simples de implementar en Haskell como Nested Data Parallelism o Stream Fusion.¿Posibles optimizaciones en Haskell que todavía no están implementadas en GHC?

Mi pregunta es, ¿qué otras mejoras/optimizaciones son más o menos únicas de Haskell en términos de viabilidad/simplicidad pero aún no implementadas? (En general me preocupa el GHC, pero también me encanta escuchar sobre los demás)

Respuesta

26

Una optimización que me gustaría ver en GHC es la supercompilación. Sin embargo, eso parece poco probable en el futuro cercano de GHC, porque es una optimización de todo el programa, y ​​GHC está muy enfocado en la compilación de módulo a la vez.

Básicamente, la supercompilación está ejecutando la mayor cantidad posible de un programa en tiempo de compilación. Naturalmente, subsume la creación de líneas, la deforestación, la especialización y muchas otras técnicas. Los primeros resultados experimentales han sido prometedores, pero es un proceso muy costoso muy. Es difícil ver que sea una optimización práctica, pero el concepto es ridículamente increíble.

+1

Hay algunos proyectos en este sentido, por ejemplo, Supero (http://community.haskell.org/~ndm/supero/), aunque está construido sobre GHC. Básicamente, la supercompilación es una forma extendida de doblado constante. ¿A quién le importa el tiempo de compilación si solo es para compilaciones optimizadas? –

+0

Además, consulte http://www.cl.cam.ac.uk/~mb566/ –

+0

también, eche un vistazo a http://code.google.com/p/hosc/ (tiene una interfaz de aplicación web) –

2

Otro problema que SPJ afirma en su documento sobre la supercompilación modular es la combinación de supercompilación con unboxing. Las posibilidades de unboxing en el programa supercompilado se reducen significativamente. Esto causa una disminución en el rendimiento en comparación con un programa no optimizado que se pasa a través del analizador estricto/unboxer de GHC. Ver http://research.microsoft.com/en-us/um/people/simonpj/papers/supercompilation/

+0

Gracias. Eso es muy informativo. Pero, ¿debería haber sido un comentario a la respuesta de Carl? – Phil

+0

Sí, disculpe las molestias, soy nuevo en Stackoverflow ... –

+4

Tenga en cuenta que el orden de los autores suele ser significativo. La influencia de SPJ en ese trabajo fue indudablemente significativa, sin embargo, el primer autor es Max, así que lo llamaría "estados máx." O "estado máximo y SPJ". Sé que SPJ es mucho más conocido, pero es una cortesía común atribuir el primer autor. – nominolo

1

Otra técnica potente pero también "todavía no lista para el uso de producción" es worker-wrapper transformation.

+3

GHC sin duda hace la transformación de envoltura de trabajador y ha sido durante mucho tiempo. Se usa para explotar la información de rigor. Por supuesto, W/W es mucho más general, y puede haber muchas más formas de explotarlo, pero ciertamente se usa, si no en su generalidad completa. – nominolo

Cuestiones relacionadas