Je sais que vous avez accepté une réponse, mais il y a une certaine ambiguïté. Lorsque vous faites référence à un moteur de script , nous entendons généralement un petit langage incorporé qui se trouve dans un modèle et génère une sortie textuelle ou des documents. Par exemple Freemarker et Velocity sont souvent appelés moteurs de script. Erb serait assis ici aussi, mais bizarrement n'est pas souvent considéré comme un moteur de script.
Un langage de script généralement besoins pas d'étape de compilation, peut donc être exécuté plus simplement comme, ou, à partir d'un script shell. Cela inclut des choses comme awk, perl, tcl, python, ruby et ainsi de suite. Ces langues doivent généralement être laconiques et la sécurité du type est souvent facultative. Windows prend en charge un certain nombre de langues dans ses fonctionnalités scripting host. Cela expose les langages de script à divers composants dans Windows. Alors, des langages entièrement compilés comme Java peuvent bien fonctionner comme bytecode et être considérés comme interprétés, mais le fait est qu'il y a une étape de compilation explicite, il n'y a pas d'interpréteur (avec Sun JRE quand même) qui fournit un environnement exécutable d'exécution pour le code java.
D'autres langages tels que VBA sont intégrés, la plupart des langages ci-dessus peuvent être incorporés. Les langages incorporés peuvent également être référencés en tant que moteur de script pour l'application hôte. Dans mon esprit, un moteur de script interprète des instructions programmatiques et à son tour instruit une application ou un système hôte plus important. Les instructions sont exécutées immédiatement sans se soucier des instructions restantes.
De nombreux langages n'ont aucune distinction entre les données et le code, éventuellement en les compilant dynamiquement au moment de l'exécution. Les étapes d'interprétation, de compilation et d'exécution sont à la disposition du programmeur Lisp pour être manipulées lorsque les programmeurs manipulent des données dans d'autres langages.
Oui, les implémentations typiques de Java (et C#) exécutent un bytecode dans une machine virtuelle, un interpréteur, comme des implémentations typiques de Python ou Ruby (en fait, il peut s'agir de l'interpréteur _same_ ;-). La distinction est donc plutôt mal fondée, comme vous l'avez remarqué. –
Java n'est pas un langage interprété. Vous avez un compilateur appelé javac et des binaires d'objets machine (virtuels) appelés fichiers de classe. – alphazero
Java n'est pas considéré comme un langage interprété. Vous écrivez du code Java, puis vous avez une étape de compilation explicite, où le code Java est transformé en bytecodes. Les bytecodes sont ensuite interprétés dans la machine virtuelle Java. Habituellement, lorsque les gens disent «langage interprété», ils veulent dire une langue où vous pouvez simplement exécuter votre code directement sans étape de compilation explicite. (L'interpréteur peut utiliser la compilation Just-In-Time comme une optimisation de la vitesse.) C'est flou: même les langues que tout le monde accepte sont les langages «compilés», comme C, peuvent avoir des interprètes. (Recherche Google pour "C interprète"!) – steveha