¿Cuál es la diferencia entre lenguaje compilado e interpretado?
La diferencia no está en el idioma; 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 son ejecutadas directamente por el hardware.
En una implementación interpretada, el programa original se traduce en otra cosa. Otro programa, llamado "el intérprete", examina "otra cosa" y realiza las acciones necesarias. Dependiendo del lenguaje 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 llamadas código de bytes , como se hace en Lua, Python, Ruby, Smalltalk y muchos otros sistemas (el enfoque fue popularizado en la década de 1970 por UCSD P-system y UCSD Pascal)
Una representación en forma de árbol del programa original, como un árbol de sintaxis abstracta, como se hace para muchos prototipos o intérpretes educativos.
Una representación tokenizada del programa fuente, similar a Tcl
Los personajes del programa fuente, como se hizo en MINT y TRAC
Una cosa que complica el problema es que es posible traducir (compilar) el código de bytes en instrucciones nativas de la máquina . Por lo tanto, una implementación intepretada exitosa podría eventualmente adquirir un compilador. Si el compilador se ejecuta dinámicamente, entre bastidores, a menudo se le llama compilador justo a tiempo o compilador JIT. Los JIT se han desarrollado para Java, JavaScript, Lua y, me atrevería a decir, muchos otros lenguajes. En ese punto, puede tener una implementación híbrida en la que se interpreta parte del código y se compila parte del código.
Java y JavaScript son un ejemplo bastante malo para demostrar esta diferencia
, porque ambos son lenguajes interpretados. Java(interpretado)y C (o C ++)(compilado)podrían haber sido un mejor ejemplo.Básicamente, el código compilado puede ser ejecutado 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 los 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 la realiza un intérprete.
Otra forma de decirlo es que los
lenguajesinterpretadosson elcódigo que se traduce a instrucciones de máquina paso a paso mientras se ejecuta el programa, mientras que loslenguajescompiladostienen elcódigo traducido antes de la ejecución del programa.fuente
Aquí está la diferencia básica entre el lenguaje compilador e intérprete.
Lenguaje del compilador
Idioma del intérprete:
fuente
Un compilador, en general, lee el código informático de un lenguaje de nivel superior y lo convierte en código p o código máquina nativo. Un intérprete se ejecuta directamente desde p-code o un código interpretado como Basic o Lisp. Normalmente, el código compilado se ejecuta mucho más rápido, es más compacto y ya ha detectado todos los errores de sintaxis y muchos de los errores de referencia ilegales. El código interpretado solo encuentra tales errores después de que la aplicación intenta interpretar el código afectado. El código interpretado suele ser bueno para aplicaciones simples que solo se usarán una vez o como máximo un par de veces, o tal vez incluso para la creación de prototipos. El código compilado es mejor para aplicaciones serias. Un compilador primero toma el programa completo, 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
Si necesita más información, busque en Google la "diferencia entre compilador e intérprete".
fuente
Es una distinción muy turbia y, de hecho, generalmente no es una propiedad de un lenguaje en sí, sino del programa que está utilizando para ejecutar el código en ese lenguaje.
Sin embargo, la mayoría de los lenguajes se utilizan principalmente de una forma u otra, y sí, Java esencialmente siempre se compila, mientras que javascript esencialmente siempre se interpreta.
Compilar código fuente es ejecutar un programa en él que genera un archivo binario ejecutable 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 en él 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 puede ver al ver el código fuente de la página) y produce muchos de los efectos agradables que tienen estas páginas, por ejemplo, upvoting o el pequeño notificador. barras en la parte superior.
fuente
El lenguaje interpretado se ejecuta en 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 a lenguaje ensamblador, que la CPU puede entender) y luego se ejecuta como en c ++.
fuente
Como han dicho otros, compilado e interpretado son específicos de una implementación de un lenguaje de programación; que son no inherentes al lenguaje. Por ejemplo, hay intérpretes de C.
Sin embargo, podemos (y en la práctica lo hacemos) clasificar los lenguajes de programación en función de su implementación más común (a veces canónica). Por ejemplo, decimos que C está compilado.
Primero, debemos definir sin ambigüedad los intérpretes y compiladores:
Un intérprete para el lenguaje X es un programa (o una máquina, o simplemente algún tipo de mecanismo en general) que ejecuta cualquier programa p escrito en el lenguaje X de manera que realice los efectos y evalúe los resultados según lo prescrito por la especificación de X .
Un compilador de X a Y es un programa (o una máquina, o simplemente algún tipo de mecanismo en general) que traduce cualquier programa p de algún lenguaje X a un programa p ' semánticamente equivalente en algún lenguaje Y de tal manera que interpretar p ' con un intérprete para y se obtendrán los mismos resultados y tienen los mismos efectos que la interpretación de p con un intérprete para X .
Tenga en cuenta que desde el punto de vista del programador, las CPU son intérpretes de máquina para sus respectivos lenguajes de máquina nativos.
Ahora, podemos hacer una clasificación tentativa de lenguajes de programación en 3 categorías dependiendo de su implementación más común:
A veces, los lenguajes compilados suaves y rígidos se denominan simplemente compilados, por lo que se dice que C #, Java, C, C ++ están compilados.
Dentro de esta categorización, JavaScript solía ser un lenguaje interpretado, pero eso fue hace muchos años. Hoy en día, está compilado con JIT en el lenguaje de máquina nativo en la mayoría de las principales implementaciones de JavaScript, por lo que diría que cae en lenguajes compilados suaves.
fuente