Tabla de contenidos
Una computadora no puede comprender de forma independiente las instrucciones que un desarrollador escribe en forma de código de programa. Las instrucciones del código deben ser traducidas a lenguaje de máquina por un llamado compilador o interpretadas por un llamado intérprete en tiempo de ejecución. En el siguiente artículo, profundizaremos en el tema de los compiladores y veremos los detalles de esta tecnología en el contexto de otras técnicas.
Leer: ¿Qué es ISPConfig?
¿Qué es un compilador?
Los lenguajes de programación modernos como Java, Python o JavaScript están diseñados de tal forma que los programadores pueden leerlos y escribirlos sin mayores problemas. Para que una computadora/PC pueda hacer algo con los comandos individuales de un programa, primero se debe traducir el código fuente a un lenguaje que la computadora pueda entender.
Según el lenguaje de programación y la plataforma esto lo implementa un compilador o un intérprete, por ejemplo. Un compilador es un software que convierte el código fuente en lenguaje de máquina. En términos concretos, esto significa que un compilador traduce todo el programa de computadora de un lenguaje de programación a un lenguaje de máquina. El código del programa se traduce en su totalidad antes de ejecutar el programa en la computadora.
Código intermedio
En muchos casos, se introduce un paso intermedio antes de que el programa se convierta en código de máquina. En este paso, el código fuente del programa se traduce primero en el llamado «código intermedio», como código objeto o código de bytes. El código intermedio tiene la clara ventaja de que, en la mayoría de los casos, se puede ejecutar en diferentes plataformas sin tener que volver a compilarlo. También puede ser procesado por un intérprete, como es el caso, por ejemplo, del lenguaje de programación Java.
A partir de este código intermedio, el intérprete traduce el código de la máquina desde la plataforma de destino respectiva. A continuación, se crea un archivo ejecutable (archivo EXE) utilizando el enlazador. Los lenguajes de programación de niveles superiores, como Java o C#, suelen trabajar con código objeto o byte, mientras que los lenguajes de programación que están más cerca del nivel de hardware solo funcionan con código máquina.
Lenguaje de máquina
Durante la compilación, el compilador inicia varios pasos para convertir el código fuente respectivo en un programa informático ejecutable. Cuanto más grande y complicado es el código fuente, más tiempo y recursos se requieren para la compilación. Sin embargo, una vez que el programa es ejecutable, puede ejecutarse mucho más rápido y de manera más eficiente que los programas interpretados.
Esto se debe al hecho de que todas las instrucciones y llamadas al sistema ya están completamente en un lenguaje de máquina que la computadora puede entender. Ejemplos de lenguajes compiladores puros son Pascal, C y C++.
Leer: ¿Qué es y cómo funciona OnlyFans?
¿Qué es un intérprete?
Un intérprete, como el lenguaje de programación BASIC, es un programa informático que procesa el código fuente de una aplicación en tiempo de ejecución. El intérprete procede línea por línea: un comando se registra, analiza y ejecuta inmediatamente. Después de eso, continúa con el siguiente comando hasta que se alcanza el final del código fuente o, alternativamente, un error detiene el proceso.
Tan pronto como algo anda mal, el intérprete interrumpe su trabajo. Esto proporciona a los desarrolladores información importante para la resolución de problemas. Como desarrollador, sabes inmediatamente dónde está el error en el código fuente y puedes resolver el problema más rápido.
A diferencia del compilador, un intérprete no produce un archivo ejecutable que puedas distribuir, copiar o ejecutar varias veces. Además, no convierte el código fuente a lenguaje máquina, sino que actúa como una capa intermedia entre el lenguaje de programación y la computadora. Un intérprete evalúa cada comando individual de un programa de computadora en tiempo de ejecución y llama a las funciones correspondientes y llamadas al sistema que activan las funciones deseadas en el sistema de destino.
Porque un intérprete en tiempo real funciona, lo que requiere que se procese cada comando, los lenguajes interpretados como Python o JavaScript son más lentos y menos eficientes que los lenguajes compilados. Por ejemplo, las instrucciones recurrentes se llaman una y otra vez, lo que tiene un efecto extremadamente negativo en la eficiencia.
Lo mejor de ambos mundos: el compilador JiT
Hoy en día existen enfoques modernos que combinan intérpretes y compiladores y así eliminan las desventajas de los respectivos sistemas. El compilador Just-In-Time solo traduce el código fuente a lenguaje de máquina en tiempo de ejecución. Por lo tanto, la compilación no se implementa de antemano.
Una vez que el código fuente se compila correctamente, el procesador del sistema de destino lo procesa. En comparación con la compilación tradicional, este enfoque tiene importantes ventajas de rendimiento. Con la compilación justo a tiempo, los bloques completos de código se procesan en lotes. Esto también aumenta el rendimiento en comparación con el procesamiento habitual línea por línea del código fuente.
Los compiladores JiT modernos pueden generar código optimizado para lenguajes dinámicos. Además, la compilación Just-In-Time ofrece la clara ventaja de que solo se compila una pequeña parte antes de que se inicie el programa, lo que prácticamente elimina el problema de los retrasos en el inicio del programa. Además, los recursos del sistema se utilizan de forma extremadamente eficiente.
Los fragmentos de código que no se ejecutan tampoco se compilan. Como parte de la compilación JiT, los bloques de código que ya se han compilado se almacenan en unbúfer. Al volver a compilar, los bloques de código requeridos simplemente se cargan desde el caché y no tienen que volver a compilarse.