Quelle est la différence entre un langage de programmation et un langage de script? Par exemple, considérons C contre Perl.
La seule différence est que les langages de script nécessitent uniquement l'interpréteur et ne nécessitent pas de compilation et de liaison?
programming-languages
SS Hegde
la source
la source
A
dans la langue, puis écrire un interprèteB
dans la langue que l'interprèteA
peut exécuter, puis un interprèteC
dans la langue que l'interprèteB
peut exécuter , etc. Essentiellement, tout est une question d'indirection, qui a moins à voir avec la base théorique du calcul et plus à voir avec des préoccupations d'ingénierie pratiques.Réponses:
Je pense que la différence a beaucoup plus à voir avec l'utilisation prévue de la langue.
Par exemple, Python est interprété et ne nécessite pas de compilation et de liaison, tout comme Prolog. Je classerais ces deux langages comme des langages de programmation.
Les langages de programmation sont destinés à l'écriture de logiciels. Ils sont conçus pour gérer de grands projets. Ils peuvent probablement appeler des programmes, lire des fichiers, etc., mais ne sont peut-être pas aussi efficaces qu'un langage de script.
Les langages de script ne sont pas destinés au développement de logiciels à grande échelle. Leur syntaxe, leurs fonctionnalités, leur bibliothèque, etc. se concentrent davantage sur l'accomplissement rapide de petites tâches. Cela signifie qu'ils sont parfois plus "hackish" que les langages de programmation, et peuvent ne pas avoir toutes les mêmes fonctionnalités intéressantes. Ils sont conçus pour rendre les tâches couramment exécutées, comme l'itération dans un tas de fichiers ou l'exécution de tâches d'administrateur système, à automatiser.
Par exemple, Bash ne fait pas bien l'arithmétique, ce qui ferait probablement de l'écriture de logiciels à grande échelle un cauchemar.
Comme une sorte de référence: je n'écrirais jamais un lecteur de musique en perl, même si je le pouvais probablement. De même, je n'essaierais jamais d'utiliser C ++ pour renommer tous les fichiers d'un dossier donné.
Cette ligne devient de plus en plus floue. JavaScript, par définition une langue "scripting", est de plus en plus utilisé pour développer des "applications web" qui relèvent davantage du domaine logiciel. De même, Python correspond initialement à de nombreuses caractéristiques d'un langage de script, mais voit de plus en plus de logiciels développés en utilisant Python comme plate-forme principale.
la source
L'article classique sur les langages de script est John K. Ousterhout, Scripting: Higher-level programming for the 21st Century , publié dans Computer 31 (3), 1998. Il a établi une distinction entre les langages de script, d'une part, et les langages de programmation système sur L'autre.
Ousterhout a caractérisé les langages de programmation système comme ayant évolué pour remplacer les langages machine pour la programmation. Ils cachent des détails fastidieux comme l'affectation des registres et les séquences d'appels de sous-programmes, fournissent des constructions simples pour écrire des boucles et d'autres idiomes courants de contrôle et imposent une discipline de typage. Ils sont généralement implémentés par un compilateur (à l'avance). Ces langues sont destinées à l'écriture de logiciels à partir de zéro. Les exemples sont C, C ++ et Java.
En revanche, selon Ousterhout, les langages de script partent du principe qu'il existe déjà des programmes utiles, généralement écrits dans des langages de programmation système. Les langages de script, comme Perl, Python, Tcl, Visual Basic et les shells Unix, fournissent des outils pour combiner ces programmes existants dans de nouveaux programmes. Ousterhout a qualifié les langages de script de "sans type" (y compris ce que beaucoup appellent la frappe dynamique) et comme mettant l'accent sur un développement rapide; ils sont généralement mis en œuvre par des interprètes.
Maintenant, il faut faire attention de ne pas supposer que le modèle conceptuel d'un seul auteur fait autorité. Même si nous, les informaticiens, aimons prétendre que nous sommes des mathématiciens donnant des définitions précises à tous les termes, dans la pratique, la plupart des terminologies informatiques sont socialement construites avec des significations floues et hétérogènes; il existe un consensus approximatif à un niveau très élevé sur la plupart des termes, mais les détails dépendent souvent de la personne qui écrit. Ainsi, prenez son article, ma réponse et toutes les autres réponses ici avec un gros tas de sel.
Je contesterais personnellement l'existence d'un langage de programmation "normal", comme vous le dites dans votre question. Cependant, je pense que le concept que vous essayez de transmettre correspond grosso modo aux langages de programmation système d'Ousterhout.
la source
Tous les langages de script sont également des langages de programmation. L'inverse est pas vrai. Les langues qui "nécessitent uniquement l'interpréteur" sont des langues interprétées (par opposition à une langue compilée - notez que certaines langues, comme Java, entrent dans les deux catégories).
Un langage catégorisé comme langage de script implique qu'il est utile comme langage "glue". Les scripts ne sont généralement pas des programmes complets, mais remplissent plutôt les lacunes entre les autres logiciels.
Les scripts sont généralement utilisés pour connecter plusieurs programmes ensemble, pour effectuer des tâches subalternes très rapidement / facilement, ou même dans un environnement intégré où les problèmes de performances et de sécurité ont été résumés dans un langage de niveau inférieur. Les langages de script mettent l'accent sur la réduction du temps de développement, d'où la raison pour laquelle la plupart sont interprétés et de très haut niveau.
la source
L'ensemble des «langages de script» est un sous-ensemble de l'ensemble des «langages de programmation». La différence entre C et Perl est la différence entre le langage de programmation système et le langage d'application et entre le langage interprété et le langage compilé.
Les langages de programmation système sont de bas niveau et orientés vers la gestion de la mémoire, des E / S prévisibles, etc. Les langages d'application sont orientés vers une résolution rapide des problèmes de niveau supérieur, comme «lire les paramètres du fichier, ouvrir le socket et traiter les demandes en fonction des paramètres».
Ainsi, les langages d'application ont tendance à être de niveau beaucoup plus élevé que les langages système, c'est-à-dire qu'ils fournissent une grande quantité de fonctions d'abstraction et d'aide intégrées et ajoutent souvent une gestion automatique de la mémoire.
Les programmes dans les langages compilés sont traités dans un certain code complètement avant l'exécution du programme. Les langages de script sont traduits dynamiquement en cours d'exécution et comprennent souvent des fonctionnalités de génération de code dynamique et d'inclusion de fichiers avec du code source.
Ainsi, tous les langages de script sont des langages d'application, mais l'opposé n'est pas vrai. Les langages système sont toujours des langages compilés, car les langages de script incluent généralement des fonctionnalités qui ne sont pas pragmatiques à implémenter en termes de langage lui-même. Notez cependant que la différence script (interprété) / compilé concerne davantage l'implémentation: pour certains langages, les deux types d'implémentations peuvent exister, comme pour haskell.
la source
D'autres ont couvert des attributs qui ont tendance à être associés aux langages de script et aux langages sans script. C'est utile pour avoir une idée de ce que les gens veulent dire lorsqu'ils utilisent le terme «langage de script», mais je pense qu'il est plus important de comprendre qu'il n'y a tout simplement pas de frontière bien définie: deux personnes bien informées pourraient ne pas être d'accord sur le fait qu'un langage particulier X soit langage de script. Le terme «langage de script» a néanmoins une utilité car il existe un large consensus sur les langages qui sont loin à l'intérieur, ou bien à l'extérieur de la frontière.
Comparez «voiture familiale» vs «voiture de sport» ou «magazine» vs «journal». J'ose dire qu'il serait difficile de trouver une règle 100% fiable pour différencier chaque voiture familiale de chaque voiture de sport généralisable (ce qui signifie qu'elle ne revient pas à énumérer toutes les voitures existantes dans chaque catégorie) et au moins potentiellement objective ( ce qui signifie qu'il serait acceptable pour tout le monde). Mais ces termes sont toujours utiles dans la pratique, car même si certains cas sont difficiles à décider, de nombreuses voitures sont clairement dans une catégorie et non dans l'autre.
la source
Une différence que je n'ai pas encore vue mentionnée est que lorsqu'elle est utilisée comme prévu, le temps d'exécution de la plupart des scripts sera dominé par des opérations "macroscopiques", et les performances des opérations microscopiques n'auront pas d'effet significatif sur le temps d'exécution global. Par exemple, si un programme d'animation de lancer de rayons peut inclure un langage de script avec une instruction "render image", un script pour produire 240 images d'animation peut passer quatre heures dans l'instruction "render image" et un total de quatre secondes pour tout le reste. Même si l'on devait tout accélérer d'un facteur un million en dehors du moteur de rendu, cela aurait moins d'effet sur les performances globales que d'accélérer le moteur de rendu de 0,1%.
la source