Compilateur et interpréteur : explications et différence
Il convient d’observer deux choses lorsque l’on choisit un langage de programmation : d’une part, ce langage doit offrir tous les éléments nécessaires à la réalisation du projet logiciel prévu. D’autre part, la programmation et la mise en œuvre de ce projet doivent être aussi simples que possible. Dans ce cadre, la bonne lisibilité et la simplicité du code sont des atouts décisifs, car ces caractéristiques simplifient non seulement l’apprentissage du code, mais aussi l’utilisation quotidienne d’un langage de programmation.
Pour que les instructions d’un programme écrit puissent ensuite être comprises par un ordinateur ou un processeur, le code source des langages de programmation modernes doit tout d’abord être transposé dans une forme lisible par machine. Selon le langage de programmation, cette opération est effectuée par un compilateur ou un interpréteur. Mais à quoi correspondent ces deux outils exactement ? Et en quoi sont-ils différents ?
Qu’est-ce qu’un interpréteur ?
Un interpréteur est un programme informatique qui traite le code source d’un projet logiciel pendant son fonctionnement – c’est-à-dire pendant son exécution – et joue le rôle d’interface entre le projet et le processeur. Dans ce cadre, un interpréteur procède toujours ligne de code par ligne de code, de façon à ce que les différentes instructions soient lues, analysées et préparées pour le processeur dans l’ordre. Ce principe s’applique également aux instructions récurrentes qui sont à chaque fois ré-exécutées lorsque leur tour est arrivé. Pour traiter le code du logiciel, les interpréteurs utilisent leurs propres bibliothèques internes : lorsqu’une ligne de code source est convertie dans les commandes lisibles par machine correspondantes, elle est directement transmise au processeur.
Le processus de conversion est uniquement achevé lorsque l’ensemble du code a été interprété. Il n’est interrompu que si une erreur survient pendant le traitement, chose qui simplifie considérablement la gestion des erreurs, car la ligne de code posant problème est immédiatement identifiée lorsque l’erreur survient.
Parmi les langages de programmation les plus célèbres ayant majoritairement recours à un interpréteur pour la conversion du code source en code machine, on compte notamment BASIC, Perl, Python, Ruby et PHP. Ces langages sont d’ailleurs souvent réunis sous le terme de « langages interprétés ».
Qu’est-ce qu’un compilateur ?
Un compilateur est un programme informatique qui traduit l’ensemble du code source d’un projet logiciel en code machine avant son exécution. C’est uniquement après cette traduction que le projet sera exécuté par le processeur qui dispose de toutes les instructions sous forme de code machine avant le début du projet. De cette façon, le processeur a à disposition tous les éléments nécessaires pour exécuter le logiciel en question, traiter les données et générer le résultat. Dans de nombreux cas, une étape intermédiaire décisive a toutefois lieu pendant le processus de compilation : avant la traduction définitive en code machine, la plupart des compilateurs convertissent en effet le code source en code intermédiaire (également appelé « code objet ») qui est souvent adapté à différentes plateformes et peut être utilisé par un interpréteur.
Lors de la génération du code, les compilateurs définissent l’ordre dans lequel les instructions seront transmises au processeur. Si les instructions ne sont pas interdépendantes, le compilateur peut même traiter les instructions en parallèle.
Parmi les langages entièrement compilés, on compte notamment des piliers tels que C, C++ et Pascal.
Compilateur vs. interpréteur : aperçu des différences sous forme de tableau
Le compilateur et l’interpréteur servent tous deux à transposer le code du logiciel dans une forme lisible par machine exécutable. Sans cette traduction, les processeurs des ordinateurs ne pourraient pas exécuter les programmes dans des langages comme C, C++, PHP, Python ou Ruby. C’est la raison pour laquelle ces outils sont indispensables à l’utilisation de PC, d’ordinateurs portables et de smartphones. Les présentations succinctes effectuées précédemment ont déjà montré qu’il existait des différences importantes entre les compilateurs et les interpréteurs. Il convient d’en tenir compte dans le choix du langage de programmation adapté au nouveau logiciel. Le tableau suivant résume les principaux points de comparaison entre les « compilateurs et les interpréteurs » :
Interpréteurs | Compilateurs | |
---|---|---|
Moment de la traduction du code source | pendant le fonctionnement du logiciel | avant l’exécution du logiciel |
Méthode de traduction | ligne par ligne | toujours l’ensemble du code |
Affichage des erreurs de code | après chaque ligne | de façon groupée à la fin de la compilation |
Vitesse de traduction | élevée | faible |
Efficacité de la traduction | faible | élevée |
Effort de développement | faible | élevé |
Principaux langages | PHP, Perl, Python, Ruby, BASIC | C, C++, Pascal |
Les différences entre les compilateurs et les interpréteurs nous indiquent également les points forts et les points faibles de chaque solution en ce qui concerne la traduction du code du programme : les programmes interprétés sont exécutables immédiatement et bénéficient d’un lancement nettement plus rapide. Par ailleurs, le développement est nettement plus simple que pour une application compilée, car le processus de débogage (c’est-à-dire la correction des erreurs) fonctionne de la même façon que la traduction, à savoir ligne par ligne. Dans le cas d’un logiciel compilé, il est tout d’abord nécessaire de convertir l’intégralité du code avant de pouvoir corriger les erreurs ou de lancer l’application. Cependant, une fois le programme lancé, le compilateur n’est plus nécessaire alors qu’un interpréteur utilise toujours de la puissance de calcul.
Avantage | Inconvénient | |
---|---|---|
Interpréteurs | processus de développement simple (en particulier débogage) | processus de traduction peu efficace et vitesse d’exécution lente |
Compilateurs | Transmet au processeur l’intégralité du code machine prêt à l’emploi et exécutable | Toute modification du code nécessite une nouvelle traduction (correction des erreurs, extension du logiciel, etc.) |
Solution hybride entre le compilateur et l’interpréteur : le compilateur à la volée
Il existe par ailleurs une solution hybride qui permet de parer aux points faibles de ces deux solutions : le « compilateur just-in-time » (angl. pour « à temps ») ou « compilateur à la volée ». Ce type de compilateur particulier rompt avec l’approche traditionnelle du compilateur et traduit le code du programme pendant le fonctionnement, à l’instar d’un interpréteur. De cette façon, la vitesse d’exécution élevée (permise par le compilateur) est complétée par un processus de développement simplifié.
L’exemple le plus connu de langage basé sur le principe de la compilation à la volée est Java : en tant que composant de l’environnement d’exécution Java (JRE), un tel compilateur à la volée permet d’améliorer la performance des applications Java en convertissant le code binaire généré précédemment en code machine au moment de l’exécution.