Compilador: Proceso de traducción que convierte un programa fuente escrito en un lenguaje de alto nivel a un programa objeto en código máquina y listo por tanto para ejecutarse en la computadora. A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.
Intérprete: que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Es un traductor que realiza la operación de compilación paso a paso. Para cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha sentencia y vuelve a iniciar el proceso con la sentencia siguiente.
La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución.
La interpretación es un buen método cuando se dan las siguientes circunstancias
- El programador está trabajando en forma interactiva, y quiere ver el resultado de cada instrucción antes de entrar la siguiente instrucción.
- El programa se va a utilizar solo una vez, y por tanto la velocidad de ejecución no es importante. Se espera que cada instrucción se ejecute una sola vez. Las instrucciones tienen un formato simple, y por tanto pueden ser analizadas de forma fácil y eficiente. La interpretación es muy lenta.
La interpretación de un programa fuente, escrito en un lenguaje de alto nivel, puede ser 100 veces más lenta que la ejecución del programa equivalente escrito en código máquina. Por tanto la interpretación no es interesante cuando: El programa se va a ejecutar en modo de producción, y por tanto la velocidad es importante. Se espera que las instrucciones se ejecuten frecuentemente. Las instrucciones tienen formatos complicados, y por tanto su análisis es costoso en tiempo.
Compilación vs interpretación de programas
- Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.
- Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).
- Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.