Il existe trois modes généraux d’exécution pour les langages de haut niveau modernes:
Interprété Lorsque le code écrit dans un langage est interprété, sa syntaxe est lue puis exécutée directement, sans étape de compilation. Un programme appelé interprète lit chaque énoncé du programme, en suivant le flux du programme, puis décide de ce qu’il faut faire, et le fait. Un hybride d’un interprète et d’un compilateur compilera l’instruction en code machine et l’exécutera ; le code machine est ensuite écarté, pour être interprété à nouveau si la ligne est exécutée à nouveau. Les interprètes sont généralement les implémentations les plus simples du comportement d’un langage, par rapport aux deux autres variantes énumérées ici. Compilation Lorsque le code écrit dans un langage est compilé, sa syntaxe est transformée en une forme exécutable avant d’être exécutée. Il existe deux types de compilation : La génération de code machine Certains compilateurs compilent le code source directement en code machine. Il s’agit du mode original de compilation, et les langages qui sont directement et complètement transformés en code machine de cette manière peuvent être appelés des langages véritablement compilés. Voir langage d’assemblage. Représentations intermédiaires Lorsque le code écrit dans un langage est compilé dans une représentation intermédiaire, cette représentation peut être optimisée ou sauvegardée pour une exécution ultérieure sans avoir à relire le fichier source. Lorsque la représentation intermédiaire est enregistrée, elle peut se présenter sous une forme telle que le bytecode. La représentation intermédiaire doit alors être interprétée ou compilée plus avant pour être exécutée. Les machines virtuelles qui exécutent directement le bytecode ou le transforment en code machine ont brouillé la distinction autrefois claire entre les représentations intermédiaires et les langages véritablement compilés. Traduction ou transcompilation de source à source Le code écrit dans un langage peut être traduit en termes d’un langage de niveau inférieur pour lequel les compilateurs de code natif sont déjà courants. JavaScript et le langage C sont des cibles courantes pour de tels traducteurs. Voir CoffeeScript, Chicken Scheme et Eiffel comme exemples. Plus précisément, le code C et C++ généré peut être vu (tel que généré à partir du langage Eiffel lors de l’utilisation de l’IDE EiffelStudio) dans le répertoire EIFGENs de tout projet Eiffel compilé. En Eiffel, le processus de traduction est appelé transcompilation ou transcompilé, et le compilateur Eiffel comme un transcompilateur ou un compilateur source-à-source.
Notez que les langages ne sont pas strictement des langages interprétés ou des langages compilés. Plutôt, les implémentations du comportement du langage utilisent l’interprétation ou la compilation. Par exemple, ALGOL 60 et Fortran ont tous deux été interprétés (même s’ils étaient plus typiquement compilés). De même, Java montre la difficulté d’essayer d’appliquer ces étiquettes aux langages, plutôt qu’aux implémentations ; Java est compilé en bytecode qui est ensuite exécuté soit par interprétation (dans une machine virtuelle Java (JVM)), soit par compilation (généralement avec un compilateur juste-à-temps tel que HotSpot, toujours dans une JVM). De plus, la compilation, la transcompilation et l’interprétation ne sont pas strictement limitées à la seule description de l’artefact du compilateur (exécutable binaire ou assemblage IL).
Architecture informatique de langage de haut niveauEdit
Alternativement, il est possible qu’un langage de haut niveau soit directement implémenté par un ordinateur – l’ordinateur exécute directement le code HLL. C’est ce qu’on appelle une architecture informatique à langage de haut niveau – l’architecture informatique elle-même est conçue pour être ciblée par un langage de haut niveau spécifique. Les grands systèmes Burroughs étaient des machines cibles pour ALGOL 60, par exemple.