Un programme doit être convertir de code source humain au code machine binaire (0/1) et là on obtient deux méthodes principales.
Compilation
Imagine qu'on a PC1 qui a un code source d'un programme. Pour l'exécuter il peut le compiler en fichier exécutable puis il peut l'exécuter à tout moment de manière rapide et simple. Même si PC1 veut partager son programme au PC2 il peut partager le fichier exécutable sans donner le code source, ce qui permet de protéger ce code.
Interprétation
PC1 peut exécuter son code source à chaque fois par l'interpréteur ligne par ligne et s'il veut le partager avec PC2 il est obligé de donner le code source.
Ici on peut dire : donc qui est le mieux, interprétation ou compilation ? Chacun a son avantage et ses inconvénients.
Par exemple la compilation est rapide, protège le code source et permet l'exécution directe, mais la compilation du code source peut être lente surtout si le programme est complexe, non cross-platforme, inflexible et il y a difficulté dans la gestion d'erreur.
D'un autre côté on a l'interprétation : elle est cross-platforme, la gestion d'erreur est meilleure et il est facile de tester les programmes. Par contre elle est lente, il n'y a pas de protection du code source s'il est partagé et il y a besoin de l'interpréteur à chaque fois qu'on veut exécuter le programme.
Modèle Hybride
En plus de ces deux méthodes il existe un modèle hybride des langages compilés et interprétés. Cela se base sur PC1 qui compile le code source en fichier de langage intermédiaire souvent appelé bytecode et celui-ci utilise une machine virtuelle (VM) pour l'interpréter, ou peut être compilé par JIT (Just-In-Time) pour accélérer l'exécution.
Exemples
Compilation
C, C++
Interprétation
PHP, JavaScript
Hybride
Java, C#
Conclusion
Le choix de quel type de langage utiliser se base sur le besoin principal du code. S'il y a besoin d'exécution rapide alors la compilation est un bon choix, et s'il y a besoin de cross-platforme l'interprétation va être mieux pour le programme.