Código de bytes

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Bytecode (también llamado código portátil o p-code) es una forma de conjunto de instrucciones diseñado para una ejecución eficiente por parte de un intérprete de software. A diferencia del código fuente legible por humanos, los bytecodes son códigos numéricos compactos, constantes y referencias (normalmente direcciones numéricas) que codifican el resultado del análisis del compilador y la realización de análisis semánticos de elementos como el tipo, el alcance y la profundidad de anidamiento de los objetos del programa.

El nombre bytecode proviene de conjuntos de instrucciones que tienen códigos de operación de un byte seguidos de parámetros opcionales. Las representaciones intermedias, como el código de bytes, pueden generarse mediante implementaciones de lenguaje de programación para facilitar la interpretación, o pueden usarse para reducir la dependencia del hardware y del sistema operativo al permitir que el mismo código se ejecute entre plataformas, en diferentes dispositivos. El código de bytes a menudo se puede ejecutar directamente en una máquina virtual (una máquina de código p, es decir, un intérprete), o se puede compilar en código de máquina para un mejor rendimiento.

Dado que las instrucciones de código de bytes son procesadas por software, pueden ser arbitrariamente complejas, pero a menudo son similares a las instrucciones de hardware tradicionales: las máquinas de pila virtual son las más comunes, pero también se han construido máquinas de registro virtual. A menudo, las diferentes partes se pueden almacenar en archivos separados, de forma similar a los módulos de objetos, pero se cargan dinámicamente durante la ejecución.

Ejecución

Un programa de bytecode puede ejecutarse analizando y directamente ejecutando las instrucciones, una a la vez. Este tipo de intérprete de bytecode es muy portátil. Algunos sistemas, llamados traductores dinámicos o compiladores justo a tiempo (JIT), traducen el código de bytes en código de máquina según sea necesario en tiempo de ejecución. Esto hace que el hardware de la máquina virtual sea específico, pero no pierde la portabilidad del código de bytes. Por ejemplo, el código Java y Smalltalk normalmente se almacena en formato de código de bytes, que normalmente se compila JIT para traducir el código de bytes a código de máquina antes de la ejecución. Esto introduce un retraso antes de que se ejecute un programa, cuando el código de bytes se compila en código de máquina nativo, pero mejora considerablemente la velocidad de ejecución en comparación con la interpretación directa del código fuente, normalmente en un orden de magnitud (10x).

Debido a su ventaja de rendimiento, hoy en día muchas implementaciones de lenguaje ejecutan un programa en dos fases, primero compilando el código fuente en código de bytes y luego pasando el código de bytes a la máquina virtual. Hay máquinas virtuales basadas en código de bytes de este tipo para Java, Raku, Python, PHP, Tcl, mawk y Forth (sin embargo, Forth rara vez se compila a través de códigos de bytes de esta manera, y su máquina virtual es más genérica). En cambio, la implementación de Perl y Ruby 1.8 funciona recorriendo una representación de árbol de sintaxis abstracta derivada del código fuente.

Más recientemente, los autores de V8 y Dart han desafiado la noción de que se necesita un código de bytes intermedio para una implementación de VM rápida y eficiente. Ambas implementaciones de lenguaje actualmente realizan compilación JIT directa desde el código fuente al código de máquina sin intermediario de bytecode.

Ejemplos

  • ActionScript ejecuta en el ActionScript Virtual Machine (AVM), que es parte de Flash Player y AIR. El código ActionScript se transforma típicamente en formato bytecode por un compilador. Ejemplos de compiladores incluyen uno integrado en Adobe Flash Professional y uno incorporado en Adobe Flash Builder y disponible en el Adobe Flex SDK.
  • Adobe Flash objetos
  • BANCStar, originalmente bytecode para una herramienta de construcción de interfaces, pero utilizado también como idioma
  • Filtro de paquete de Berkeley
  • Berkeley Pascal
  • Biblioteca de Ingeniería de Códigos de Byte
  • C a compiladores de máquinas virtuales Java
  • Aplicación CLISP de Common Lisp utilizado para compilar sólo para bytecode durante muchos años; sin embargo, ahora también es compatible con la compilación de código nativo con la ayuda de GNU lightning
  • CMUCL y Scieneer Common Lisp implementaciones de Common Lisp pueden compilarse ya sea a código nativo o a bytecode, que es mucho más compacto
  • Intermedio Común Idioma ejecutado por Common Language Runtime, utilizado por. Idiomas NET como C#
  • Dalvik bytecode, diseñado para la plataforma Android, es ejecutado por la máquina virtual Dalvik
  • Dis bytecode, diseñado para el Inferno (sistema operativo), es ejecutado por la máquina virtual Dis
  • EiffelStudio para el idioma de programación Eiffel
  • EM, la máquina virtual de Amsterdam Compiler Kit utilizado como un lenguaje de compilación intermedio y como un lenguaje moderno de bytecode
  • Emacs es un editor de texto con la mayoría de sus funciones implementadas por Emacs Lisp, su dialecto incorporado de Lisp. Estas características se compilan en bytecode. Esta arquitectura permite a los usuarios personalizar el editor con un lenguaje de alto nivel, que después de compilar en bytecode produce un rendimiento razonable.
  • Aplicación de Lisp Común Embeddable puede compilarse a código de bytecode o C
  • Lisp común proporciona un disassemble función que imprime a la salida estándar el código subyacente de una función especificada. El resultado es dependiente de la implementación y puede o no resolver el bytecode. Su inspección puede utilizarse con fines de depuración y optimización. El banco de acero Lisp Común, por ejemplo, produce:
()desmontaje '()lambda ()x) ()impresión x)); desmontaje para (LAMBDA (X))); 2436F6DF: 850500000F22 TEST EAX, [#x220F0000]; E5: 8BD6 MOV EDX, ESI; E7: 8B05A8F63624 MOV EAX, [#x2436F6A8]; #Seguido FDEFINITION objeto para PRINT confianza; ED: B904000 MOV ECX, 4; F2: FF7504 PUSH DWORD PTR [EBP+4]; F5: FF6005 JMP DWORD PTR [EAX+5]; F8: CC0A BREAK 10; trampa de error; FA: 02 BYTE #X02; FB: 18 BYTE #X18; INVALID-ARG-COUNT-ERROR; FC: 4F BYTE #X4F; ECX
  • Ericsson la implementación de Erlang utiliza bytecodes BEAM
  • La máquina virtual de Ethereum (EVM) es el entorno de tiempo de ejecución, utilizando su propio código de bytecode, para la ejecución de transacciones en Ethereum (contratos inteligentes).
  • Idiomas de programación Icon y Unicon
  • Infocom utilizó el Z-machine para hacer sus aplicaciones de software más portátil
  • Java bytecode, que es ejecutado por la máquina virtual Java
    • ASM
    • BCEL
    • Javassist
  • Keiko bytecode utilizado por el lenguaje de programación Oberon-2 para hacerlo y el sistema operativo Oberon más portátil.
  • KEYB, el controlador de teclado MS-DOS/PC DOS con su archivo de recursos KEYBOARD. SYS contiene información de diseño y secuencias cortas de código p ejecutadas por un intérprete dentro del controlador residente.
  • LLVM IR
  • LSL, un lenguaje de scripting utilizado en mundos virtuales compila en bytecode corriendo en una máquina virtual. Second Life tiene la versión original de Mono, Inworldz desarrolló la versión Phlox.
  • El lenguaje de Lua utiliza una máquina virtual de código bytecode basada en registros
  • m-código del idioma MATLAB
  • Malbolge es un lenguaje de máquina esotérica para una máquina virtual ternaria.
  • Microsoft Código P utilizado en Visual C++ y Visual Basic
  • Multiplan
  • O-código del lenguaje de programación BCPL
  • El lenguaje OCaml compila opcionalmente a un formulario de bytecode compacto
  • código de aplicación Pascal de UCSD del idioma Pascal
  • Máquina virtual de loro
  • Elija BASIC también se conoce como Datos BASIC o Multivalo BASIC
  • El entorno R para el cálculo estadístico ofrece un compilador de códigos bytecode a través del paquete compilador, ahora estándar con la versión R 2.13.0. Es posible compilar esta versión de R para que la base y los paquetes recomendados explotan esto.
  • Juegos Pyramid 2000 aventura juego
  • Los scripts Python están siendo compilados en ejecución al lenguaje bytecode de Python, y los archivos compilados (.pyc) están caché dentro de la carpeta del script

El código compilado se puede analizar e investigar mediante una herramienta integrada para depurar el código de bytes de bajo nivel. La herramienta se puede inicializar desde el shell, por ejemplo:

, titulado importación distinciones # "dis" - Disassembler of Python byte code into mnemonics., titulado distinciones.distinciones()'print("Hola, Mundo!") ') 1 0 LOAD_NAME 0 (print) 2 LOAD_CONST 0 ('Hola, World!') 4 CALL_FUNCTION 1 6 RETURN_VALUE
  • Plan 48 de aplicación del Plan mediante el intérprete de códigos electrónicos
  • Bytecodes of many implementations of the Smalltalk language
  • El intérprete Spin se incorporó en el microcontrolador Parallax Propeller
  • El motor de base de datos SQLite traduce las declaraciones de SQL en un formato de código byte a medida.
  • Apple SWEET16
  • Tcl
  • TIMI es utilizado por los compiladores en la plataforma IBM i.
  • Tiny BASIC
  • Visual FoxPro compila para bytecode
  • WebAssembly
  • YARV y Rubinius para Ruby
  • ZCODE

Contenido relacionado

Penetrador de energía cinética

Un penetrador de energía cinética también conocido como penetrador de varilla larga es un tipo de munición diseñada para penetrar el blindaje de un...

Oficina estrella

StarOffice es una suite ofimática propietaria descontinuada, destinada a competir con Microsoft Office, líder en marketing. Sirvió como base para las...

Post Office Protocol (POP)

En informática, el Post Office Protocol castellanizado Protocolo de la Oficina Postal es un protocolo estándar de Internet de capa de aplicación que...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save