Código intermedio o bytecode: qué es y para qué sirve

Tabla de contenidos

Tabla de contenidos

Un código intermedio o bytecode es un lenguaje de programación que sirve como puente entre un lenguaje de programación de alto nivel y el código máquina que leen los microprocesadores en los ordenadores. Este código intermedio es una traducción del lenguaje de alto nivel que, posteriormente, un intérprete volverá a traducir a un lenguaje máquina que el hardware del ordenador pueda procesar. 

Un ejemplo conocido de código intermedio es el llamado código de tres direcciones, en el que cada instrucción en este código opera sobre tres elementos: dos operandos y un resultado.

¿Y para qué hace falta un código intermedio? Principalmente por razones prácticas de compatibilidad. El código intermedio se genera de forma independiente a cualquier requisito técnico del hardware o de la plataforma en la que se vaya a traducir, por lo que puede convertirse y amoldarse a sistemas operativos y sistemas informáticos diferentes.

¿Cómo funciona el código intermedio?

Imaginemos que queremos programar una aplicación informática en Python. En algún momento, deberemos transformar el código de Python en un lenguaje intermedio o bytecode. Así pues, este sería el proceso para generar código intermedio:

Generación de código de alto nivel

Un desarrollador crea un software programado con Python, o cualquier lenguaje de programación de alto nivel que otros desarrolladores pueden leer. En muchas ocasiones, los desarrolladores escriben el código de los programas en entornos de desarrollo integrados que cuentan con un amplio abanico de herramientas. Sin embargo, en este entorno el código no se puede traducir a un lenguaje legible para el hardware.

Compilación a código intermedio

Es un compilador la herramienta por excelencia que convierte el código fuente a código intermedio. Este programa traduce strings de código fuente a código intermedio, o a código máquina o a cualquier otro lenguaje de programación mediante análisis léxicos, sintácticos y semánticos.

Traducción definitiva a código máquina

Se instala un intérprete, una máquina virtual, en todos los sistemas informáticos donde se vaya a probar la aplicación. Este hará la traducción definitiva del código intermedio a un código máquina compuesto de números binarios (1 o 0) para que los procesadores informáticos pueden procesar el código final y ejecutarlo. 

Cabe mencionar que la máquina virtual que sirve como intérprete no es intercambiable entre diferentes sistemas operativos o arquitecturas de ordenadores, sino que cada cual requiere de un intérprete con características muy específicas.

Lenguajes de programación que utilizan código intermedio

Varios lenguajes de programación utilizan código intermedio como parte de su proceso de compilación o interpretación. Algunos son:

  • Java: El código fuente de Java se compila en bytecode para que después la Máquina Virtual Java lo interprete a código máquina.

  • C#: El código fuente de C# se compila en CIL (Common Intermediate Language), también conocido como MSIL (Microsoft Intermediate Language). El Common Language Runtime ejecuta el código, la máquina virtual de .NET.

  • JavaScript: Particularmente en motores avanzados como V8 en Google Chrome y Node.js, JavaScript también compila el código fuente en bytecode. 

Ejemplo de lenguaje intermedio

Este bytecode está generado en Javac, el compilador de Javay, y es ejecutable en una Máquina Virtual Java (JVM).

Primero, creemos un programa simple en Java ad hoc para el ejemplo que nos atañe:

public class HolaMundo {

    public static void main(String[] args) {

        System.out.println(«¡Hola, Mundo!»);

    }

}

 

Cuando este código se compila usando el comando javac HolaMundo.java, se genera un archivo de bytecode llamado HolaMundo.class. El contenido de este archivo no está orientado a la legibilidad en términos humanos, pero puede descompilarse con herramientas como javap (incluida en el JDK).

Si ejecutamos javap -c HolaMundo.class, obtendremos una representación del bytecode en un formato más legible. Este bytecode es una representación intermedia entre el código fuente de alto nivel (Java) y el código máquina específico de una plataforma. Posteriormente, la máquina virtual lo interpretará según el hardware específico para el que tenga que traducirlo:

Compiled from «HolaMundo.java»

public class HolaMundo {

  public HolaMundo();

    Code:

       0: aload_0

       1: invokespecial #1   // Method java/lang/Object.»<init>»:()V

       4: return

 

  public static void main(java.lang.String[]);

    Code:

       0: getstatic     #2   // Field java/lang/System.out:Ljava/io/PrintStream;

       3: ldc           #3   // String ¡Hola, Mundo!

       5: invokevirtual #4   // Method java/io/PrintStream.println:(Ljava/lang/String;)V

       8: return

}

Compartir en:

Artículos relacionados

adivinar loteria con chatgpt

Número de lotería con ChatGPT

Son varias las noticias que se han dado a conocer acerca de cual fue el número de la lotería de ChatGPT, que esta inteligencia artificial predijo como ganador del sorteo de la Lotería de Navidad del año 2023, así como otros casos en los

Cómo afecta la inteligencia artificial al ser humano

Son diversas las maneras cómo afecta la inteligencia artificial al ser humano, puesto que es una de las tecnologías que tiene más oportunidades de crecimiento en la actualidad, de forma que, todas aquellas empresas y negocios que desean tener un verdadero proceso de

Sophia Robot: el humanoide que transformará el futuro

La robótica ha evolucionado a pasos agigantados en los últimos años, y uno de los desarrollos más llamativos y populares es el robot Sophia, un humanoide creado por Hanson Robotics.  De este modo, Sophia no es tan solo otro robot más; esta ha

¿Cuál es la competencia de ChatGPT?

Existen diversas alternativas de la competencia de ChatGPT que ofrecen funcionalidades similares a esta inteligencia artificial desarrollada por OpenAI. De esta manera, estas herramientas no sólo compiten en términos de capacidad de procesamiento de lenguaje, sino también en aspectos como facilidad de uso,

Scroll al inicio