En compilation, Static single assignement form (abrégé en SSA) est une représentation intermédiaire du code source d'un programme dont la particularité est de ne permettre à une variable d'être affectée qu'une et une seule fois.
Benefices
L'intérêt principal de SSA est la simplification et l'amélioration des résultats de nombreuses optimisations, en simplifiant les propriétés des variables. Par exemple, soit le code suivant:
y:= 1 y:= 2 x:= y
Les humains peuvent voir que la première affectation n'est pas nécessaire, car la valeur de y utilisée à la troisième ligne vient de la deuxième affectation de y. Un programme devrait faire une analyse d'atteinte des définitions pour le déterminer. Mais si le programme est sous la forme SSA, alors c'est immédiat:
y1:= 1 y2:= 2 x1:= y2
Les algorithmes d'optimisations des compilateurs autorisés ou bien largement améliorés par l'utilisation de la forme SSA incluent:
- la propagation de constantes
- l'élimination du code mort
- la réduction partielle de duplication
- la réduction de force
- l'allocation de registres
Éléments de programmation informatique |
Bibliothèque logicielle | Bibliothèque standard • Espace de nom • Framework • Gabarit (template) • Interface • Interface de programmation (API) |
Vocabulaire | Algorithme • Expression • Indentation • Ligne de code • Opérateur • Pseudo-code • Surcharge des opérateurs | Autour des fonctions | Convention de nommage • Factorisation • Fonction imbriquée • Fonction de rappel • Fonction récursive • Généricité • Opérande • Paramètre • Polymorphisme • Procédure • Signature de type | Autour de l'objet | Classe • Constructeur • Destructeur • Encapsulation • Héritage • Héritage multiple • Instance • Méthode • Ramasse-miettes (garbage collector) • Référence | |
Dans le code source | Structures de données | Arbre • Attribut • Caractère • Enregistrement • File • First in, first out (fifo) • Last in, first out (lifo) • Liste • Liste chaînée • Pile • Table de symboles • Tableau • Tas • Type abstrait • Sémaphore | Déclarations : types et variables | Affectation • Pointeur • Portée • Tableau associatif • Type énuméré • Type récursif • Typage statique • Variable • Variable globale • Variable locale | Structures de contrôle | case • do • else • eval • if • for • goto • loop • switch • while | Fonctions usuelles | Concaténation • Incrémentation • malloc • printf | |
Outil de développement logiciel | Environnement de développement • Environnement de développement intégré (IDE) • Générateur de documentation • Gestion de versions • Modèle • Patch • Spécification |
Folklore | Hello world • Keep it Simple, Stupid • Langage de programmation exotique |
Catégorie:Développement logiciel • Catégorie:Programmation informatique |