76 votes

Qu'est-ce que la supercompilation?

Bref et sympa: j'ai vu plusieurs sources parler de "supercompilation". Mais je n'ai pas encore trouvé un seul document sur Internet décrivant ce que c'est . Probablement parce que cela semble assez simple pour quiconque, cela ne vaut même pas la peine d'être expliqué.

Est-ce que quelqu'un sait ce que c'est réellement?

56voto

gereeter Points 2906

Supercompilation peut être considérée comme une généralisation de l'évaluation partielle. L'idée derrière évaluation partielle, est que de nombreuses parties d'un programme peut être évalué au moment de la compilation, et donc devrait être. Supercompilation étend ce, l'évaluation de choses qui ne peuvent pas être entièrement fait au moment de la compilation ainsi que de tourner map f (map g xs) en map (f . g) xs sans rien en plus de la définition de l' map (Au moins je crois que j'ai évaluation partielle droit - je ne l'ai beaucoup lu sur supercompilation).

Une autre façon de le voir est une combinaison de nombreuses autres optimisations, comme la déforestation, de la spécialisation, et inline. En agissant comme si elle les connaissait déjà les entrées des fonctions et de l'évaluation, il peut obtenir une mesure plus directe de la méthode de calcul du résultat - il peut se débarrasser de l'intermédiaire des structures de données en voyant comment ils seront utilisés ou on peut brancher toutes les valeurs possibles, puis les envelopper le résultat en case, ou de faire autre chose avec son semblant de valeurs.

Max Bolingbroke a un certain nombre de documents sur le sujet - je vous recommande la première, Supercompilation par l'Évaluation, comme une introduction. La Section 2 introduit le sujet par exemple et le reste, bien qu'un peu difficile à passer, qui est très instructif sur le processus. Neil Mitchell a également un certain nombre de bonnes présentations décrivant.

J'espère que ça aide.

3voto

erisco Points 6101

À partir de Wikipedia sur Metacompilation:

Metacompilation est un calcul qui consiste à métasystème transitions (MST) à partir d'un calcul de la machine M à une metamachine M " qui contrôle, analyse et imite le travail de M. Sémantique basé sur le programme de transformation, tels que partielle de l'évaluation et de la supercompilation (SCP), est metacomputation.

Plus sur Métasystèmes sur Wikipédia.

Je ne suis pas bien informé sur le sujet, mais je vais vous donner ma compréhension de la description. Dire que nous avions un programme simple qui pourrait copie stdin vers stdout. Ce serait notre calcul de la machine de M. Notre metamachine M' est un deuxième programme qui prend la source de M en entrée (ou sinon construits à intrinsèquement savent de M) et est donc en mesure de comprendre non seulement ce que M n', mais comment il le fait.

Si ma compréhension est correcte, alors la question évidente est pourquoi nous soucions-nous de M'? Ce qui me vient à l'esprit est automatique optimisations. Si l'on peut comprendre à la fois comment M qui fonctionne et ce qui M est d'essayer d'accomplir, M " peut résoudre des moyens d'améliorer le fonctionnement du M, soit dans l'espace ou dans le temps. En outre, et surtout, M' peut remplacer M puisque M' peut accomplir ce que M a fait. Cela signifie que M" améliorer les moyens de M' optimisé M, et de les remplacer par la suite M', et ainsi de suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X