Présentation
EnglishNOTE DE L'ÉDITEUR
Cet article est la réédition actualisée de l’article H 3 168 intitulé Compilateurs paru en 1996, rédigé par Bernard LOHRO.
RÉSUMÉ
Un compilateur est un logiciel permettant de transformer un programme source (écrit dans un langage de programmation) dans un autre langage de programmation cible, le plus souvent dans le langage d’un processeur permettant d’exécuter le dit programme. Nous verrons dans cet article les grands principes d’un compilateur, les technologies utilisées ainsi que d’autres usages de la compilation.
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleAuteur(s)
-
Henri-Pierre Charles : Directeur de recherche, CEA-Grenoble
-
Christian Fabre : Ingénieur Chercheur Senior, CEA-Grenoble
INTRODUCTION
L’architecture des ordinateurs et les applications informatiques ont toujours été en grande évolution. La compilation étant à la frontière de ces deux mondes en pleine évolution, il est naturel qu’elle ait évolué de concert.
Schématiquement on pourrait découper l’histoire de la compilation en quatre grandes périodes :
1950-1970 : Durant cette période, les principales notions d’architecture matérielle étaient en place, mais il était difficile de programmer les ordinateurs qui étaient de volumineuses machines.
Les expressions rationnelles (1956) qui utilisent la théorie des automates finis et les analyseurs syntaxiques (1965) ont permis la création d’outils pour créer des langages de programmation et leur compilation. COBOL et FORTRAN (1957) ont été les premiers langages informatiques compilés.
On peut dire que cette période correspond à la création des fondements théoriques et pratique de la compilation
1970-1990 : C’est durant cette période que l’électronique grand public a été popularisée. Le processeur Intel 4004 (1971) est le premier processeur grand public, le processeur Intel 386 a été la base de la popularité des PC (Personnal Computer). Le processeur MIPS a été créé (1984), il a introduit la notion d’architecture RISC. C’est également durant cette période que Gordon Moore a réévalué sa célèbre loi indiquant « que le nombre de transistors des microprocesseurs sur une puce de silicium double tous les deux ans »
C’est pendant cette période qu’ont été créés les langages C (1972) et C++ (1983) et le premier compilateur open source GCC 1.0. Ce compilateur a eu un succès énorme et a reçu l’adhésion de beaucoup de constructeurs informatiques.
Les objectifs de la compilation d’un programme étaient alors : « de fournir un programme binaire sémantiquement équivalent au programme source ». Les optimisations étaient encore peu développées.
1990-2000 : Cette période fut très riche par la création de nouveaux concepts architecturaux : pipelines, processeurs superscalaires, mémoire caches, machine parallèles.
C’est durant cette période qu’a été créé le langage Java (1995) et qui a largement diffusé la compilation au vol (1999).
Les objectifs de la compilation d’un programme sont devenus : « de fournir un programme binaire sémantiquement équivalent qui utilise au mieux les concepts architecturaux ». Les phases d’optimisation sont devenues de plus en plus complexes. Les premiers outils pour la programmation parallèles comme MPI pour le passage de message entre processeurs (1991) ou OpenMP pour la parallélisation automatique (1997) ont été créés.
2000-2017 : Cette dernière période a vu exploser la complexité des architectures : processeurs multicœurs, co-processeurs graphiques (GPU). Les langages CUDA (2007) et OpenCL (2009) sont apparus à cette période.
Le compilateur open source LLVM est apparu en 2003. Créé comme un projet de recherche, il a ensuite reçu le support des entreprise Apple et Google qui l’ont aidé à évoluer.
Les objectifs de la compilation ont encore changé pour arriver : à fournir plusieurs programmes binaires optimisés pour exploiter les différents cœurs de l’ordinateur (hétérogènes ou non).
MOTS-CLÉS
parallélisme d'instructions processeur langage de programmation compilateur architecture des ordinateurs allocation de ressources analyse lexicale analyse syntaxique optimisation de programme
VERSIONS
- Version archivée 1 de juin 1996 par Bernard LORHO
DOI (Digital Object Identifier)
CET ARTICLE SE TROUVE ÉGALEMENT DANS :
Accueil > Ressources documentaires > Technologies de l'information > Technologies logicielles Architectures des systèmes > Programmation > Compilateur > Technologies pour le compilateur
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
6. Technologies pour le compilateur
Un compilateur est un logiciel complexe qui est l’aboutissement de nombreuses avancées scientifiques. Il est composé de multiples outils qui peuvent être utiles séparément.
6.1 Lexer / Parser
En particulier, une des difficultés historiques des compilateurs a été la création de techniques permettant de définir la grammaire d’un programme et d’analyser un texte source d’un programme.
Deux technologies de bases sont utilisées : l’analyse lexicale et l’analyse syntaxique.
HAUT DE PAGE6.1.1 Lexer : Expressions rationnelles
L’analyse lexicale permet de découper un programme en lexèmes, c’est-à-dire en morceaux de phrases qui seront plus facilement analysables par la suite.
Par exemple la phrase suivante d’un programme
sum = sum + 2;
sera traduite dans une suite de lexèmes :
Les logiciels lex et ANTLR sont parmi les plus connus des outils d’analyse lexicale .
Il permettent de décrire les éléments (les « mots » ou token) qui composent le langage de programmation. Cette description est réalisée en utilisant des expression rationnelles (Regular expression).
Par exemple la description des noms de variable pourra être décrite par l’expression :
1 [a—zA—Z][a—zA—Z0—9]*
qui indiquera que le nom d’une variable est constitué d’une lettre majuscule ou minuscule [a-zA-Z]...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Technologies pour le compilateur
BIBLIOGRAPHIE
-
(1) - FRIGO (M.) - A fast Fourier transform compiler. - ACM SIGPLAN Notices, 39(4):642–655 (2004).
-
(2) - PUSCHEL (M.), MOURA (J.MF.), JOHNSON (J.R.), PADUA (D.), VELOSO (M.M.), SINGER (B.W.), XIONG (J.), FRANCHETTI (F.), GACIC (A.), VORONENKO (Y.) and others - SPIRAL : Code generation for DSP transforms. - Proceedings of the IEEE, 93(2):232–275 (2005).
-
(3) - ISO - The ANSI C standard (C99). - Technical Report WG14 N1124, ISO/IEC (1999).
-
(4) - ISO - Microprocessor Systems – Floating-Point arithmetic. - Technical Report ISO/IEC/IEEE 60559:2011, ISO/IEC (2011).
-
(5) - American National Standards Institute, 1430 Broadway, New York, NY 10018, USA - Military Standard Ada Programming Language, - February 1983. Also MIL-STD-1815A.
-
(6) - Bjarne Stroustrup - The...
DANS NOS BASES DOCUMENTAIRES
ANNEXES
ARM
Open MP
MPI
Projet PIPS
FRAMA – C
GCC
LLVM
OpenCL
https://www.khronos.org/opencl
Open ACC
HAUT DE PAGECet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive