Programmation

Quelle est la différence entre un langage compilé et un langage interprété ?

La réponse

Un langage compilé, comme C ou C++, est généralement traduit en code machine avant l'exécution, ce qui peut améliorer les performances, mais produit souvent un exécutable dépendant de la plateforme. Un langage interprété, comme Python ou JavaScript, est exécuté par un interpréteur ou un environnement d'exécution ; il est souvent plus portable, mais pas nécessairement exécuté ligne par ligne ni toujours moins performant.

En savoir plus

La différence entre langage compilé et langage interprété tient principalement au moment et à la manière dont le code est transformé pour être exécuté. Dans le premier cas, une traduction préalable produit généralement du code adapté à la machine cible ; dans le second, un interpréteur ou un environnement d’exécution prend en charge le programme au moment de son lancement. Cette distinction reste utile pour comprendre les questions de performance, de portabilité et de déploiement, mais elle ne constitue pas une séparation absolue : une même famille de langages peut être mise en œuvre de plusieurs façons selon les outils utilisés.

La compilation avant l’exécution

Avec un langage comme C ou C++, le code source est généralement traité par un compilateur avant l’exécution. Celui-ci le transforme en code machine, souvent après plusieurs étapes comme la compilation de différents fichiers et leur assemblage par l’éditeur de liens. Le résultat est habituellement un exécutable adapté à un système d’exploitation et à une architecture donnée, par exemple x86 ou ARM. Il peut donc être nécessaire de produire une nouvelle version pour une autre plateforme. Cette traduction anticipée peut améliorer les performances, car une partie importante du travail de transformation et d’optimisation est effectuée avant le lancement du programme. Elle ne signifie toutefois pas que toutes les erreurs sont détectées à ce stade : les erreurs de logique et de nombreuses erreurs liées à l’exécution ne peuvent apparaître qu’une fois le programme lancé.

L’exécution par un interpréteur

Dans un langage généralement associé à l’interprétation, comme Python ou JavaScript, le programme est pris en charge par un interpréteur ou par un environnement d’exécution. Celui-ci lit et traite les instructions selon les besoins du programme, sans qu’un exécutable machine autonome soit nécessairement produit à l’avance pour chaque plateforme. Le code peut ainsi être plus facilement utilisé sur différents systèmes disposant de l’environnement approprié, ce qui contribue à sa portabilité. Il est cependant inexact de dire qu’un interpréteur exécute toujours le programme strictement ligne par ligne : il peut analyser des portions de code, produire une représentation intermédiaire ou appliquer diverses optimisations. De même, l’interprétation n’implique pas automatiquement une moindre performance dans tous les cas ; celle-ci dépend notamment de l’implémentation, du programme et des optimisations employées.

Des modèles souvent hybrides

Les pratiques modernes combinent fréquemment compilation et interprétation. Java, par exemple, est généralement compilé en bytecode, une représentation intermédiaire exécutée par la machine virtuelle Java. Celle-ci peut interpréter ce bytecode ou compiler certaines parties à la volée en code machine grâce à la compilation JIT. Les environnements .NET suivent une logique comparable pour des langages comme C#, avec une compilation vers une représentation intermédiaire puis une exécution assurée par le runtime. JavaScript peut également être exécuté dans des moteurs capables d’analyser et de compiler dynamiquement le code, comme les moteurs utilisés par les navigateurs. À l’inverse, Go est habituellement compilé à l’avance en code machine pour produire un programme exécutable, et ne constitue pas un exemple de langage compilé à la volée comme le suggérait l’article initial.

Un choix lié au contexte

La compilation préalable peut être avantageuse lorsque la vitesse d’exécution, la maîtrise des ressources ou le déploiement d’un programme autonome sont prioritaires, par exemple pour certains logiciels système ou applications exigeantes. Un environnement interprété peut en revanche faciliter l’expérimentation, l’exécution sur plusieurs plateformes et la distribution du code, à condition que l’environnement requis soit disponible. Ces tendances ne sont pas des règles absolues : Python peut s’appuyer sur des bibliothèques dont les parties intensives sont compilées, tandis qu’un langage compilé peut dépendre de bibliothèques ou d’un environnement particulier. La distinction décrit donc surtout une stratégie d’exécution, et non une hiérarchie systématique entre les langages.

CultureG.org