La supercompilazione può essere affrontata come una generalizzazione della valutazione parziale. L'idea alla base della valutazione parziale è che molte parti di un programma possono essere valutate in fase di compilazione, e così dovrebbe essere. La supercompilazione estende questo, valutando cose che non possono essere completate in fase di compilazione, come trasformare map f (map g xs)
in map (f . g) xs
senza nulla oltre la definizione di map
(Almeno penso di aver ottenuto una valutazione parziale giusta - Ho letto solo molto sulla supercompilazione).
Un altro modo per vederlo è come una combinazione di molte altre ottimizzazioni, come la deforestazione, la specializzazione e l'inlining. Agendo come se conoscesse già gli input per le funzioni e valutando, può ottenere un metodo più diretto per calcolare il risultato - può sbarazzarsi delle strutture dati intermedie vedendo come verranno utilizzate o può collegare tutti i valori possibili e quindi avvolgere il risultato in un case
o fare qualcos'altro con i suoi valori di finto.
Max Bolingbroke ha un numero di documenti utili sull'argomento - Raccomando il primo, Supercompilation by Evaluation, come introduzione. La Sezione 2 introduce l'argomento con l'esempio e il resto, anche se un po 'difficile da ottenere, è molto informativo sul processo. Neil Mitchell ha anche un number of good presentations che lo descrive.
Spero che questo aiuti.
http://c2.com/cgi/wiki?SuperCompiler – vulkanino
Vedere le presentazioni sulla pagina Supero di Neil Mitchell, in poche parole il programma viene valutato in fase di compilazione.Laddove il programma non ha dipendenze dei dati di runtime può essere completamente valutato, altrimenti lascia un'espressione "residua" che fa parte dell'eseguibile. –