Compilateur

Ce modèle est-il pertinent ? Cliquez pour en voir d'autres.
Cet article ne cite pas suffisamment ses sources (janvier 2009).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section «  Notes et références » (, comment ajouter mes sources ?).

Un compilateur est un programme informatique qui transforme un code source écrit dans un langage de programmation (le langage source) en un autre langage informatique (le langage cible). Pour qu'il puisse être exploité par la machine, le compilateur traduit le code source, écrit dans un langage de haut niveau d' abstraction, facilement compréhensible par l'humain, vers un langage de plus bas niveau, un langage d'assemblage ou langage machine. Dans le cas de langage semi-compilé (ou semi-interprété), le code source est traduit en un langage intermédiaire, sous forme binaire ( code objet ou bytecode), avant d'être lui-même interprété ou compilé. Inversement, un programme qui traduit un langage de bas niveau vers un langage de plus haut niveau est un décompilateur.

Un compilateur effectue les opérations suivantes : analyse lexicale, pré-traitement ( préprocesseur), analyse syntaxique (parsing), analyse sémantique, et génération de code optimisé. Quand le programme compilé (code objet) peut être exécuté sur un ordinateur dont le processeur ou le système d'exploitation est différent de celui du compilateur, on parle de compilation croisée. La compilation est souvent suivie d'une étape d’ édition des liens, pour générer un fichier exécutable.

On distingue deux options de compilation :

  • Ahead-of-time (AOT), où il faut compiler le programme avant de lancer l'application : c'est la situation traditionnelle.
  • Compilation à la volée (Just-in-Time, en abrégé JIT) : cette faculté est apparue dans les années 1980 (par ex. avec Tcl/Tk).

Historique

Les logiciels des premiers ordinateurs étaient écrits en langage assembleur [1]. Les langages de programmation de plus haut niveau (dans les couches d'abstraction) n'ont été inventés que lorsque les avantages apportés par la possibilité de réutiliser le logiciel sur différents types de processeurs sont devenus plus importants que le coût de l'écriture d'un compilateur. La capacité de mémoire très limitée des premiers ordinateurs a également posé plusieurs problèmes techniques dans le développement des compilateurs.

Vers la fin des années 1950, des langages de programmation indépendants des machines font pour la première fois leur apparition. Par la suite, plusieurs compilateurs expérimentaux sont développés. Le premier compilateur, A-0 System (pour le langage A-0) est écrit par Grace Hopper [2], en 1952. L'équipe FORTRAN dirigée par John Backus d' IBM est considérée comme ayant développé le premier compilateur complet [1], en 1957. COBOL, développé en 1959 et reprenant largement des idées de Grace Hopper [3], [4] est le premier langage à être compilé sur plusieurs architectures.

Dans plusieurs domaines d'application, l'idée d'utiliser un langage de plus haut niveau d'abstraction s'est rapidement répandue. Avec l'augmentation des fonctionnalités supportées par les langages de programmation plus récents et la complexité croissante de l'architecture des ordinateurs, les compilateurs se sont de plus en plus complexifiés.

En 1962, le premier compilateur « auto-hébergé » - capable de compiler son propre code source en langage de haut niveau - est créé, pour le Lisp, par Tim Hart et Mike Levin au Massachusetts Institute of Technology (MIT). À partir des années 1970, il est devenu très courant de développer un compilateur dans le langage qu'il doit compiler, faisant du Pascal et du C des langages de développement très populaires.

On peut aussi utiliser un langage ou un environnement spécialisé dans le développement de compilateurs : on parle lors d'outils de méta-compilation, et on utilise par exemple un compilateur de compilateur. Cette méthode est particulièrement utile pour réaliser le premier compilateur d'un nouveau langage ; l'utilisation d'un langage adapté et rigoureux facilite ensuite mise au point et évolution.

Other Languages
aragonés: Compilador
العربية: مترجم (مجمع)
asturianu: Compilador
azərbaycanca: Kompilyator
беларуская: Кампілятар
беларуская (тарашкевіца)‎: Кампілятар
български: Компилатор
bosanski: Kompajler
català: Compilador
کوردیی ناوەندی: کۆمپایلەر
čeština: Překladač
dansk: Compiler
Deutsch: Compiler
Zazaki: Arêkerdoğ
English: Compiler
Esperanto: Tradukilo
español: Compilador
euskara: Konpiladore
فارسی: کامپایلر
Gaeilge: Tiomsaitheoir
galego: Compilador
עברית: מהדר
हिन्दी: अनुभाषक
hornjoserbsce: Kompilator
Հայերեն: Կոմպիլյատոր
interlingua: Compilator
Bahasa Indonesia: Kompilator
Ilokano: Manggupgop
italiano: Compilatore
日本語: コンパイラ
ქართული: კომპილატორი
қазақша: Компилятор
한국어: 컴파일러
Кыргызча: Компилер
Latina: Compilatrum
Lëtzebuergesch: Compiler
lietuvių: Kompiliatorius
latviešu: Kompilators
олык марий: Компиляций
മലയാളം: കംപൈലർ
Bahasa Melayu: Penyusun
Mirandés: Cumpilador
မြန်မာဘာသာ: Compiler
नेपाली: कम्पाइलर
Nederlands: Compiler
norsk bokmål: Kompilator
ਪੰਜਾਬੀ: ਕੰਪਾਇਲਰ
polski: Kompilator
پنجابی: کمپائلر
português: Compilador
română: Compilator
русский: Компилятор
Scots: Compiler
srpskohrvatski / српскохрватски: Kompajler
Simple English: Compiler
slovenščina: Prevajalnik
српски / srpski: Компилатор
svenska: Kompilator
తెలుగు: కంపైలర్
Tagalog: Compiler
Türkçe: Derleyici
українська: Компілятор
اردو: کمپائلر
Tiếng Việt: Trình biên dịch
Winaray: Kompilador
ייִדיש: קאמפיילער
中文: 編譯器