VOOZH about

URL: https://fr.vikidia.org/wiki/Compilateur

⇱ Compilateur - Vikidia, l’encyclopédie des 8-13 ans


Compilateur

Une page de Vikidia, l’encyclopédie junior
Aller à la navigation Aller à la recherche
👁 Image
Grace Hopper en 1984.

En informatique, un compilateur est un programme qui traduit un fichier de code source (écrit dans un certain langage de programmation) en un autre fichier contenant du langage d’assemblage et décrivant un programme équivalent. Le fichier ainsi créé, écrit en langage d’assemblage, n’aura ensuite plus qu’à être traduit en binaire (c'est-à-dire en « langage machine ») pour être compris par l’ordinateur, qui pourra alors l'exécuter.

Chaque langage de programmation a son propre compilateur. Le premier compilateur a été écrit par Grace Hopper. L’un des compilateurs les plus connus aujourd’hui est le compilateur écrit par Richard Stallman pour le langage C, gcc. En réalité, ce n’est pas seulement un compilateur mais une suite de logiciels dont un compilateur, cc1.

Exemple de compilation[modifier | modifier le wikicode]

Un exemple en C : un fichier test.c contient le code source suivant…

// On a besoin de la fonction "write" qui se trouve dans le fichier "unistd.h", donc on inclut ce fichier
#include<unistd.h>

intmain(void)// La fonction principale du programme (et la seule)
{
// Affiche {{"|Hello World!}} suivi d’un retour à la ligne (\n) sur l’écran
write(STDOUT_FILENO,"Hello World!\n",13);
// Sort du programme
return(0);
}

Le compilateur transforme ce fichier source en fichier objet, écrit en langage d’assemblage :

.file"test.c"
.section.rodata
.LC0:
.string"Hello World!\n"
.text
.globlmain
.typemain,@function
main:
.LFB0:
.cfi_startproc
pushq%rbp
.cfi_def_cfa_offset16
.cfi_offset6,-16
movq%rsp,%rbp
.cfi_def_cfa_register6
movl{{unité|13|$}},%edx
movl$.LC0,%esi
movl{{unité|1|$}},%edi
callwrite
movl{{unité|0|$}},%eax
leave
.cfi_def_cfa7,8
ret
.cfi_endproc
.LFE0:
.sizemain,.-main
.ident"GCC: (GNU) 4.5.1 20100924 (Red Hat 4.5.1-4)"
.section.note.GNU-stack,"",@progbits

Puis l’assembleur et l’éditeur de liens finissent le travail pour produire un fichier binaire, illisible par un humain :

...

48 83 ec 08 e8 73 00 00 00 e8 02 01 00 00 e8 ed 

01 00 00 48 83 c4 08 c3 ff 35 ba 04 20 00 ff 25 

bc 04 20 00 0f 1f 40 00 ff 25 ba 04 20 00 68 00 

00 00 00 e9 e0 ff ff ff ff 25 b2 04 20 00 68 01 

31 ed 49 89 d1 5e 48 89 e2 48 83 e4 f0 50 54 49 

c7 c0 80 05 40 00 48 c7 c1 f0 04 40 00 48 c7 c7 

eb b0 06 60 00 48 c1 fb 03 48 83 eb 01 48 39 d8 

73 24 66 0f 1f 44 00 00 48 83 c0 01 48 89 05 25 

48 89 6c 24 d8 4c 89 64 24 e0 48 8d 2d 9b 01 20 

00 4c 8d 25 94 01 20 00 4c 89 6c 24 e8 4c 89 74 

24 f0 4c 89 7c 24 f8 48 89 5c 24 d0 48 83 ec 38 

4c 29 e5 41 89 fd 49 89 f6 48 c1 fd 03 49 89 d7

...
👁 Interrogation.svg
 Les fichiers binaires ne devraient-ils pas être écrits seulement avec des 0 et des 1 ?

Ça n'a aucune importance, car il s'agit simplement d'une façon comme une autre de représenter les mêmes nombres. Ici, plutôt que d’utiliser le binaire, on a écrit en hexadécimal, qui prend quatre fois moins de place. Pour cette raison, l’hexadécimal est très employé à la place du binaire.

L’exemple précédent permet de comprendre les différentes utilités d’un langage de programmation :

  • le code source est beaucoup plus simple à comprendre que du binaire ou même le langage d’assemblage ;
  • il est aussi beaucoup plus court à lire et à écrire.

De plus, chaque processeur peut avoir un langage d’assemblage différent des autres, ce qui fait que le code d’assemblage présenté plus haut a peu de chances de fonctionner sur un autre ordinateur pris au hasard. En revanche, le programme écrit en C n’est pas à adapter pour fonctionner sur tous les ordinateurs : lorsqu’il est recompilé, l’assembleur produit est automatiquement adapté à l’ordinateur qui compile !

Différence avec un interpréteur[modifier | modifier le wikicode]

Il ne faut pas confondre le compilateur avec l'interpréteur :

  • Le premier permet de traduire entièrement le code source en code exécutable. Ainsi à partir des fichiers sources, on obtient les fichiers exécutables, qui pourront être utilisés indépendamment. On n'a plus besoin du code source ni du compilateur pour l'exécution.
  • Avec un interpréteur, le code est traduit au fur et à mesure de l'exécution. On n'obtient pas de fichier exécutable : le code machine est donné à exécuter par l'interpréteur pendant qu'il lit le code source. Dans ce cas, le code source et l'interpréteur doivent être utilisés ensemble.

Voir aussi[modifier | modifier le wikicode]

Portail de l'informatique —  Tous les articles sur son histoire, les logiciels, Internet…
Récupérée de "http://fr.vikidia.org/w/index.php?title=Compilateur&oldid=1739580"

Menu de navigation