2009-11-06 7 views
10

J'ai vu here que ce qui définit un langage de programmation en dehors d'un langage de script est le moteur de script. Mais je ne comprends pas comment cela fonctionne, donc je ne connais pas la différence. Par exemple, je vois le code dans les méthodes d'appel Java dans les bibliothèques importées, mais il ne semble pas "assez différent" du code Python ou Ruby - les deux sont des langages de script, n'est-ce pas? Je suppose que cela a aussi à voir avec les paradigmes procéduraux et orientés objet, mais à la fin, je ne vois pas pourquoi ils sont classés comme ils le sont.Qu'est-ce qu'un moteur de script?

EDIT: A propos d'un moteur de script étant un interpréteur ... Java n'est-il pas un langage interprété? Je sais qu'il y a le bytecode compilé, mais quand même, ça n'a pas de sens pour moi.

+5

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é. –

+1

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

+1

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

Répondre

12

Il n'y a pas de ligne dure entre un "langage de script" et un "langage de programmation".

Propriétés de « langages de script » ont tendance à inclure:

  • gestionnaire de mémoire ramasse-miettes, sans nécessité d'allouer explicitement et des objets libres

  • capacité à exécuter simplement des commandes, sans groupe du code standard. Java est généralement utilisé comme un contre-exemple de cela. En Python vous pouvez simplement dire print("Hello, world!") mais en Java vous avez besoin de beaucoup plus de syntaxe (l'exemple here est sept lignes de code). En relation avec ce qui précède, généralement dans un "langage de script", vous n'avez pas besoin de déclarer explicitement les variables, et vous avez rarement besoin de déclarer les types de variables.Certains langages de script (tels que Javascript) contraindront les types avec l'abandon sauvage, et d'autres (tels que Python) sont fortement typés et soulèvent des exceptions sur les discordances de type.

  • pas besoin d'une étape de compilation ou de liaison explicite; vous venez d'écrire du code et l'exécuter. (Un « langage de script » peut encore être Just-In-Time compilé en interne,. Python le fait, par exemple)

Au-delà de ces bases, un « langage de script » peut aller de quelque chose de primitif et trivial, comme le « lot » langue dans MS-DOS, sur jusqu'à un langage expressif et puissant comme Python, Ruby, etc.

+1

était d'accord, sauf sur le point n ° 1: ce n'est pas vraiment vrai; le seul langage que je connaisse qui ne soit pas ramassé est C/C++. – hasen

+3

@hasanj, que voulez-vous dire "ce n'est pas vraiment vrai"? J'ai prétendu que tout langage qui vous oblige à 'malloc()' et 'free()' vous-même est disqualifié en tant que "langage de script". Je n'ai pas prétendu que les "langages non-scripting" doivent vous forcer à gérer la mémoire. – steveha

+0

@hasanj, si vous regardez, vous trouverez de nombreuses langues qui ne sont pas collectées. FORTRAN, Pascal et C/C++ viennent tous à l'esprit, mais ils sont nombreux. AWK était un gros problème pour moi quand je l'ai appris pour la première fois, parce que vous n'aviez même pas à déclarer combien de temps une liste serait; vous pourriez juste continuer à ajouter à chaque fois que vous vouliez! Il est vrai que beaucoup de langages modernes vont à la collecte des ordures, mais le manque de ramasse-miettes était un gros problème quand les "langages de script" ont commencé à apparaître. Lisez la "Vue d'ensemble historique" ici: http://en.wikipedia.org/wiki/Scripting_language – steveha

2

Probablement la chose la plus proche de ce que vous parlez est un interpreter:

En informatique, un interprète signifie normalement un programme informatique qui exécute, par exemple exécute, des instructions écrites dans un langage de programmation . Bien que l'interprétation et la compilation sont les deux principaux moyens par lesquels langages de programmation sont mises en œuvre, ceux-ci ne sont pas entièrement distinctes catégories, l'une des raisons étant que les systèmes les plus interprétariat également effectuent des travaux de traduction, juste comme compilateurs.

Fondamentalement, un intepreter (ou moteur de script si vous préférez) est le composant qui est responsable de transformer un script en code machine à l'exécution (par opposition à un compilateur qui crée un code de la machine avant l'heure d'exécution).

6

Vous avez essentiellement découvert que la distinction entre un langage de script et un langage "non-scripting" est assez artificielle. Python peut être compilé en bytecode JVM (avec Jython), et je pense que Ruby peut aussi - alors le "moteur" exécutant le code Python ou Ruby en question sera une JVM, le même "moteur" qui exécute le code Java (ou Scala code, etc etc). De même avec .NET et IronPython (ou IronRuby) - alors le "moteur" est le CLR de Microsoft, tout comme pour C#, Boo, etc. Les langages dits "scripting" sont souvent typés dynamiquement ... mais je n'ai jamais entendu le terme utilisé pour d'autres langages dynamiquement importants tels que Smalltalk, Mozart/OZ, ou Erlang ... ;-).

0

« langage de script » peut être appelé une expression familière. Le terme n'est pas bien défini et vous verrez des désaccords sur les langues qui sont des langages de script. Il est parfois utile de transmettre une vague idée des propriétés d'une langue (Voir steveha's answer). Le "langage de script" peut également faire référence à une utilisation particulière d'une langue. Par exemple, un logiciel peut utiliser Lua comme langage de script - le langage utilisé par l'utilisateur final pour automatiser (ou «scripter») des tâches complexes.

0

Une distinction utile entre les langages de script/interprétés et les langages compilés est que vous pouvez généralement incorporer l'interpréteur d'un langage de script dans un projet compilé, tel qu'un moteur de jeu.

3

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.

Questions connexes