J'entends toujours le terme et toutes les recherches Google me conduisent à des articles sur les compilateurs. Je veux juste comprendre ce que le terme cible de compilation signifie: |
MISE À JOUR: Pour donner un peu de contexte: j'ai entendu dire que l'assembly Web est une cible de compilation pour d'autres langages tels que C, C ++, Rust, etc.
Réponses:
Les compilateurs sont, par essence, des traducteurs qui prennent des entrées dans une langue et produisent des sorties dans une autre. Par exemple, le compilateur Eiffel Software prend l'entrée en langage Eiffel et produit C. GCC pour Intel lit l'entrée en langage C et produit l'assemblage x86. L'assembleur GAS pour Intel prend l'assembly x86 et produit le code objet x86. Ces trois choses sont techniquement des compilateurs.
Quel que soit le format, l'entrée lue par un compilateur est appelée la source et la sortie est appelée la cible . Ce dernier terme est tiré de l'une de ses définitions, «résultat escompté».
La majorité des compilateurs sont conçus pour produire un code assembleur ou objet pour un processeur ou une architecture particulière. Pour cette raison, la cible est souvent utilisée pour faire référence à l'architecture elle-même plutôt qu'au format de sortie.
La cible d'un compilateur n'a pas besoin d'être la même que l'architecture où il s'exécute, et dans les cas où cela se produit, le programme est appelé un compilateur croisé . (Par exemple, GCC peut être construit pour fonctionner sur des systèmes x86 afin de compiler C en assembleur ARM.)
De plus, il existe des compilateurs uniques capables de produire une sortie pour différentes cibles en fonction de l'entrée, comme des commutateurs sur la ligne de commande. Ils sont appelés compilateurs multi-cibles .
la source
En traduction, que la langue soit une langue naturelle comme l'anglais ou une langue artificielle comme le C, nous utilisons la source et la cible terminologiques pour parler de l' entrée et de la sortie d'un système de traduction. En traduction en langage naturel, le système est le cerveau humain compétent capable de traduire entre deux langues. Dans les langages de programmation, c'est un compilateur.
Ainsi, la source d'un compilateur est le langage de programmation (C), tandis que la cible est le bytecode (instructions au niveau de la machine). Nous utilisons souvent target dans la compilation car différents systèmes (architectures CPU) ont des jeux d'instructions différents, par exemple ARM, MIPS, etc. Le compilateur doit savoir quel jeu d'instructions est la cible, afin de pouvoir créer la sortie correcte (bytecode).
la source
WebAssemby est quelque chose de plus récent et de plus grand, qui convertit le code c / c ++ au format binaire.
Voici le lien où l'une des applications que vous pouvez voir, à quelle vitesse il convertit le programme factoriel simple en code machine.
Vérifiez cette bête, https://godbolt.org/
Vous pouvez utiliser cet exemple de programme pour exécuter dans ce site pour voir l'assembly.
Quelques informations de base sur l'hôte et la cible, comment le langage de programmation est traduit en 10101010.
GCC convertit le code C / C ++ en code assembleur. Un outil appelé "assembleur" convertit le code assembleur en code machine et un outil appelé "éditeur de liens" connecte plusieurs fichiers de code machine en un seul fichier exécutable (.EXE sous Windows). La plupart de ces compilateurs vous permettent d'écrire le code assembleur résultant dans un fichier afin que vous puissiez consulter le code assembleur ou le modifier.
L'assembleur et l'éditeur de liens font partie de la chaîne d'outils, ce qui signifie qu'ils sont généralement fournis avec le compilateur.
Certains compilateurs (comme Microsoft) convertissent cependant directement le code C / C ++ en langage machine, donc aucun assembleur n'est plus nécessaire. Beaucoup de ces compilateurs ne sont pas en mesure de créer du code assembleur, vous ne pouvez donc pas écrire le code assembleur dans un fichier.
Soit dit en passant: il existe même des compilateurs (pas pour C / C ++, mais pour d'autres langages de programmation) qui créent directement un fichier .EXE, donc aucun éditeur de liens n'est requis.
la source