En la programación de computadoras, cuando un compilador analiza el código fuente legible por humanos, el compilador a menudo traduce los comandos fuente en una secuencia de instrucciones que no son del todo código de máquina nativo pero que el compilador u otro software pueden procesar, optimizar o compilar. herramientas. Los archivos que se producen contienen instrucciones que se dice que están en un lenguaje intermedio, porque el lenguaje utilizado por el compilador no es significativo para el sistema operativo más grande ni el lenguaje utilizado por el programador para escribir el código en primer lugar, sino es un lenguaje que actúa como puente entre la escritura y la ejecución del programa. A veces se usa un lenguaje intermedio para permitir que un compilador haga optimizaciones muy precisas para que el programa se ejecute de manera más eficiente, pero también se puede usar para producir archivos de salida que son portátiles entre sistemas diferentes e incompatibles. La sintaxis real del lenguaje puede parecerse al código de máquina u otros tipos de código de bytes no legible por humanos, o el lenguaje puede ser simplemente un lenguaje de programación de computadora multiplataforma existente.
Cuando se usa para la optimización del compilador, un compilador de lenguaje toma cada declaración en un archivo de código fuente y divide el comando en el lenguaje intermedio. Una sola declaración de programación legible por humanos se puede dividir en docenas de instrucciones en lenguaje de máquina, por lo que el lenguaje intermedio crea un nivel de abstracción que el compilador puede usar para identificar áreas del código donde se pueden realizar optimizaciones sin tener primero que vincular el código a cualquier implementación o biblioteca nativa. Una vez completado, el archivo de código intermedio se puede compilar más para crear un archivo binario nativo, o se puede ejecutar a través de otro programa, conocido como intérprete, que ejecutará el código compilándolo en instrucciones nativas según sea necesario.
Algunos lenguajes, como Java®, utilizan un lenguaje intermedio para crear archivos compilados que están optimizados pero también portátiles a otros sistemas informáticos. Este tipo de código a veces se conoce como código de bytes y se parece al código de máquina o al lenguaje ensamblador. El código de bytes se almacena en archivos de una manera que es independiente de la plataforma, lo que significa que se puede transferir a cualquier sistema o dispositivo informático que pueda ejecutar un intérprete. Una vez que el código de bytes está en un sistema, puede ejecutarse como un programa interpretado o puede compilarse para ejecutarse de forma nativa en el sistema de destino.
En algunos casos, un lenguaje de computadora está diseñado para facilitar la programación hacia un fin específico, como una aplicación web interactiva, pero los diseñadores no quieren incluir compiladores, intérpretes o complementos personalizados para diferentes sistemas. En estos casos, el lenguaje intermedio del compilador puede ser un lenguaje existente que ya ha establecido intérpretes multiplataforma. El lenguaje intermedio resultante en este caso es legible por humanos. Un ejemplo de un lenguaje de programación de computadoras que también se utiliza como lenguaje intermedio es JavaScript®, que tiene la ventaja de poder ejecutarse en casi cualquier navegador web en cualquier plataforma, a partir de 2011.