Sé que ha aceptado una respuesta, sin embargo, existe cierta ambigüedad.
Cuando nos referimos a un motor de scripting , normalmente nos referimos a un pequeño lenguaje incrustado que se encuentra dentro de una plantilla y genera resultados de texto o documentos. Por ejemplo, Freemarker y Velocity a menudo se conocen como motores de scripting. Erb se sentaría aquí también, pero extrañamente no se conoce como un motor de scripting que a menudo.
Un lenguaje scripting generalmente necesidades ningún paso de compilación, por lo tanto, se puede ejecutar más simplemente como una, o, a partir de una secuencia de comandos shell. Esto incluye cosas como awk, perl, tcl, python, ruby, etc. Estos lenguajes suelen ser escuetos y la seguridad de tipo suele ser opcional. Windows es compatible con varios idiomas en scripting host instalaciones. Esto expone los lenguajes de scripting a varios componentes dentro de Windows.
Entonces, los lenguajes completamente compilados como Java bien pueden ejecutarse como bytecode y podrían considerarse interpretados, sin embargo, el hecho es que hay un paso de compilación explícito, no hay intérprete (con Sun JRE de todos modos) que proporcione un entorno ejecutable en tiempo de ejecución para código java.
Se incrustan otros idiomas como VBA, muchos de los idiomas anteriores se pueden incrustar. Los lenguajes incrustados también pueden ser referidos como un motor de scripting para la aplicación host.
En mi opinión, un motor de scripting interpreta instrucciones programáticas y, a su vez, da instrucciones a una aplicación de host más grande o sistema. Las instrucciones se ejecutan inmediatamente sin preocuparse por las instrucciones restantes.
Muchos Lisps no tienen distinción entre datos y código, posiblemente compilando dinámicamente en tiempo de ejecución. Los pasos de interpretación, compilación y ejecución están disponibles para que el programador Lisp sea manipulado a medida que los programadores manipulan datos en otros idiomas.
Sí, las implementaciones típicas de Java (y C#) ejecutan bytecode en una máquina virtual, también conocida como intérprete, al igual que las implementaciones típicas de Python o Ruby (de hecho, puede ser el _same_ interpreter ;-). Entonces la distinción está bastante mal fundada, como habrás notado. –
Java no es un lenguaje interpretado. Usted tiene un compilador llamado javac y binarios de objetos de máquina (virtuales) llamados archivos de clase. – alphazero
Java no se considera un lenguaje interpretado. Usted escribe código Java, luego tiene un paso de compilación explícito, donde el código Java se convierte en bytecodes. Los códigos de bytes se interpretan en la máquina virtual Java. Por lo general, cuando las personas dicen "lenguaje interpretado" se refieren a un lenguaje en el que solo se puede ejecutar el código directamente sin un paso de compilación explícito. (El "intérprete" podría usar la compilación Just-In-Time como optimización de velocidad). Es confuso: incluso los idiomas que todos aceptan son "compilados", como C, pueden tener intérpretes. (Búsqueda de Google para "intérprete C") – steveha