2012-01-30 8 views
64

Corto y dulce: he visto varias fuentes que hablan de la "supercompilación". Pero aún no he encontrado un solo documento en ninguna parte de Internet que describa , que es. Presumiblemente porque parece lo suficientemente simple para quien sea que ni siquiera vale la pena explicarlo.¿Qué es la supercompilación?

¿Alguien sabe lo que es en realidad?

+1

http://c2.com/cgi/wiki?SuperCompiler – vulkanino

+3

Consulte las presentaciones en la página Supero de Neil Mitchell, en pocas palabras, el programa se evalúa en tiempo de compilación.Cuando el programa no tiene dependencias de datos de tiempo de ejecución, se puede evaluar completamente, de lo contrario, se deja una expresión "residual" que forma parte del ejecutable. –

Respuesta

43

La supercompilación se puede abordar como una generalización de la evaluación parcial. La idea detrás de la evaluación parcial es que muchas partes de un programa se pueden evaluar en tiempo de compilación, y así debería ser. La supercompilación extiende esto, evaluando cosas que no se pueden completar completamente en tiempo de compilación, como convertir map f (map g xs) en map (f . g) xs sin nada además de la definición de map (Al menos creo que obtuve una evaluación parcial correcta, solo he leído mucho sobre supercompilación)

Otra forma de verlo es como una combinación de muchas otras optimizaciones, como la deforestación, la especialización y el alineamiento. Al actuar como si ya conociera las entradas a las funciones y la evaluación, puede obtener un método más directo para calcular el resultado: puede deshacerse de las estructuras de datos intermedias al ver cómo se usarán o puede conectar todos los valores posibles y luego ajuste el resultado en un case, o haga otra cosa con sus valores simulados.

Max Bolingbroke tiene una serie de documentos útiles sobre el tema - Recomiendo el primero, Supercompilation by Evaluation, como introducción. La Sección 2 presenta el tema con el ejemplo y el resto, aunque es un poco difícil de entender, es muy informativo sobre el proceso. Neil Mitchell también tiene un number of good presentations que lo describe.

Espero que ayude.

+2

No obtengo la distinción entre súper compilación y evaluación parcial de esto. "La supercompilación extiende esto, evaluando cosas que no se pueden completar en tiempo de compilación también", esto también describe la evaluación parcial. La evaluación parcial de un programa en general deja un programa residual parcialmente evaluado. La evaluación parcial idealmente debería aprovechar al máximo todas las entradas/argumentos conocidos estadísticamente para evaluar parcialmente el programa. – Guildenstern

+0

Ciertamente se superponen, y como la evaluación parcial se extiende, ciertamente se convierte en supercompilación. Pienso en la diferencia ya que la evaluación parcial decide de antemano qué bits eliminar (por ejemplo, el primer argumento para mapear), luego va y los elimina. La supercompilación golpea todo con las mismas reglas y ve lo que sale. –

+0

El enlace de arriba está roto lo encontró [aquí] (http://research.microsoft.com/en-us/um/people/simonpj/papers/supercompilation/supercomp-by-eval.pdf) –

1

De Wikipedia on Metacompilation:

Metacompilation es un cálculo que implica transiciones metasistema (MST) de una máquina de computación M a un MetaMachine M' que controla, análisis e imita la obra de M. semántica basada- La transformación del programa , como la evaluación parcial y la supercompilación (SCP), es una metacomputación.

Más información acerca de Metasystems on Wikipedia.

No tengo conocimientos sobre el tema, pero le daré mi comprensión de la descripción. Digamos que teníamos un programa simple que podía copiar stdin a stdout. Esta sería nuestra máquina de computación M. Nuestra metamachine M 'es un segundo programa que toma la fuente de M como entrada (o está construida para conocer inherentemente M) y, por lo tanto, es capaz de entender no solo lo que M hace, sino cómo lo hace.

Si mi comprensión es correcta, entonces la pregunta obvia es ¿por qué nos preocupamos por M '? Lo que me viene a la mente son las optimizaciones automáticas. Si podemos entender cómo funciona M y qué M está tratando de lograr, M 'puede resolver formas de mejorar la operación de M, ya sea en el espacio o en el tiempo. Además, y lo que es más importante, M 'puede sustituir a M ya que M' puede lograr cualquier cosa que M hiciera. Esto significa que M '' puede mejorar las formas en que M 'optimizó M, y luego reemplaza M', y así sucesivamente.