J'ai vu ici ce qui définit un Le langage de programmation en dehors d'une langue de script est le moteur de script. Mais je ne comprends pas comment ça marche, alors je ne connais pas la différence. P>
Par exemple, je vois le code dans les méthodes d'appel Java dans les bibliothèques importées, mais elle ne semble pas "suffisamment différente" de Python ou de code rubis - les deux sont des langues de script, non? Je suppose que cela concerne également les paradigmes procéduraux et orientés objet, mais à la fin, je ne vois pas pourquoi ils sont classés, ils sont de la manière dont ils sont. P>
6 Réponses :
Probablement la chose la plus proche de ce dont vous parlez est une Interprète : p>
en informatique, un interprète signifie normalement un programme informatique qui Exécute, c'est-à-dire exécuter, instructions écrit dans un langage de programmation. Alors que l'interprétation et la compilation sont les deux moyens principaux par lesquels Les langages de programmation sont implémentés, Ce ne sont pas complètement distincts catégories, une des raisons que la plupart des systèmes d'interprétation aussi effectuer un travail de traduction, juste comme des compilateurs. p> blockQuote>
Fondamentalement un intepreter (ou un moteur de script si vous préférez) est le composant responsable de la transformation d'un script en code de machine au moment de l'exécution (par opposition à un compilateur qui crée un code de machine avant l'heure d'exécution). P>
Vous avez essentiellement découvert que la distinction entre une langue de script et une langue "non-script" est assez artificielle. Python peut être compilé à JVM Bytecode (avec Jython), et je crois que Ruby peut également - alors le "moteur" exécutant le code Python ou Ruby en question sera un 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, comme pour C #, BOO, etc. Les langues doivent être "script" sont souvent dactylographiques dynamiquement ... mais je n'ai jamais entendu le terme utilisé pour d'autres langages importants dactylographiés de manière dynamique, tels que SmallTalk, Mozart / Oz ou Erlang ...; -). P >
Il n'y a pas de ligne difficile et rapide entre un "langage de script" et un "langage de programmation". p>
Propriétés des "langages de script" ont tendance à inclure: p>
gestionnaire de mémoire collecté aux ordures, sans besoin d'allouer explicitement et d'objets libres p> li>
capacité à exécuter simplement des commandes, sans groupe de code de chaudron. Java est généralement utilisé comme contre-exemple de cela. Dans Python, vous pouvez simplement dire liée à ce qui précède, généralement dans un "langage de script", vous n'avez pas à déclarer explicitement des variables, et vous devez rarement à déclarer des types de variables. Certaines langues de script (telles que JavaScript) renforceront les types d'abandon sauvage, et d'autres (tels que Python) sont fortement typés et augmentent des exceptions sur des incompatibles de type. P> Li>
Pas besoin d'une étape de compilation ou de liaison explicite; Vous venez d'écrire du code et de l'exécuter. (Un "langage de script" peut toujours être compilé juste à temps en interne; Python le fait, par exemple.) P> li>
ul>
Au-delà de ces bases, un "langage de script" peut aller de quelque chose de primitif et trivial, comme la langue "lot" dans MS-DOS, sur un langage expressif et puissant comme Python, Ruby, etc. P> Imprimer ("Bonjour, World!") Code> Mais en Java, vous avez besoin de beaucoup plus de syntaxe (l'exemple ici est sept lignes de code). p> li>
Convenu surtout, sauf sur le point n ° 1: ce n'est pas vraiment vrai; La seule langue que je connaisse n'est pas la poubelle collectée est C / C ++.
@hasanj, que voulez-vous dire "ce n'est pas vraiment vrai"? J'ai affirmé que n'importe quelle langue qui vous oblige à MALLOC () CODE> et GRATUIT () CODE> La mémoire est disqualifiée en tant que "langage de script". Je n'ai fait aucune affirmation selon laquelle "langages non-scripts" doit vous obliger à gérer la mémoire.
@hasanj, si vous y penchez, vous trouverez de nombreuses langues qui ne sont pas détruites collectées. Fortran, Pascal et C / C ++ Tous viennent à l'esprit, mais il y en a beaucoup. Awk était un gros problème pour moi quand je l'ai appris pour la première fois, car vous n'avez même pas eu à déclarer combien de temps une liste serait; Vous pouvez simplement continuer à y ajouter quand vous le souhaitez! Il est vrai que de nombreuses langues modernes vont à la collecte des ordures, mais l'absence de collection de déchets était une grosse affaire lorsque les "langages de script" ont commencé à apparaître. Lisez la "vue d'ensemble" ici: en.wikipedia.org/wiki/scripting_language
+1 pour "types de contraintes avec abandon sauvage" - pas souvent que j'ai la cause de rire tout en lisant, alors ...
@Edgraham merci! :-) Le point que j'essayais de faire est que beaucoup de gens pensent que Python est faiblement tapé, car vous pouvez reculer un nom de variable de tout type à n'importe quel type. Il est effectivement fortement typé, comme vous le trouverez si vous essayez de faire 1 + "2" code>. Mais JavaScript retournera 3 pour 1 + "2" code> ... sauvage. (Il est vrai que Python est "dactylographié de manière dynamique" plutôt que "statiquement typé", mais il n'est pas vrai qu'il est faiblement tapé.)
@steveha - En effet. Votre point est très clair et votre style d'écriture expressif et informatif. Continuez votre bon travail!
@steveha a trop de personnes confondes "dynamiquement dactylographiés" (variables ne prêtant pas à quoi le type de leur valeur est) et "faiblement tapé" (les choses seront contraines sur le type approprié, ou quelque chose d'équivalent, et seulement si c'est I> impossible cela échouera); et, de la même manière, "strictement tapé" (les variables se soucient de savoir quel type leur valeur est et que vous ne pouvez avoir qu'un type par valeur) et "fortement typé" (les choses ne sont pas contraintes du tout; s'ils ne correspondent pas à la facture , c'est une erreur)
"Langue de script" pourrait être appelé un famoquialisme. Le terme n'est pas bien défini et vous verrez un certain désaccord sur les langues de script de script. Il est parfois utile de transmettre une vague idée des propriétés d'une langue (voir Steveha's Réponse ). P>
"Langue de script" pourrait également faire référence à une utilisation particulière d'une langue. Par exemple, un logiciel peut utiliser Lua comme langue de script - la langue utilisée par l'utilisateur final pour automatiser des tâches complexes (ou "script"). P>
Une distinction utile entre les langues de script / interprété et des langues compilées est que vous pouvez généralement intégrer l'interpréteur de la langue de script dans un projet compilé, tel qu'un moteur de jeu. P>
Je sais que vous avez accepté une réponse, mais il y a une certaine amendance. P>
Lorsque vous faites référence à un Moteur de script em>, nous signifions généralement un petit langage embarqué qui se trouve dans un modèle et génère des sorties ou des documents textuels. Par exemple, Freemarker et Velocity sont souvent appelés moteurs de script. L'ERB s'asseoirait ici aussi, mais curieusement n'est pas appelé un moteur de script qui souvent. P>
a langage de script em> généralement a besoin em> aucune étape de compilation, peut donc être exécuté plus simplement en tant que 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 calculées et que la sécurité est souvent facultative. Windows prend en charge un certain nombre de langues dans ses installations em> hôte des scripts. Cela expose les langues de script à divers composants dans Windows. P>
alors complètement compilé des langues telles que Java pourrait bien fonctionner comme par bypode et pourrait être considérée comme interprétée, mais le point est qu'il existe une étape de compilation explicite, il n'y a pas d'interprète (avec le Sun Jre de toute façon) qui fournit un runtime Environnement exécutable pour le code Java. P>
D'autres langues telles que VBA sont intégrées, de nombreuses langues ci-dessus peuvent être intégrées. Les langues intégrées pourraient également être référées comme un moteur de script pour l'application hôte. P>
Dans mon esprit Un moteur de script interprète des instructions programmatiques et indique à son tour une application ou un système hôte plus grand. Les instructions sont exécutées immédiatement sans préoccupation pour les instructions restantes. P>
De nombreux LISP n'ont aucune distinction entre les données et le code, éventuellement compilair de manière dynamique au moment de l'exécution. Les étapes d'interprétation, de compilation et d'exécution sont disponibles pour que le programmeur LISP soit manipulé lorsque les programmeurs manipulent des données dans d'autres langues. P>
Oui, des implémentations typiques de Java (et C #) Exécutez Bytecode dans une machine virtuelle, une interprète alias, comme des implémentations typiques de Python ou de Ruby (en effet, cela peut être le même i> interpréter ;-). Donc, la distinction est plutôt fondée, comme vous l'avez remarqué.
Java n'est pas une langue interprétée. Vous avez un compilateur appelé Javac et (virtuel) Objet de la machine appelé fichiers de classe.
Java n'est pas considéré comme une langue interprétée. Vous écrivez un code Java, puis vous avez une étape de compilation explicite, où le code Java est transformé en bytecodes. Les bytecodes sont ensuite interprétées dans la machine virtuelle Java. Habituellement, lorsque les gens disent "interprété de langue", ils signifient une langue où vous pouvez simplement exécuter votre code directement sans une étape de compilation explicite. (L'interprète «interprète» peut utiliser une compilation juste à temps comme une optimisation de la vitesse.) C'est floue: même les langues que tout le monde accepte les langues «compilées», comme c, peut avoir des interprètes. (Recherche Google pour "C interpréteur C"!)
Python fait exactement la même chose, seulement vous ne remarquez pas. Vous pouvez simplement le dire de compiler un fichier et vous obtenez un .pyc bytecode, qui est essentiellement compilé Python.