2010-04-17 26 views

Respuesta

113

¿Cuál es la diferencia entre el lenguaje compilado y el interpretado?

La diferencia es que no en el idioma; Está en la implementación .

Después de haber conseguido eso de mi sistema, aquí está la respuesta:

  • En una aplicación compilada, el programa original se traduce en instrucciones nativas de la máquina, que se ejecutan directamente por el hardware.

  • En una implementación interpretada, el programa original se traduce en algo más. Otro programa, llamado "el intérprete", luego examina "otra cosa" y realiza cualquier acción que se requiera. Dependiendo del idioma y su implementación, hay una variedad de formas de "algo más". De más populares a menos popular, "algo más" podría ser

    • instrucciones binarias para una máquina virtual, a menudo llamados código de bytes, como se hace en Lua, Python, Ruby, Smalltalk, y muchos otros sistemas (el enfoque se popularizó en la década de 1970 por el P-sistema de UCSD y UCSD Pascal)

    • una representación en forma de árbol del programa original, como por ejemplo un árbol de sintaxis abstracta, como se hace para muchos prototipos o educativos intérpretes

    • Un representante tokenizado n del programa fuente, similar a Tcl

    • Los personajes del programa de origen, como se hizo en la menta y TRAC

Una cosa que complica el asunto es que es posible para traducir (compilar) bytecode en las instrucciones nativas de la máquina. Por lo tanto, una implementación interpretada con éxito podría eventualmente adquirir un compilador. Si el compilador se ejecuta dinámicamente, detrás de las escenas, a menudo se lo denomina compilador just-in-time o JIT. JITs se han desarrollado para Java, JavaScript, Lua, y me atrevo a decir muchos otros idiomas. En ese punto, puede tener una implementación híbrida en la que se interpreta un código y se compila código.

+4

Señor, tengo las siguientes preguntas 1. ¿En qué idioma está escrito "algo más"? 2. Y en el contexto de JavaScript, ¿esa "otra cosa" varía de un navegador a otro? 3. Diga, mi script se está ejecutando en Google Chrome e Internet Explorer, ¿se interpreta igual en ambos navegadores? – JavaHopper

40

Java y JavaScript son bastante mal ejemplo para demostrar esta diferencia , porque ambos son lenguajes interpretados . Java (interpretado) y C (o C++) (compilado) podrían haber sido un mejor ejemplo.

Por qué el texto tachado de paso? Como this answer indica correctamente, la interpretación/compilación se trata de una implementación concreta de un idioma, no del idioma per se. Si bien las afirmaciones como "C es un lenguaje compilado" son en general verdaderas, no hay nada que impida que alguien escriba un intérprete de lenguaje C. De hecho, interpreters for C do exist.

Básicamente, el código compilado se puede ejecutar directamente desde la CPU de la computadora. Es decir, el código ejecutable se especifica en el idioma "nativo" de la CPU (lenguaje de ensamblaje).

Sin embargo, el código de los idiomas interpretados se debe traducir en tiempo de ejecución desde cualquier formato a las instrucciones de la máquina de la CPU. Esta traducción es hecha por un intérprete.

Otra manera de decirlo es que interpretan lenguas son código se traduce a instrucciones de máquina paso a paso mientras se está ejecutando el programa, mientras compilado idiomas tienen código tiene traducido antes de la ejecución del programa.

+6

¿Se interpreta Java? Desde wikipedia: "Las aplicaciones Java se compilan típicamente en bytecode (archivo de clase) que se puede ejecutar en cualquier máquina virtual Java (JVM) independientemente de la arquitectura de la computadora". – Personman

+4

@Personman que todavía se "interpreta" técnicamente ya que la JVM está ejecutando el código, no el sistema operativo en sí. Realmente es una diferencia semántica, ya que se podría decir que la complejidad de los sistemas operativos modernos hace que la diferencia sea básicamente irrelevante para la mayoría de las situaciones. Habla de la diferencia entre el sistema operativo que ejecuta la aplicación y el sistema operativo que ejecuta una aplicación que ejecuta el código. – GrayWizardx

+4

Supongo que quiere decir que los archivos de clase son interpretados por Java VM. Eso es bastante razonable, pero la fuente java realmente está compilada en Java VM bytecode. Podría construir una Máquina Java física que no requiriera que la VM la interpretara en el código máquina de otra arquitectura. Por lo tanto, parece más exacto decir que Java está compilado. Aún así, este es un buen ejemplo de la manera en que la distinción es confusa y algo arbitraria. Después de todo, el C compilado es interpretado por la CPU, ¿verdad? – Personman

2

Un compilador, en general, lee código de lenguaje de lenguaje de nivel superior y lo convierte en código p o en código de máquina nativo. Un intérprete se ejecuta directamente desde el código p o un código interpretado como Basic o Lisp. Normalmente, el código completo se ejecuta mucho más rápido, es más compacto y ya ha encontrado todos los errores de sintaxis y muchos de los errores de referencia ilegales. El código interpretado solo encuentra dichos errores después de que la aplicación intente interpretar el código afectado. El código interpretado a menudo es bueno para aplicaciones simples que solo se usarán una vez o como mucho un par de veces, o incluso para la creación de prototipos. El código compilado es mejor para aplicaciones serias. Un compilador primero toma todo el programa, busca errores, lo compila y luego lo ejecuta. Mientras que, un intérprete hace esto línea por línea, por lo que toma una línea, verifica si hay errores y luego la ejecuta.

si necesita más información que acaba de Google de "diferencia entre compilador y el intérprete de"

+1

Umm, no estoy seguro de dónde obtuvo algo de esto más allá de las dos primeras declaraciones. Esto fue técnicamente cierto hace varias generaciones con muchos lenguajes interpretados, pero dependiendo de la plataforma y la atención al detalle, es posible tener un código interpretado que realiza código similar o cercano al compilado de ciertas actividades. – GrayWizardx

2

Es una distinción muy turbia, y de hecho generalmente no una propiedad de un lenguaje en sí mismo, sino más bien del programa que está utilizando para ejecutar código en ese idioma.

Sin embargo, la mayoría de los lenguajes se usan principalmente de una forma u otra, y sí, Java siempre se compila esencialmente, mientras que javascript esencialmente siempre se interpreta.

Para compilar el código fuente es ejecutar un programa en él que genera un archivo ejecutable binario que, cuando se ejecuta, tiene el comportamiento definido por la fuente. Por ejemplo, javac compila archivos .java de lectura humana en archivos .class legibles por máquina.

Para interpretar el código fuente se ejecuta un programa que produce el comportamiento definido de inmediato, sin generar un archivo intermediario. Por ejemplo, cuando su navegador web carga stackoverflow.com, interpreta un montón de javascript (que se puede ver al ver el origen de la página) y produce muchos de los agradables efectos que tienen estas páginas, por ejemplo, votaciones ascendentes, o el pequeño notificador barras en la parte superior.

1

El lenguaje interpretado se ejecuta en el tiempo de ejecución de acuerdo con las instrucciones como shell scripting y el compilado es uno que se compila (se cambia al lenguaje ensamblador, que la CPU puede entender) y se ejecuta como en C++.

Cuestiones relacionadas