Cours de compilation 2 - Intranet Evaluation partielle et compilation 21 septembre 2007 Cours de compilation 2 - Intranet
Les grandes lignes du cours Définitions de base Composition de compilateurs L’environnement d’un compilateur Evaluation partielle et compilation Analyses lexicales et syntaxiques Techniques d’analyse descendantes Techniques d’analyse ascendantes YACC Analyse sémantique Environnement d’exécution Génération de code Optimisation de code 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet I N T R O D U C T I O N 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète un compilateur 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! un compilateur Il ne possède aucune donnée ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il possède une partie des données ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il possède une partie des données ! Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il ne possède aucune donnée ! Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! La théorie en a été faite par Futamura en 1971: Les trois projections de Futamura. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! La théorie en a été faite par Futamura en 1971: Les trois projections de Futamura. Les premières réalisations datent de 1986. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Q U E L Q U E S N O T A T I O N S E T D E F I N I T I O N S 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c prog.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o Nous distinguons aussi entre les programmes unaires, indiqués par le 1 prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o Nous distinguons aussi entre les programmes unaires, indiqués par le 1 les programmes binaires, indiqués par le 2 prog1.c prog2.o 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. Nous avons les propriétés suivantes : Int.o ( Prog1.c , D ) = Résultat 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. Nous avons les propriétés suivantes : Int.o ( Prog1.c , D ) = Résultat Prog1.o ( D ) = Résultat 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c On dit encore que le programme Prog2.c est « spécialisé » par rapport à la donnée D1 ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c Prog1.o ( D2 ) = Résultat Int.o ( Prog1.c , D2 ) = Résultat Pour tout D2 : 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c Prog1.o ( D2 ) = Résultat Prog2.o ( D1 , D2 ) = Résultat Pour tout D2 : 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet E X E M P L E S 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 donne 8 * ( y – 4 ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 donne 8 * ( y – 4 ) 8 5 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) l ( d2 ) return( 9 + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) l ( d2 ) if ( 3 == d2 ) return( 3 * d2 ) else return( 9 ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 Le résultat vaut donc toujours 9 !!! 9 l ( d2 ) return( 9 ) 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Un évaluateur partiel ne fait rien de tel ! Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 Le résultat vaut donc toujours 9 !!! 9 l ( d2 ) return( 9 ) 3 3 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet L A B A S E D E S P R O J E C T I O N S D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Int.o ( Prog1.c , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Int.o ( Prog1.c , D2 ) = Res Prog1.o ( D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Les projections de Futamura sont des instances particulières de cette équivalence, avec des choix tout à fait particuliers pour Prog2.c , D1 et D2 ! Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet P R E M I E R E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = Res Int.o ( Prog1.c , D ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Int.o ( Prog1.c , D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Int.o ( Prog1.c , D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet
Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Compile_Prog1.c Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Int.o ( Prog1.c , D ) = « Val » Compile_Prog1.o ( D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! L’exécution du programme n’est pas encore réalisée ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cela s'appelle "compiler" ! ! ! Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! L’exécution du programme n’est pas encore réalisée ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! Nous obtenons un « compilateur interprétatif », c’est-à-dire réalisé par inspection de l’interprète : Comp_int.c = l ( P ) Ep.o ( Int.c , P ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! Nous obtenons un « compilateur interprétatif », c’est-à-dire réalisé par inspection de l’interprète : Comp_int.c = l ( P ) Ep.o ( Int.c , P ) Comp_int.o ( Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet D E U X I E M E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Ep.o ( Int.c , Prog1.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La première projection pour comparaison : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Ep.o ( Int.c , Prog1.c ) = Res Prog2.c = Int.c D1 = Prog1.c D2 = D 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La première projection pour comparaison : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Ep.o ( Int.c , Prog1.c ) = Res Prog2.c = Int.c D1 = Prog1.c D2 = D 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Ep.o ( Int.c , Prog1.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Compilateur_Int.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Compilateur_Int.o ( Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet T R O I S I E M E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Ep.o ( Ep.c , Int.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La deuxième projection pour comparaison : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Ep.o ( Ep.c , Int.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La deuxième projection pour comparaison : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Ep.o ( Ep.c , Int.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet
Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Ep.o ( Ep.c , Int.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Gen_Compil.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Gen_Compil.o ( Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet
Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet S Y N T H E S E 21 septembre 2007 Cours de compilation 2 - Intranet
Synthèse ---------------------------------------------------------------- Les trois projections de Futamura : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet
Synthèse ---------------------------------------------------------------- Les trois projections de Futamura : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. Depuis, on fait de l’évaluation partielle de sous-ensembles de C . 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. Depuis, on fait de l’évaluation partielle de sous-ensembles de C . Parfois, on obtient des accélérations d’un facteur 100 et plus (synthèse d’images). 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet Résumé ---------------------------------------------------------------- Evaluation partielle et compilation 21 septembre 2007 Cours de compilation 2 - Intranet
Cours de compilation 2 - Intranet C ’ e S t L a F i N ! ! ! b O n N e J o U r N é E ! ! ! 21 septembre 2007 Cours de compilation 2 - Intranet