Product Design, Manufacturing & Innovation Resources
Maison » La structure du compilateur en trois étapes

La structure du compilateur en trois étapes

1980
Programmeur travaillant sur la structure d'un compilateur à trois niveaux dans un bureau de développement de logiciels.

(Image générée à titre d'illustration uniquement)

Un compilateur moderne est généralement structuré en trois étapes : le front-end, le middle-end et le back-end. Le front-end analyse le code source, vérifie son exactitude et construit une représentation intermédiaire (RI). Le middle-end optimise cette RI. Le back-end traduit ensuite la RI optimisée en code machine cible pour une architecture CPU spécifique.

Cette conception modulaire en trois étapes assure une séparation cruciale des préoccupations. Le front-end est dépendant du langage, mais indépendant de la machine ; il comprend la syntaxe et la sémantique d'un langage spécifique comme C++ ou Rust. Sa sortie, la représentation intermédiaire (RI), est une structure de données abstraite et indépendante de la machine, comme un arbre de syntaxe abstrait (AST) ou un code à trois adresses. Cela dissocie le langage source de la machine cible.

Le middle end est largement indépendant du langage et de la machine. Il utilise l'IR et applique une série de passes d'optimisation, telles que l'élimination du code mort, le repliement des constantes et l'optimisation des boucles. Comme il fonctionne sur l'IR générique, ces optimisations complexes peuvent être écrites une seule fois et appliquées à tout langage compilable dans cet IR.

Enfin, le back-end est dépendant de la machine, mais indépendant du langage. Il utilise l'IR optimisé et effectue la sélection des instructions, l'allocation des registres et l'ordonnancement des instructions afin de générer du code machine performant pour une architecture cible spécifique, comme x86-64 ou ARM. Cette structure permet de construire des compilateurs prenant en charge M langages et N cibles en écrivant M front-ends et N back-ends, plutôt que M*N compilateurs individuels. Ce principe est illustré par les infrastructures de compilateurs modernes comme GCC et LLVM.

UNESCO Nomenclature: 1203
- Informatique

Taper

Système abstrait

Perturbation

Fondamentaux

Usage

Utilisation généralisée

Précurseurs

  • premières conceptions de compilateurs monolithiques
  • concept d'abstraction en génie logiciel
  • développement de langages intermédiaires dans les premiers systèmes
  • recherche sur les logiciels portables (par exemple, le système p-code)

Applications

  • compilateurs reciblables (par exemple, GCC, llvm)
  • compilation croisée pour différentes plates-formes matérielles
  • cadres d'optimisation indépendants du langage
  • développement de nouveaux langages de programmation en créant simplement un nouveau front-end
  • outils d'analyse statique fonctionnant sur une représentation intermédiaire

Brevets:

NA

Idées d'innovations potentielles

En raison du trafic généré par les robots de scraping, actuellement supérieur à 40 000 par jour, ce contenu est réservé aux membres de la communauté.
> Connexion < ou > Registre < (100% gratuit) pour y accéder, ainsi qu'à tous les autres contenus et outils à accès restreint.

En rapport avec : conception de compilateurs, front-end, middle-end, back-end, représentation intermédiaire, ir, optimisation, génération de code, modularité, GCC, llvm.

Contexte historique

La structure du compilateur en trois étapes

1975-06-01
1980
1980
1980
1986-01-01
1990
1990
1973
1980
1980
1980
1982-07-01
1988-06-01
1990
1993

(si la date est inconnue ou non pertinente, par exemple « mécanique des fluides », une estimation arrondie de son émergence notable est fournie)

Inventions, innovations et principes techniques connexes

Les images en pleine résolution et les téléchargements sont uniquement disponibles, et 100% gratuits, pour les membres inscrits.