Comme d'autres l'ont dit, compilé et interprété sont spécifiques à une implémentation d'un langage de programmation; ils ne sont pas inhérents à la langue. Par exemple, il existe des interpréteurs C.
Cependant, nous pouvons (et en pratique nous le faisons) classer les langages de programmation en fonction de leur implémentation la plus courante (parfois canonique). Par exemple, nous disons que C est compilé.
Tout d'abord, nous devons définir sans ambiguïté des interprètes et des compilateurs:
Un interprète pour la langue X est un programme (ou une machine, ou tout simplement une sorte de mécanisme en général) qui exécute un programme p écrit en langage X tel qu'il exécute les effets et évalue les résultats prescrits par le cahier des charges de X .
Un compilateur de X à Y est un programme (ou une machine, ou juste une sorte de mécanisme en général) qui traduit tout programme p d'un langage X en un programme sémantiquement équivalent p ' dans un langage Y de telle manière que l'interprétation de p ' avec un interprète pour Y donneront les mêmes résultats et ont les mêmes effets que l' interprétation de p avec un interprète pour X .
Notez que du point de vue du programmeur, les CPU sont des interprètes machine pour leur langage machine natif respectif.
Maintenant, nous pouvons faire une classification provisoire des langages de programmation en 3 catégories en fonction de son implémentation la plus courante:
- Langages compilés en dur: lorsque les programmes sont entièrement compilés en langage machine. Le seul interpréteur utilisé est un CPU. Exemple: Habituellement, pour exécuter un programme en C, le code source est compilé en langage machine, qui est ensuite exécuté par une CPU.
- Langages interprétés: Lorsqu'il n'y a pas de compilation d'une partie quelconque du programme original en langage machine. En d'autres termes, aucun nouveau code machine n'est généré; seul le code machine existant est exécuté. Un interpréteur autre que le processeur doit également être utilisé (généralement un programme). Exemple: Dans l'implémentation canonique de Python, le code source est d'abord compilé en bytecode Python , puis ce bytecode est exécuté par CPython, un programme d'interprétation pour le bytecode Python .
- Langages compilés logiciels: Lorsqu'un interpréteur autre que le processeur est utilisé, mais également des parties du programme d'origine peuvent être compilées en langage machine. C'est le cas de Java, où le code source est d'abord compilé en bytecode, puis le bytecode peut être interprété par l'interpréteur Java et / ou compilé ultérieurement par le compilateur JIT.
Parfois, les langages compilés souples et durs sont simplement appelés compilés, donc on dit que C #, Java, C, C ++ sont compilés.
Dans cette catégorisation, JavaScript était autrefois un langage interprété, mais c'était il y a de nombreuses années. De nos jours, il est compilé en JIT en langage machine natif dans la plupart des principales implémentations JavaScript, donc je dirais qu'il tombe dans des langages compilés souples.