2010-10-15 7 views
1

lorsqu'un compilateur compile un langage de haut niveau dans la langue cible qui est exécutable, sous quelle forme se trouve la langue cible?type de code de sortie du compilateur

Est-ce un langage de niveau inférieur comme le code machine? Ou le compilateur traduit-il simplement les fonctions du système d'exploitation à partir de l'API du système d'exploitation et le système d'exploitation fait tout le travail sous le capot?

Répondre

2

Compilateurs peuvent avoir un certain nombre de sorties:

  1. code machine qui fonctionne directement sur l'ordinateur
  2. code intermédiaire qui est traduit en code machine à la volée, et
  3. code source pour un assembleur

L'avantage de l'option 2 est qu'elle permet à la sortie d'être portable vers différents ordinateurs, tant que vous disposez d'un code intermédiaire approprié pour Traducteur de code machine natif disponible pour la machine cible. C'est ainsi que Java est capable "d'écrire une fois, de courir n'importe où".

+0

alors quelle est la relation entre le langage de haut niveau et l'API du système d'exploitation? Mon hypothèse est que la JVM est implémentée en utilisant l'API de différents OS, donc tout le code .class doit utiliser l'API du système d'exploitation à la fin. mais pour c et C++ ils sont compilés directement dans le code machine ou le code intermédiaire? est-ce le cas? exactement quel est le code machine natif? – danny

+0

Les appels au système d'exploitation sont effectués en écrivant du code dans la langue en cours de compilation pour appeler les fonctions du système d'exploitation. Le compilateur crée ensuite un code machine qui appelle directement ces fonctions. Les langages C et C++ sont souvent utilisés pour écrire des systèmes d'exploitation. –

+0

Le code machine natif est un code qui peut être exécuté directement par le microprocesseur dans l'ordinateur. Le code intermédiaire passe par un traducteur (appelé compilateur Just-In-Time) qui traduit le langage intermédiaire en code machine natif, qui est ensuite exécutable par le microprocesseur. –

1

Un compilateur est un programme qui transforme un programme d'une représentation en une autre représentation. Cette représentation cible peut être n'importe quoi, à condition qu'elle soit au moins aussi puissante que la représentation source. En particulier, cela signifie que si la représentation de la source est Turing-complete, la représentation de la cible doit également être Turing-complete. Un compilateur peut compiler d'un langage de haut niveau à un autre langage de haut niveau (par exemple, GWT, qui compile Java en ECMAScript), d'un langage de haut niveau à un langage de bas niveau (par exemple, Gambit, qui compile Scheme à C), d'un langage de haut niveau au code machine (par exemple GCJ, qui compile Java en code natif), d'un langage de bas niveau à un langage de haut niveau (par exemple Clue, qui compile C en Java, Lua, Perl , ECMAScript et Common Lisp), d'un langage de bas niveau à un autre langage de bas niveau (par exemple le SDK Android, qui compile le bytecode JVML en bytecode Dalvik), d'un langage de bas niveau au code machine (par exemple le compilateur C1X partie de HotSpot, qui compile JVML bytecode en code machine), code machine en langage de haut niveau (tout appelé "decompiler"), code machine en langage de bas niveau (par exemple le compilateur JIT en JPC, qui compile x86 natif code à J VML bytecode) et le code natif en code natif (par ex. le compilateur JIT dans PearPC, qui compile le code natif PowerPC en code natif x86).

Questions connexes