ToutSurTout.biz
La différence entre langages compilés et interprétés


http://img150.imageshack.us/img150/9315/flickrcompilation9fd.jpg



Expliquez-moi... La différence entre langages compilés et interprétés
Compilation ou interprétation ? Les clefs pour comprendre l'importance de cette différence fondamentale entre les implémentations de langages de programmation.

Les langages de programmation actuels sont majoritairement de deux sortes : compilés ou interprétés. Lors du choix d'un langage pour un projet, cet aspect fondamental peut faire pencher la balance. Avec la montée en puissance des processeurs, les différences tendent à s'estomper, mais il reste utile de les connaître.

Compilation ou interprétation sont en effet les premières indications pour savoir si un langage aboutira à un programme s'exécutant rapidement ou non sur la machine. En effet, malgré les améliorations des interpréteurs et des processeurs, les programmes compilés sont réputés toujours plus rapides que ceux interprétés, et sont en conséquence plus indiqués au sein de projet où la vitesse de calcul est primordiale (par exemple, exécuter des milliers de tests préventifs pendant le décollage d'une navette spatiale).

Un langage est dit compilé quand son implémentation exécutable requiert un compilateur. De la même manière, un langage interprété requiert un interprète. Théoriquement, un langage pourrait être aussi bien implémenté à l'aide d'un compilateur que d'un interprète, mais l'appellation se base sur l'usage typique du langage. Ruby est un langage dit interprété, mais il existe également des solutions pour le compiler, certes moins utilisées.

La différence centrale entre compilé et interprété est comme suit : là où le compilateur traduit une bonne fois pour toute un code source en un fichier indépendant exécutable (donc utilisant du code machine ou du code d'assemblage), l'interprète est nécessaire à chaque lancement du programme interprété, pour traduire au fur et à mesure le code source en code machine. Cette traduction à la volée est la cause première de la lenteur des langages dits interprétés.

De fait, ces derniers ont pendant longtemps été mal perçus par les développeurs, jusqu'à ce que leur utilisation finisse par avoir plus d'avantages que d'inconvénients. L'amélioration constante des processeurs est venue à bout du problème d'extrême lenteur, la facilité d'évolution d'un programme interprété a changé la vision des développeurs pressés, et la rapidité de mise en place de petits programmes les ont rendus indispensables au quotidien, notamment pour les applications Web.

Avec les besoins de l'interopérabilité, une troisième voie s'ouvre : celle des langages compilés en langage intermédiaire bytecode, lui-même interprété (ou compilé) au sein d'une machine virtuelle spécifique ou non au langage. Java en est l'exemple le plus frappant, mais bien d'autres langages actuels utilisent ce principe : PHP, Perl, Python, les langages .Net, SQL, Tcl...

Le fonctionnement des machines virtuelles peut cependant varier : les bytescodes Java sont compilés à la volée par un mécanisme de JVM appelé Just-In-Time Compiler, tandis que ceux de Python sont interprétés. La machine virtuelle Java devrait d'ailleurs s'étendre dans les prochaines versions pour autoriser l'exécution de bytecodes d'autres langages...