L'énoncé de recherche de JM Siskind déclare:
Staline est un compilateur d'optimisation pour Scheme qui effectue une analyse statique du programme entier et utilise les résultats de cette analyse pour générer du code extrêmement efficace. Staline utilise une large collection de techniques d'analyse statique. Il effectue une nouvelle forme d'analyse de flux polyvariante qui utilise une analyse de flux monovariée itérée pour effectuer une séparation dirigée par le flux: clonage de copies spécialisées de procédures et attribution par cible des cibles à ces clones par site d'appel. Il utilise les résultats de l'analyse de flux pour effectuer une analyse de la durée de vie, une analyse d'échappement, une analyse des points vers et une analyse des alias obligatoires. Ces analyses prennent en charge une nouvelle forme de conversion de fermeture légère qui élimine la plupart des créneaux de fermeture, en utilisant des techniques telles que la mondialisation et la localisation variables, comprime le backchain statique et élimine généralement la plupart des fermetures des programmes. Il utilise également les analyses ci-dessus pour prendre en charge la gestion du stockage basée sur les régions orientée flux, où le ramasse-miettes au moment de l'exécution est remplacé par l'allocation statique et la désallocation sur une base par valeur abstraite et par point de programme. Il effectue également une conversion CPS légère orientée flux, en utilisant des extensions des techniques mises au point avec Screamer, pour prendre en charge des continuations de première classe extrêmement efficaces. Enfin, il prend en charge l'incrustation orientée flux et la sélection de représentation de bas niveau pour choisir l'implémentation (ou la non-implémentation) des balises, la vérification des balises et la répartition des balises par valeur abstraite et par point de programme. Cela élimine la plupart des balises d'exécution, la vérification des balises, le balisage, le dépouillement des balises, la répartition des balises, la mise en boîte et le déballage des programmes. où le ramasse-miettes au moment de l'exécution est remplacé par l'allocation statique et la désallocation sur une base par valeur abstraite et par point de programme. Il effectue également une conversion CPS légère orientée flux, en utilisant des extensions des techniques mises au point avec Screamer, pour prendre en charge des continuations de première classe extrêmement efficaces. Enfin, il prend en charge l'incrustation orientée flux et la sélection de représentation de bas niveau pour choisir l'implémentation (ou la non-implémentation) des balises, la vérification des balises et la répartition des balises par valeur abstraite et par point de programme. Cela élimine la plupart des balises d'exécution, la vérification des balises, le balisage, le dépouillement des balises, la répartition des balises, la mise en boîte et le déballage des programmes. où le ramasse-miettes au moment de l'exécution est remplacé par l'allocation statique et la désallocation sur une base par valeur abstraite et par point de programme. Il effectue également une conversion CPS légère orientée flux, en utilisant des extensions des techniques mises au point avec Screamer, pour prendre en charge des continuations de première classe extrêmement efficaces. Enfin, il prend en charge l'incrustation orientée flux et la sélection de représentation de bas niveau pour choisir l'implémentation (ou la non-implémentation) des balises, la vérification des balises et la répartition des balises par valeur abstraite et par point de programme. Cela élimine la plupart des balises d'exécution, la vérification des balises, le balisage, le dépouillement des balises, la répartition des balises, la mise en boîte et le déballage des programmes. utilisant des extensions des techniques mises au point avec Screamer, pour prendre en charge des continuations de première classe extrêmement efficaces. Enfin, il prend en charge l'incrustation orientée flux et la sélection de représentation de bas niveau pour choisir l'implémentation (ou la non-implémentation) des balises, la vérification des balises et la répartition des balises par valeur abstraite et par point de programme. Cela élimine la plupart des balises d'exécution, la vérification des balises, le balisage, le dépouillement des balises, la répartition des balises, la mise en boîte et le déballage des programmes. utilisant des extensions des techniques mises au point avec Screamer, pour prendre en charge des continuations de première classe extrêmement efficaces. Enfin, il prend en charge l'incrustation orientée flux et la sélection de représentation de bas niveau pour choisir l'implémentation (ou la non-implémentation) des balises, la vérification des balises et la répartition des balises par valeur abstraite et par point de programme. Cela élimine la plupart des balises d'exécution, la vérification des balises, le balisage, le dépouillement des balises, la répartition des balises, la mise en boîte et le déballage des programmes.Ces analyses et optimisations permettent à Staline de générer un code extrêmement efficace qui surpasse tous les autres compilateurs Scheme par des facteurs compris entre deux et cent, en particulier pour le code à forte intensité numérique. Staline génère souvent du code qui surpasse le code manuscrit c et Fortran.
J'ai pu trouver l'article très intéressant suivant sur la mise en œuvre des fermetures / appels de fonction: Conversion de fermeture légère à flux dirigé . J'ai également envoyé un courriel à l'auteur pour lui poser des questions sur les articles sur les autres sujets, qui sont mentionnés comme étant écrits dans le document de conversion de clôture:
Siskind, JM 2000a. Conversion CPS légère orientée flux. En préparation.
Siskind, JM 2000b. Polyvariance orientée flux. En préparation.
Siskind, JM 2000c. Sélection de la représentation orientée flux. En préparation.
Siskind, JM 2000d. Gestion du stockage orienté flux. En préparation
Malheureusement, il n'a jamais réussi à écrire ces papiers. Ma question est la suivante: existe-t-il des documents alternatifs ou connexes couvrant ces sujets? Je suis très intéressé d'apprendre comment Staline (ou d'autres compilateurs) peut compiler un langage de haut niveau tel que Scheme qui est récupéré, typé dynamiquement, prend en charge les fonctions de première classe, et même les continuations de première classe, peuvent être compilés statiquement avec un code aussi efficace . Bien que les articles sur l'analyse de flux soient assez abondants, les articles sur l'utilisation des résultats d'une telle analyse pour effectuer les optimisations mentionnées ci-dessus ne le sont pas.