son qué programación los lenguajes lenguaje interpretes interpretar interpretados interpretado entre ejemplos diferencia compilar compilados compiladores compilado java javascript programming-languages

java - programación - qué son los lenguajes compilados y los lenguajes interpretados



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

Después de leer algunos materiales sobre este tema, todavía no estoy seguro de cuál es la diferencia entre un lenguaje compilado y un interpretado. Me dijeron que esta es una de las diferencias entre Java y JavaScript. ¿Alguien podría ayudarme a entenderlo?


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

La diferencia no está en el lenguaje; está en la implementación .

Habiendo sacado eso de mi sistema, aquí hay una respuesta:

  • En una implementació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 a otra cosa. 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 popular a menos popular, "algo más" podría ser

    • Instrucciones binarias para una máquina virtual, a menudo llamado bytecode , como se hace en Lua, Python, Ruby, Smalltalk y muchos otros sistemas (el enfoque fue popularizado en la década de 1970 por el sistema P de UCSD y UCSD Pascal)

    • Una representación arborescente del programa original, como un árbol de sintaxis abstracta, como se hace para muchos intérpretes prototipo o educativos

    • Una representación tokenizada del programa de origen, similar a Tcl

    • Los caracteres del programa fuente, como se hizo en MINT y TRAC

Una cosa que complica el problema es que es posible traducir (compilar) bytecode en 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.


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


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

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

Compilar código fuente es ejecutar un programa 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 .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.


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

¿Por qué el texto atravesado? Como esta respuesta señala correctamente, la interpretación / compilación se trata de una implementación concreta de un idioma, no del lenguaje per se . Si bien las afirmaciones como "C es un lenguaje compilado" generalmente son ciertas, no hay nada que impida que alguien escriba un intérprete de lenguaje C. De hecho, existen intérpretes para C.

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

Sin embargo, el código de idiomas interpretados debe traducirse 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 forma de decirlo es que los idiomas interpretados son código que se traduce a las instrucciones de la máquina paso a paso mientras se ejecuta el programa, mientras que los lenguajes compilados tienen el código traducido antes de la ejecución del programa.


Un compilador, en general, lee código de computadora 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, busque "diferencia entre el compilador y el intérprete"