close

Code d'octet

Aller à la navigation Aller à la recherche

Le bytecode ou code intermédiaire [ 1 ] ​[ 2 ] ​[ 3 ]​ est un langage intermédiaire plus abstrait que le langage machine . Il est généralement traité comme un fichier binaire contenant un programme exécutable similaire à un module objet, qui est un fichier binaire produit par le compilateur dont le contenu est du code objet ou du code machine.

Le code intermédiaire tire son nom du fait que chaque opcode a généralement une longueur d'un octet , bien que la longueur des codes d'instruction varie. Chaque instruction a un opcode compris entre 0 et 255 suivi de paramètres tels que des registres ou des adresses mémoire. Ce serait la description d'un cas typique, bien que la spécification du bytecode dépende largement de la langue.

En tant que code intermédiaire, il s'agit d'une forme de sortie utilisée par les implémenteurs de langage pour réduire la dépendance vis-à-vis d'un matériel spécifique et pour faciliter son interprétation. Moins fréquemment, le bytecode est utilisé comme code intermédiaire dans un compilateur. Certains systèmes, appelés traducteurs dynamiques ou compilateurs juste-à-temps, traduisent le bytecode en code machine immédiatement avant l'exécution pour améliorer la vitesse d'exécution.

Les programmes de bytecode sont généralement interprétés par un interpréteur de bytecode ( généralement appelé machine virtuelle , car il est analogue à un ordinateur). Son avantage est sa portabilité : le même code binaire peut être exécuté sur différentes plateformes et architectures. C'est le même avantage que présentent les langues interprétées. Cependant, comme le bytecode est généralement moins abstrait, plus compact et plus orienté machine qu'un programme destiné à être modifié par l'homme, ses performances sont souvent meilleures que celles des langages interprétés. En raison de cette amélioration des performances, de nombreux langages interprétés sont, en fait, compilés en bytecode puis exécutés par un interpréteur de bytecode . Parmi ces langages figurent Perl , Gambas , PHP et Python . Dans le cas de Java , il est généralement transmis sous forme de bytecode à la machine réceptrice, qui utilise un compilateur juste-à-temps pour compiler le bytecode en code machine natif avant l'exécution, économisant ainsi les processus d'interprétation.

Sont également intéressants les soi-disant p-codes, similaires aux codes intermédiaires mais dont les opcodes peuvent être constitués de plus d'un octet et peuvent être de taille variable, comme les opcodes de nombreux processeurs. Ces codes fonctionnent à un niveau très élevé, y compris des instructions telles que "imprimer cette chaîne" ou "effacer l'écran". Par exemple, BASIC utilise p-Code.

En novembre 2019, Mozilla, Fasty, Intel et Red Hat forment la Bytecode Alliance, une société qui vise à promouvoir l'utilisation du langage WebAssembly dans les environnements Linux et intégrant tout navigateur tel que Safari, Chrome ou Firefox. [ 4 ]

Exemples

>>>  import  dis  # "dis" - Désassembleur de bytecode Python en mnémoniques. 
>>>  dis . dis ( 'print("Hello, World!")' ) 
           1  0  LOAD_NAME      0  ( print ) 
             2  LOAD_CONST     0  ( 'Hello, World!' ) 
             4  CALL_FUNCTION  1 
             6  RETURN_VALUE
  • ActionScript s'exécute dans la machine virtuelle ActionScript (AVM), qui fait partie de Flash Player et d' AIR . Le code ActionScript est normalement converti au format bytecode par un compilateur . Des exemples de compilateurs incluent un intégré à Adobe Flash Professional et un intégré à Adobe Flash Builder et disponible dans le SDK Adobe Flex.
  • Objets Adobe Flash
  • BANCStar , à l'origine bytecode pour un outil de création d'interface mais également utilisé comme langage
  • Filtre de paquets Berkeley
  • Bibliothèque d'ingénierie de bytecode
  • Compilateurs de machines virtuelles C vers Java
  • Implémentation CLISP de Common Lisp utilisée pour compiler uniquement en bytecode pendant de nombreuses années; cependant, il prend désormais également en charge la compilation en code natif à l'aide de la foudre GNU
  • Les implémentations CMUCL et Scieneer Common Lisp de Common Lisp peuvent être compilées à la fois en code natif et en bytecode, ce qui est beaucoup plus compact
  • Common Intermediate Language exécuté par le Common Language Runtime , utilisé par les langages .NET Framework tels que C # .
  • Le bytecode Dalvik, conçu pour la plate- forme Android , est exécuté par la machine virtuelle Dalvik
  • Le bytecode Dis, conçu pour l' Inferno (système d'exploitation) , est exécuté par la machine virtuelle Dis
  • EiffelStudio pour le langage de programmation Eiffel
  • EM , la machine virtuelle Amsterdam Compiler Kit utilisée à la fois comme langage intermédiaire de compilation et comme langage de bytecode moderne
  • Emacs est un éditeur de texte dont la plupart des fonctions sont implémentées par Emacs Lisp , son dialecte intégré de Lisp. Ces fonctions sont compilées en bytecode . Cette architecture permet aux utilisateurs de personnaliser l'éditeur avec un langage de haut niveau qui, après compilation en bytecode, produit des performances raisonnables.
  • L'implémentation Embeddable Common Lisp de Common Lisp peut se compiler en bytecode ou en code C
  • L'implémentation Ericsson d' Erlang utilise les bytecodes BEAM
  • Langages de programmation Icon et Unicon
  • Infocom a utilisé la Z-machine pour rendre ses applications logicielles plus portables
  • Java bytecode , qui est exécuté par la machine virtuelle Java
    • ASM
    • BCEL
    • Javasiste
    • JMangler
  • KEYB, le pilote de clavier MS-DOS / PC DOS avec son fichier de ressources KEYBOARD.SYS contenant des informations de disposition et de courtes séquences de p-code exécutées par un interpréteur dans le pilote résident.
  • LSL, un langage de script utilisé dans les mondes virtuels, se compile en bytecode qui est exécuté dans une machine virtuelle. Second Life a la version Mono originale, Inworldz a développé la version Phlox.
  • Le langage Lua utilise une machine virtuelle basée sur un registre
  • Code m du langage MATLAB
  • multi-plan
  • O-code du langage de programmation BCPL
  • OCaml du langage se compile éventuellement en une forme compacte de bytecode
  • p-code de l' implémentation UCSD Pascal du langage Pascal
  • Machine virtuelle perroquet
  • Choisissez BASIC alias Data BASIC ou MultiValue BASIC
  • L' environnement R pour le calcul statistique propose un compilateur de bytecode via le package compilateur, désormais standard avec la version 2.13.0 de R. Il est possible de compiler cette version de R afin que les packages de base et recommandés l'exploitent.
  • Jeu d'aventure Pyramide 2000
  • Schéma 48 Implémentation du schéma à l'aide de l' interpréteur de bytecode
  • Bytecodes de nombreuses implémentations du langage Smalltalk
  • L' interpréteur de spin intégré au microcontrôleur Parallax Propeller
  • Le moteur de base de données SQLite traduit les instructions SQL dans un format de bytecode personnalisé.
  • DOUX16
  • TCL
  • Minuscule BASIC
  • Visual FoxPro compile en bytecode
  • WebAssembly
  • YARV et Rubinius pour Ruby

Références

  1. ^ Loup, Gunnar (9 septembre 2015). Fondamentaux des systèmes d'exploitation . Lulu.com. ISBN  978-607-02-6544-0 . Consulté le 5 août 2022 . 
  2. Pérez, Juan Carlos Moreno. Programmation Orientée Objet . Groupe d'édition RA-MA . Consulté le 5 août 2022 . 
  3. Zapien, Rosa Hernández de Lapién (2005). Terminologie informatique Apex pour les interprètes. Glossaire anglais-espagnol. . Rosie Zapien. ISBN  978-0-9772521-4-5 . Consulté le 5 août 2022 . 
  4. "Mozilla, Fasty, Intel et Red Hat forment la Bytecode Alliance." .