Compilation, interprétation et exécution
Un processeur n’exécute pas directement du JavaScript, du Python ou du C. Un outil doit transformer le code source en instructions exploitables.
Compilation avant l’exécution
Un compilateur analyse un programme et produit un autre artefact avant son exécution : code machine, bytecode ou représentation intermédiaire.
#include <stdio.h>
int main(void) {
printf("Bonjour !\n");
return 0;
}
gcc programme.c -o programme
./programme
Le compilateur peut détecter de nombreuses erreurs et optimiser l’ensemble du programme avant son lancement.
Interprétation
Un interpréteur pilote l’exécution à partir du programme et de son environnement d’exécution. L’expression « ligne par ligne » est utile pour débuter, mais elle est incomplète : l’outil analyse généralement le code et peut produire une forme intermédiaire.
print("Bonjour !")
Python compile notamment le code en bytecode avant que la machine virtuelle ne l’exécute.
Les moteurs modernes combinent les approches
Les moteurs JavaScript modernes analysent le code, produisent des représentations intermédiaires et compilent à la volée les portions souvent exécutées. On parle de compilation JIT (just in time).
Il est donc plus juste de poser trois questions :
- quelle transformation est faite avant l’exécution ?
- quel environnement exécute le résultat ?
- quelles optimisations sont réalisées pendant l’exécution ?
Analogie
- compiler ressemble à préparer et relire tout un itinéraire avant de partir ;
- interpréter ressemble à voyager avec un guide qui lit et exécute les étapes ;
- un moteur JIT observe les trajets répétés et prépare des raccourcis pour les passages les plus fréquents.