Bytecode

Un article de Wikipédia, l'encyclopédie libre.

Le bytecode est un code intermédiaire plus abstrait que le code machine non directement exécutable. Il est contenu dans un fichier binaire qui représente un programme, tout comme un fichier objet produit par un compilateur.

Il est appelé bytecode du fait de son format où chaque instruction est codée en binaire.

Puisque c'est un code qui n'est pas exécutable directement par un processeur (à l'exception de certains processeurs gérants le bytecode Java nativement), il est utilisé par les créateurs de langages de programmation comme un code intermédiaire réduisant la dépendance avec le matériel et facilitant son interprétation sur plusieurs architectures.

Certains compilateurs utilisent le bytecode comme représentation intermédiaire. Certains systèmes, appelés « traducteurs dynamiques », ou « compilateurs JIT (just-in-time) », traduisent le bytecode en code machine juste avant l'exécution, afin d'en augmenter la vitesse.

Un programme à base de bytecode est exécuté par un interpréteur appelé machine virtuelle, du fait qu'il s'agit d'un programme qui exécute le code tout comme un microprocesseur. L'avantage est la portabilité : le même bytecode peut être exécuté sur diverses plates-formes ou architectures pour laquelle un interpréteur existe. Un programme sous forme de bytecode peut donc être transmis d'une machine à une autre et être exécuté sans modification par la machine exécutrice quelle qu'elle soit. L'avantage est le même que pour les scripts, qui sont directement interprétés (et non compilés en bytecode). Cependant, le bytecode est moins abstrait, plus compact et plus facile à manipuler qu'un script, prévu, lui, pour être humainement intelligible. De ce fait les performances des interpréteurs de bytecode sont généralement bien meilleures que celles des interpréteurs de scripts.

Pour bénéficier de ces avantages, aujourd'hui de nombreux langages interprétés sont en fait compilés en bytecode avant d'être exécutés par un interpréteur. C'est le cas par exemple de PHP (lorsqu'il est utilisé pour des applications), Tcl et de Python. Un programme Java est habituellement transmis sous forme de bytecode à une machine hôte qui utilisera un compilateur JIT pour traduire le bytecode en code machine avant exécution. Les implémentations actuelles de Perl et de Ruby n'utilisent pas de bytecode, mais une structure en arbre qui se rapproche de la représentation intermédiaire des compilateurs.

Les p-Codes diffèrent des bytecodes par le codage de leurs opérations, qui peut être de plusieurs octets avec une taille variable, tout comme les opcodes de nombreux processeurs. Ils ont un plus haut niveau descriptif, comme « afficher cette chaine de caractères » ou encore « effacer l'écran ». Le BASIC et quelques versions de Pascal utilisent un p-Code.

[modifier] Exemples

[modifier] Voir aussi

wikt:

Voir « bytecode » sur le Wiktionnaire.