Précédent : Interprétation abstraite interprocédurale sur
des Remonter : Analyse de code Suivant : Analyse de flot de
données
Participants : Alain Deutsch, Bruno Blanchet
L'analyse d'échappement (escape analysis) est une interprétation abstraite pour programmes fonctionnels fortement typés élaborée par Park et Goldberg. Cette analyse permet de remplacer statiquement des allocations en tas par des allocations en pile, ce qui diminue le coût de la garbage-collection et améliore la localité des données (cache en particulier).
Park & Goldberg ont donné une borne de complexité
exponentielle pour l'analyse d'une fonction du premier
ordre, par analogie avec la strictness analysis. Nous
montrons que cette borne supérieure est une approximation très
grossière : nous exhibons en effet une borne quasi-linéaire
(selon la terminologie de Gurevitch & Shelah) en . Toutefois, cette borne n'est valide qu'au
premier ordre : nous avons ensuite montré que l'escape
analysis devient exponentielle au second ordre, et plus
précisément DEXPTIME-difficile. Nous avons réalisé un premier
prototype qui est intégré à une version expérimentale du
compilateur CAML CSL de Xavier Leroy (projet CRISTAL). Ce travail
fait l'objet d'une communication à POPL'97 [2].
Bruno Blanchet, dans le cadre de son DEA, a ensuite étendu ce prototype de façon importante en traitant les type inductifs, les constructions impératives et (avec approximations) les fonctions d'ordre supérieur, ainsi qu'en donnant une sémantique exacte non instrumentée. Les résultats obtenus par cette analyse sont tout à fait satisfaisants. L'expérimentation, sur des programmes comme le compilateur CAML CSL ou le système COQ (environ 60 000 lignes), a montré la faisabilité de l'analyse. Son coût permet de l'appliquer à tous les programmes au prix d'un surcoût à la compilation tout à fait acceptable, qui ne dépasse pas 20%. Elle a montré aussi l'intérêt de l'allocation en pile, puisqu'on obtient des gains de temps importants : souvent 5 à 20%, quelquefois plus dans des cas particulièrement favorables.