tipos que programacion lenguaje interpretes interprete interpretado funciona entre enlazadores ejemplos diferencia compiladores compilador compilado como compiler-construction interpreter

compiler construction - que - ¿Cómo funciona un intérprete/compilador?



que es un interprete (9)

¿Cómo funciona un intérprete / compilador? Cuál es la diferencia entre el intérprete y el compilador


¿Cuál es la diferencia entre intérprete y compilador?

El compilador traduce todo el programa antes de ejecutarlo.

Los intérpretes traducen una declaración al lenguaje de la máquina, la ejecutan y continúan con la siguiente declaración.

¿Cómo funciona un intérprete / compilador?

  • A diferencia de los lenguajes compilados que se traducen al lenguaje de la máquina antes de tiempo (derecha).
  • Los idiomas interpretados se traducen en tiempo de ejecución.
  • Los intérpretes dBASE y BASIC (centro) traducen el código fuente original.
  • Los intérpretes de Java y Visual Basic (izquierda) traducen bytecode , que es un lenguaje intermedio compilado a partir del código fuente original.

Source


Cuál es la diferencia entre el intérprete y el compilador

Ponlo de forma directa e intuitiva,

El compilador es quien traduce el código fuente de legibilidad humana en machine codes que el cálculo podría leer y ejecutar;

El intérprete es quien pretende ser o simula una computadora para leer y ejecutar el source code directamente.


¿Qué es un traductor?

Un traductor S -> T acepta el código expresado en el lenguaje fuente S, y lo traduce a un código equivalente expresado en otro idioma (objetivo) T.

Ejemplos de traductores:

  • Compiladores: traduce el código de alto nivel a un código de bajo nivel, por ejemplo, Java -> JVM
  • Ensambladores: traduce el código del lenguaje ensamblador al código de máquina, por ejemplo, x86as -> x86
  • Traductores de alto nivel: traduce el código de un PL a otro, por ejemplo, Java -> C
  • Descompiladores: traduce el código de bajo nivel a un código de alto nivel, p. Ej., Código de bytes Java JVM -> Java

¿Qué es un intérprete?

Un intérprete S acepta código expresado en el lenguaje S, e inmediatamente ejecuta ese código. Funciona obteniendo, analizando y ejecutando una instrucción a la vez.

Excelente cuando el usuario ingresa instrucciones de manera interactiva (piense en Python) y le gustaría obtener la salida antes de poner en la siguiente instrucción. También es útil cuando el programa debe ejecutarse solo una vez o requiere ser portátil.

  • Interpretar un programa es mucho más lento que ejecutar el código máquina nativo
  • Interpretar un lenguaje de alto nivel es ~ 100 veces más lento
  • La interpretación de un lenguaje de nivel intermedio (como el byte de JVM) es ~ 10 más lento
  • Si se llama repetidamente a una instrucción, se analizará repetidamente, ¡consumirá mucho tiempo!
  • No es necesario compilar el código

Diferencias

Comportamiento

  • Un compilador traduce el código fuente al código máquina, pero no ejecuta el código fuente o objeto.

  • Un intérprete ejecuta el código fuente una instrucción a la vez, pero no traduce el código fuente.

Actuación

  • Un compilador tarda bastante tiempo en traducir el programa fuente al código máquina nativo, pero la ejecución posterior es rápida.
  • Un intérprete comienza a ejecutar el programa fuente de inmediato, pero la ejecución es lenta

Compiladores interpretativos

Un compilador interpretativo es un buen compromiso entre compiladores e intérpretes. Traduce el programa fuente al código de máquina virtual, que luego se interpreta.

Un compilador interpretativo combina una traducción rápida con una ejecución moderadamente rápida, siempre que:

  • El código de VM es más bajo que el idioma de origen, pero es más alto que el código de máquina nativo
  • Las instrucciones de VM tienen formatos simples (pueden ser analizados rápidamente por un intérprete)

Ejemplo: JDK proporciona un compilador interpretativo para Java.


Compiladores: un compilador traduce un idioma de origen a un idioma de destino. Luego, el idioma de destino toma la entrada y da salida.

El compilador produce un código objetivo compilando el código fuente

entonces el código objetivo toma la entrada y da salida

Intérpretes: en lugar de generar un código objetivo, el intérprete parece tomar la información directamente junto con el código fuente y da salida.

El intérprete mapea la entrada al resultado usando el programa fuente

Entonces, el programa dirigido por lenguaje de máquina producido por el compilador es mucho más rápido que el intérprete al mapear las entradas a la salida. Sin embargo, dado que el intérprete ejecuta el programa fuente línea por línea, proporciona un mejor diagnóstico de errores que el compilador.

Referencia - Compiladores: Principios, técnicas y herramientas de Aho aka the dragon book


La diferencia vs cómo funcionan

P: ¿Para qué se usan los compiladores e intérpretes?

R: La mayoría de los programas están escritos en idiomas de alto nivel (c #, java ...). Los idiomas de alto nivel contienen palabras y frases comprensibles. Por otro lado, la computadora (en el momento en que escribí este artículo) entiende el código de la máquina que es el código binario / máquina único de 0 y 1. Por lo tanto, necesitamos convertir el código de alto nivel en código fuente que es (código de máquina / binario). De ahí la palabra conversión.

Así que concluimos que un trabajo de compilador / intérprete es Traducir código de alto nivel en código máquina.

Pero ambos tienen una forma diferente de ''Traducir'' el código Diferencia:

Compilador:

convierte el código fuente a algún tipo de forma intermedia. Para el lenguaje estático, un compilador normalmente convierte el código fuente en ensamblado, que normalmente no se almacena en el disco, luego se invoca al ensamblador para convertir el ensamblaje en código binario, que generalmente se almacena como archivo de objeto (sufijo .o o .obj por lo general), luego se invoca al enlazador para vincular el (los) archivo (s) de objeto al ejecutable binario. También es común referirse a todo este proceso de compilación, ensamblaje y vinculación como compilación. Por lo tanto, puede llamar a gcc un compilador, pero en realidad invoca cc1, que es el compilador que compila, como cuál es el ensamblador que ensamblar, ld, que es el enlazador que se va a vincular.

Intérpretes: el lenguaje que tiene una forma de bytecode intermedia, el código fuente se convierte primero a código de bytes, este proceso se puede llamar compilación. Bytecode no se puede ejecutar en máquinas host, necesita un programa, que en realidad es el proceso desde el punto de vista del sistema operativo, para interpretar el bytecode en la máquina host, este programa se llama intérprete, piense en Java. Algunos lenguajes, como python, hacen el trabajo de compilación e interpretación con un solo.

Comparando

Intérpretes

  • Lleva menos tiempo analizar el código fuente, pero el tiempo de ejecución general es más lento.
  • No se genera código objeto intermedio, por lo tanto, son eficientes en la memoria .
  • Continúa traduciendo el programa hasta que se cumple el primer error, en cuyo caso se detiene. Por lo tanto, la depuración es fácil.

Compiladores

  • Lleva mucho tiempo analizar el código fuente, pero el tiempo de ejecución global es comparativamente más rápido.
  • Genera código de objeto intermedio que además requiere vinculación, por lo tanto, requiere más memoria.
  • Genera el mensaje de error solo después de escanear todo el programa. Por lo tanto, la depuración es comparativamente difícil.

Ejemplos con idiomas

Interpretado

  • Pitón
  • Rubí
  • PHP
  • JAVA (Todopoderoso)
  • Perl
  • R
  • Potencia Shell

compilado

  • do
  • C ++
  • DO#
  • C objetivo
  • RÁPIDO
  • Fortran

Mira el libro de PLAI , es la mejor introducción a la realización de lenguaje dymanic que he encontrado:

Lenguajes de programación: aplicación e interpretación (c) Shriram Krishnamurthi

Este libro se centra en escribir un intérprete para lenguaje dinámico en Scheme (dr.Racket), usándolo puede escribir su propio intérprete para cualquier idioma y agregar algunos consejos sobre OOP de

y SmallTalk y SOM: Máquina de Objetos Simple:

Todos los intérpretes modernos incluyen el compilador en su interior: compilan elementos de alto nivel en código de bytes portátil de bajo nivel, o usan JIT para compilar código de máquina en la RAM.

PD: Si alguien quiere escribir el sistema SmallTalk en Python, por favor, fíjate en mí.



Compilador : un compilador es un programa informático que transforma (traduce) el código fuente de un lenguaje de programación (el idioma de origen) en otro lenguaje informático (el idioma de destino). En la mayoría de los casos, los compiladores se utilizan para transformar el código fuente en un programa ejecutable, es decir, traducen código de lenguajes de programación de alto nivel a lenguajes de nivel bajo (o inferior), principalmente ensamblador o código de máquina.

Intérprete : un intérprete es un programa de computadora que ejecuta instrucciones escritas en un lenguaje de programación. Puede ejecutar el código fuente directamente o traduce el código fuente en un primer paso hacia una representación más eficiente y ejecuta este código


Compiladores

Los compiladores fueron el primer tipo de programa de traducción que se escribió. La idea es simple: usted escribe el programa, luego se lo entrega al compilador que lo traduce. Luego ejecutas el resultado.

Intérpretes

Un intérprete también es un programa que traduce un lenguaje de alto nivel a uno de bajo nivel, pero lo hace en el momento en que se ejecuta el programa. Usted escribe el programa usando un editor de texto o algo similar, y luego le ordena al intérprete que ejecute el programa. Toma el programa, una línea a la vez, y traduce cada línea antes de ejecutarla: traduce la primera línea y la ejecuta, luego traduce la segunda línea y la ejecuta, etc.

Características del compilador:

  • pasa mucho tiempo analizando y procesando el programa
  • el ejecutable resultante es alguna forma de código binario específico de la máquina
  • el hardware de la computadora interpreta (ejecuta) el código resultante
  • la ejecución del programa es rápida

Características del intérprete:

  • se pasa relativamente poco tiempo analizando y procesando el programa
  • el código resultante es algún tipo de código intermedio
  • el código resultante es interpretado por otro programa
  • la ejecución del programa es relativamente lenta