Quand une langue est-elle considérée comme un langage de script? [fermé]

107

Qu'est-ce qui fait d'une langue un langage de script? J'ai entendu des gens dire "quand il est interprété au lieu d'être compilé". Cela ferait de PHP (par exemple) un langage de script. Est-ce le seul critère? Ou y a-t-il d'autres critères?

Voir également:

Shog9
la source
Vous voudrez peut-être développer un peu votre question. Je pense que c'est presque une dupe autrement. D'autres peuvent ne pas voir la distinction
Kent Fredric
Une dupe à quelle autre question?
Sietse le
2
stackoverflow.com/questions/98268/... Il y a beaucoup de similitudes. Pas nécessairement identique, mais beaucoup de contexte / opinion partagé.
Kent Fredric
7
... Lorsqu'un langage casse l'API et modifie sa syntaxe à chaque version mineure, quand il s'agit d'un wrapper autour de 100 bibliothèques C boguées non entretenues, alors c'est un langage de script. ;)
ivan_ivanovich_ivanoff
1
Dans la barre latérale "Related", vous trouverez stackoverflow.com/questions/1514206/… auquel j'ai lié une pile de doublons alors existants en retournant à stackoverflow.com/questions/101055/… .
dmckee --- ex-moderator chaton

Réponses:

52

Un langage de script est un langage qui "script" d'autres choses pour faire des choses. L'objectif principal n'est pas tant de créer vos propres applications que de faire en sorte qu'une application existante agisse comme vous le souhaitez, par exemple JavaScript pour les navigateurs, VBA pour MS Office.

moffdub
la source
Alors qu'en est-il des langages comme Python? Il n'est pas facile de dire où se trouve le centre d'intérêt, mais on pourrait dire qu'il se concentre davantage sur ses propres applications, bien que cela soit souvent appelé un "langage de script". Peut-être parce que la compilation cachée en bytecode de la référence CPython impl. ne soulève pas d'erreurs de compilation concernant la "sécurité des types"? Peut-être que la réponse d'Oded a ces ...
n611x007
Les systèmes de bytecode et de type n'ont vraiment rien à voir avec cela. Selon la définition ci-dessus, si une application expose une API à Python, on dit qu'elle utilise Python comme langage de script. Si vous créez une application entièrement en Python, cette application l'utilise comme langage de programmation.
bug du
«Scripting» n'est pas une définition d'un type de langage. C'est une caractéristique que peuvent avoir les langues . Ainsi, Python est un "bon langage de script" car il facilite l'écriture de code qui script des choses. L'assembly n'est pas un bon langage de script car il rend le script difficile. C est quelque part au milieu, car bien qu'il ait un mot-clé (système) pour appeler, il selle également l'utilisateur avec beaucoup de cruauté avant que vous puissiez y arriver.
nomen
93

Facile. Quand je l'utilise, c'est un langage dynamique moderne, quand vous l'utilisez, c'est simplement un langage de script!

Martin Beckett
la source
19
Ouais. "Ce n'est pas un" langage jouet ", c'est un" langage de haut niveau "": P
Roberto Bonvallet
6
qui était dégueulasse et hors sujet, -1
adf88
1
Même avec - (1 + 1), il obtient environ 2x + 1s par rapport à un coché. : D
anatoly techtonik
Meilleur. Répondre. EVAR!
iconoclaste le
41

Traditionnellement, lorsqu'on parle de la différence entre les scripts et la programmation, les scripts sont interprétés et les programmes sont compilés. Un langage peut être exécuté de différentes manières - interprété ou compilé (en bytecode ou en code machine). Cela ne fait pas une langue ou une autre.

À certains yeux, la façon dont vous utilisez un langage en fait un langage de script (par exemple, les développeurs de jeux qui développent principalement en C ++ scriptent les objets en Lua). Encore une fois, les lignes sont floues - un langage peut être utilisé pour une programmation par une personne et le même langage peut être utilisé pour un langage de script par une autre.

Ceci est extrait de l' article de wikipedia sur les langages de script:

Un langage de script, un langage de script ou un langage d'extension est un langage de programmation qui permet de contrôler une ou plusieurs applications logicielles. Les «scripts» sont distincts du code de base de l'application, car ils sont généralement écrits dans une langue différente et sont souvent créés ou au moins modifiés par l'utilisateur final. Les scripts sont souvent interprétés à partir du code source ou du bytecode, alors que les applications qu'ils contrôlent sont traditionnellement compilées en code machine natif. Les langages de script sont presque toujours intégrés dans les applications qu'ils contrôlent.

Vous remarquerez l'utilisation de «habituellement», «souvent», «traditionnellement» et «presque toujours» - tout cela vous indique qu'il n'y a aucun ensemble d'attributs distincts qui font d'un langage spécifique un «langage de script».

Oded
la source
1
@Amr: Eh bien, cela s'appelle java script
sepp2k
1
@Ram Bhat - c'est déroutant, car la distinction est artificielle.
Oded
11
@Andrey: Toutes les implémentations JavaScript modernes sont compilées. Et il y a des interprètes pour C.
Jörg W Mittag
27
Ceci est tout simplement faux. Eh bien, en fait, ce n'est même pas faux , cela n'a tout simplement pas de sens. Il n'existe pas de langage compilé ou interprété. Un langage n'est pas compilé, un langage l' est tout simplement . C'est un tas de règles mathématiques abstraites. L'interprétation et la compilation sont des caractéristiques d'un moteur d'exécution , pas d'un langage. Chaque langage peut être implémenté avec un compilateur ou un interpréteur. En fait, tous les langages qui ont été cités comme "interprétés" sur cette page, ont presque exclusivement des implémentations compilées, par exemple JavaScript, PHP, Python, Ruby.
Jörg W Mittag
5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera) compilent tous JavaScript en bytecode, puis une partie du bytecode est interprétée et une partie compilée en code natif. V8 (Chrome) ignore le bytecode et compile JavaScript directement en code natif. IronJS compile JavaScript en bytecode CIL. Rhino compile JavaScript en bytecode JVML. BESEN (le seul moteur ECMAScript 5 à ce jour) compile JavaScript en bytecode BESEN, et un compilateur natif est actuellement ajouté. Certains des éléments ci-dessus compilent également des expressions régulières en code machine natif.
Jörg W Mittag
31

"Un scénario, c'est ce que vous donnez aux acteurs. Un programme, c'est ce que vous donnez au public." - Larry Wall

Je ne pense vraiment pas qu'il y ait plus de différence. Les langages dits de "scripting" sont souvent compilés - très rapidement et à l'exécution. Et certains des langages de "programmation" sont également compilés au moment de l'exécution (pensez à JIT) et la première étape de la "compilation" est la vérification de la syntaxe et la résolution des ressources.

Ne vous accrochez pas dessus, ce n'est vraiment pas important.

Clinton Pierce
la source
hmmm .. Je n'ai pas raccroché, mais la plupart des intervieweurs et des enseignants le sont. Et je n'ai jamais vu personne de ces personnes me donner une réponse satisfaisante!
Laz
1
Et si vous donniez l'une des autres réponses ici, en tant qu'intervieweur, je penserais que vous ne maîtrisiez vraiment pas la question. La distinction est vraiment floue et il n'y a pas de réponse claire. Si vous aviez dit "Eh bien, traditionnellement ...", je le prendrais, mais je m'attendrais à ce que vous discutiez également de choses comme la compilation d'exécution et le JIT.
Clinton Pierce
25

Ma définition serait un langage qui est généralement distribué en tant que source plutôt qu'en tant que binaire.

Kenny
la source
5
Vous pensez donc que php, python, etc. sont des langages de script?
Sietse
"Scripting" est une description courante pour Python et PHP.
S.Lott
22
php et python - bien sûr, ce sont des langages de script!
Antony Carthy
c'est ce que ma définition a été depuis le début
@Antony Carthy c'est faux. Python n'est généralement pas un langage de script, mais il peut être, comme tout autre langage, utilisé dans un programme (comme Word (VB), Browser (JS))
Joschua
16

Il y a beaucoup de réponses possibles à cela.

Premièrement: ce n'est pas vraiment une question de différence entre un langage de script et un langage de programmation, car un langage de script est un langage de programmation. Il s'agit plus de savoir quels traits font d'un langage de programmation un langage de script tandis qu'un autre langage de programmation n'est pas un langage de script.

Deuxièmement: il est vraiment difficile de dire ce qu'est un langage XYZ, que ce XYZ soit "scripting", "programmation fonctionnelle", "programmation orientée objet" ou que sais-je encore. La définition de ce qu'est la "programmation fonctionnelle" est assez claire, mais personne ne sait ce qu'est un "langage de programmation fonctionnel".

La programmation fonctionnelle ou la programmation orientée objet sont de la programmation styles de ; vous pouvez écrire dans un style fonctionnel ou orienté objet dans à peu près n'importe quel langage. Par exemple, le système de fichiers virtuel Linux Switch et le modèle pilote Linux sont fortement orienté objet en dépit écrit en C, alors que beaucoup de code Java ou C # que vous voyez sur le web est très procédurale et non orientée objet du tout . OTOH, j'ai vu du code Java très fonctionnel.

Donc, si la programmation fonctionnelle et la programmation orientée objet ne sont que des styles qui peuvent être réalisés dans n'importe quel langage, alors comment définissez-vous un «langage de programmation orienté objet»? On pourrait dire qu'un langage de programmation orienté objet est un langage qui permet la programmation orientée objet. Mais ce n'est pas vraiment une définition: tous les langages permettent la programmation orientée objet, donc tous les langages sont orientés objet? Donc, vous dites, eh bien un langage est orienté objet, s'il vous oblige à programmer dans un style orienté objet. Mais ce n'est pas non plus une définition: tous les langages permettent la programmation fonctionnelle, donc aucun langage n'est orienté objet?

Donc, pour moi, j'ai trouvé la définition suivante:

Un langage est un langage de script (langage orienté objet / langage fonctionnel) si les deux

  • facilite la création de scripts (programmation orientée objet / programmation fonctionnelle), c'est-à-dire qu'il le permet non seulement , mais le rend facile et naturel et contient des fonctionnalités qui l' aident , ET
  • vous encourage et vous guide vers le scripting (programmation orientée objet / programmation fonctionnelle).

Donc, après cinq paragraphes, je suis arrivé à: "un langage de script est un langage de script". Quelle belle définition. NE PAS.

De toute évidence, nous devons maintenant examiner la définition de "scripting".

C'est là qu'intervient le troisième problème: alors que le terme «programmation fonctionnelle» est bien défini et que seul le terme «langage de programmation fonctionnel» pose problème, malheureusement avec le scripting, à la fois le terme «scripting» et le terme «scripting language» "sont mal définis.

Eh bien, tout d'abord le script est la programmation. C'est juste un type spécial de programmation. IOW: chaque script est un programme, mais tous les programmes ne sont pas un script; l'ensemble de tous les scripts est un sous-ensemble approprié de l'ensemble de tous les programmes.

À mon avis personnel, ce qui fait la création de scripts et le distingue des autres types de programmation, c'est que…

Les scripts manipulent en grande partie des objets qui

  • n'ont pas été créés par le script,
  • ont une durée de vie indépendante du script et
  • vivre en dehors du domaine du script.

De plus, les types de données et les algorithmes utilisés ne sont généralement pas définis par le script mais par l'environnement extérieur.

Pensez à un script shell: les scripts shell manipulent généralement des fichiers, des répertoires et des processus. La majorité des fichiers, répertoires et processus de votre système n'ont probablement pas été créés par le script en cours d'exécution. Et ils ne disparaissent pas lorsque le script se termine: leur durée de vie est totalement indépendante du script. Et ils ne font pas vraiment partie du script non plus, ils font partie du système. Vous n'avez pas commencé votre script par l'écriture Fileet les Directoryclasses, ces types de données ne vous concernent pas: vous supposez simplement qu'ils sont là, et vous ne savez même pas (ni n'avez besoin de savoir) comment ils fonctionnent. Et vous n'implémentez pas non plus vos propres algorithmes, par exemple pour la traversée de répertoire, vous utilisez simplement findau lieu d'implémenter votre propre recherche en largeur d'abord.

En bref: un script s'attache à un système plus grand qui existe indépendamment du script, manipule une petite partie du système puis se termine.

Ce système plus large peut être le système d'exploitation dans le cas d'un script shell, le DOM du navigateur dans le cas d'un script navigateur, un jeu (par exemple World of Warcraft avec Lua ou Second Life avec le Linden Scripting Language), une application (par exemple AutoLisp langage pour les macros AutoCAD ou Excel / Word / Office), un serveur Web, un pack de robots ou autre chose.

Notez que l'aspect script est complètement orthogonal à tous les autres aspects des langages de programmation: un langage de script peut être fortement ou faiblement typé, strictement ou vaguement typé, typé statiquement ou dynamiquement, typé nominalement, structurellement ou canard, diable il peut même être non typé . Il peut être impératif ou fonctionnel, orienté objet, procédural ou fonctionnel, strict ou paresseux. Ses implémentations peuvent être interprétées, compilées ou mixées.

Par exemple, Mondrian est un langage de script fonctionnel paresseux strictement fortement typé statiquement avec une implémentation compilée.

Cependant, tout cela est sans objet, car la façon dont le terme langage de script est réellement utilisé dans le monde réel n'a rien à voir avec tout ce qui précède. Il est le plus souvent utilisé simplement comme une insulte, et la définition est assez simple, voire simpliste:

  • vrai langage de programmation: mon langage de programmation
  • langage de script: votre langage de programmation

Cela semble être la manière dont le terme est le plus souvent utilisé.

Jörg W Mittag
la source
Une partie de cette réponse est stupide. Un langage est "orienté objet" lorsqu'il est orienté vers la programmation avec des objets. Un langage est "fonctionnel" s'il a des fonctions de première classe. Cela ne veut pas dire qu'une langue ne peut pas être les deux. Ce sont des caractéristiques des langues et non des définitions de types. Le script est similaire. Un langage est un "bon langage de script" s'il facilite l'écriture de scripts - de courtes et simples parties d'interaction utilisateur-application.
nomen
16

C'est comme du porno, vous le savez quand vous le voyez. La seule définition possible d'un langage de script est:

A language which is described as a scripting language.

Un peu circulaire, n'est-ce pas? (Au fait, je ne plaisante pas).

Au fond, il n'y a rien qui fasse d'un langage un langage de script si ce n'est qu'on l'appelle tel, surtout par ses créateurs. Le principal ensemble de langages de script modernes est PHP, Perl, JavaScript, Python, Ruby et Lua. Tcl est le premier langage de script moderne majeur (ce n'était pas le premier langage de script cependant, j'oublie ce que c'est, mais j'ai été surpris d'apprendre qu'il était antérieur à Tcl).

Je décris les caractéristiques des principaux langages de script dans mon article :

 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

La plupart sont typés et interprétés dynamiquement, et la plupart n'ont pas de sémantique définie en dehors de leur implémentation de référence. Cependant, même si leur implémentation majeure devient compilée ou JIT, cela ne change pas la «nature» du langage.

La seule question qui reste est de savoir comment savoir si une nouvelle langue est un langage de script. Eh bien, si cela s'appelle un langage de script, c'est un. Donc, Factor est un langage de script (ou du moins l'était quand il a été écrit), mais, disons, Java ne l'est pas.

Paul Biggar
la source
1
C'est une très bonne explication, mais je suis sûr que certaines personnes la votent parce qu'elles voient du "porno"
HoKy22
Le lien vers le papier est rompu.
Quazi Irfan
5

Le "langage de script" est l'un de ces concepts flous qui peuvent signifier beaucoup de choses. Habituellement, cela fait référence au fait qu'il existe un processus en une étape vous conduisant du code source à l'exécution.

Par exemple en Perl, vous faites: perl my_source.pl

Compte tenu des critères ci-dessus, PHP est un langage de script (même si vous pouvez avoir un processus de "compilation" par exemple lorsque vous utilisez Zend Encoder pour "protéger" le code source).

PS. Les langages de script sont souvent (mais pas toujours) interprétés. Aussi souvent (mais encore une fois, pas toujours) les langages de script sont typés dynamiquement.

Cd-MaN
la source
Perl se compile en byte-code avant de s'exécuter.
Brad Gilbert
2
Et Java? Vous avez besoin d'un jvm pour exécuter un programme java mais je ne l'appellerais pas un langage de script
Eineki
5

Tous les langages de script sont des langages de programmation. Donc, à proprement parler, il n'y a pas de différence.

Le terme ne fait référence à aucune propriété fondamentale de la langue, il se réfère à l' utilisation typique de la langue. Si l'utilisation typique est d'écrire des programmes courts qui font principalement des appels à du code préexistant, et un traitement simple sur les résultats, (c'est-à-dire, si l'utilisation typique est d'écrire des scripts ), alors c'est un langage de script.

Joren
la source
4

Je pense que M. Roberto Ierusalimschy a une très bonne réponse ou la question dans `` Programming in Lua '':

Cependant, la particularité des langages interprétés n'est pas qu'ils ne sont pas compilés, mais que n'importe quel compilateur fait partie du runtime du langage et que, par conséquent, il est possible (et facile) d'exécuter du code généré à la volée

Rodrigo Lopez
la source
Cela ne répond pas du tout à la question!
Paul Biggar
Permettez-moi de le répéter, un langage de script est celui dans lequel le compilateur est inclus et il est possible d'exécuter du code généré à la volée. Comment cela ne répond-il pas à la question?
Rodrigo Lopez
C'est une langue interprétée. Si vous essayez de dire que tout langage interprété est un langage de script, dites-le.
Paul Biggar
Eh bien, tous les langages peuvent être utilisés pour l'écriture de scripts, l'élément clé pour moi est de savoir s'ils sont adaptés. Pour moi, la caractéristique distinctive est que, oui, ils sont interprétés.
Rodrigo Lopez
4
Common Lisp n'est pas ce que je considère généralement comme un langage de script, mais il a une fonction complète eval.
David Thornley
4

Une division est

  • script = interprété dynamiquement
  • normal = compilé

Un langage interprété dynamiquement est interprété à l'exécution alors qu'un langage compilé est compilé avant l'exécution.

Je dois ajouter que, comme Jörg l'a souligné, la distinction interprétée / compilée n'est pas une caractéristique du langage, mais du moteur d'exécution.

Vous pourriez également être intéressé par cette explication du système de type , qui est lié et se concentre davantage sur l'aspect langage, plutôt que sur le moteur d'exécution. La plupart des langages de script sont typés dynamiquement, tandis que les langages «normaux» sont généralement typés statiquement.

En général, la division des langages statiquement et dynamiquement typés est mieux définie et a plus d'implications sur la convivialité du langage.

Timo Westkämper
la source
Qu'en est-il de l'Objective-C?
mouviciel
1
Il prend en charge le typage dynamique, mais je ne l'appellerais pas un langage de script.
Timo Westkämper
2
Ceci est tout simplement faux. Eh bien, en fait, ce n'est même pas faux , cela n'a tout simplement pas de sens. Il n'existe pas de langage compilé ou interprété. Un langage n'est pas compilé, un langage l' est tout simplement . C'est un tas de règles mathématiques abstraites. L'interprétation et la compilation sont des caractéristiques d'un moteur d'exécution , pas d'un langage.Chaque langage peut être implémenté avec un compilateur ou un interpréteur. En fait, tous les langages qui ont été cités comme "interprétés" sur cette page, ont presque exclusivement des implémentations compilées, par exemple JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@ jorg-w-mittag, n'hésitez pas à modifier ma réponse pour la rendre plus correcte. Vos points sont valides. Cependant, normalement, si vous parlez d'une langue, vous parlez également du moteur d'exécution par défaut.
Timo Westkämper
3

Un langage de script est généralement :

  1. Typé dynamiquement
  2. Interprété, avec très peu d'accent sur les performances, mais une bonne portabilité
  3. Nécessite beaucoup moins de code standard , ce qui conduit à un prototypage très rapide
  4. Est utilisé pour les petites tâches, adapté à l'écriture d'un seul fichier pour exécuter un "script" utile.

Alors qu'un langage sans script est généralement : 1. typé statiquement 2. Compilé, avec un accent sur les performances 3. Nécessite plus de code standard, conduisant à un prototypage plus lent mais plus de lisibilité et de maintenabilité à long terme 4. Utilisé pour les grands projets, s'adapte à de nombreux modèles de conception

Mais c'est plus une différence historique de nos jours, à mon avis. Javascript et Perl ont été écrits avec de petits scripts simples à l'esprit, tandis que C ++ a été écrit avec des applications complexes à l'esprit; mais les deux peuvent être utilisés de toute façon. Et de nombreux langages de programmation, modernes et anciens, brouillent la ligne de toute façon (et c'était flou en premier lieu!).

Le plus triste, c'est que j'ai connu quelques développeurs qui détestent ce qu'ils percevaient comme des "langages de script", pensant qu'ils étaient plus simples et pas aussi puissants. Mon opinion est ce vieux cliché - utilisez le bon outil pour le travail.

chêne
la source
2
Il n'existe pas de langage compilé ou interprété. Un langage n'est pas compilé, un langage l' est tout simplement . C'est un tas de règles mathématiques abstraites. L'interprétation et la compilation sont des caractéristiques d'un moteur d'exécution , pas d'un langage. Chaque langage peut être implémenté avec un compilateur ou un interpréteur. En fait, tous les langages qui ont été cités comme "interprétés" sur cette page, ont presque exclusivement des implémentations compilées, par exemple JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@Jorg: Bon point, je suis d'accord. Mais je n'ai pas dit que cela ne pouvait pas être compilé, juste dit que ces types de langages sont généralement interprétés plutôt que compilés, dans l'usage courant.
Oak
Sont-ils? Toutes les implémentations actuelles de Python, PHP, Perl et Lua sont compilées. À l'exception de l'IRM, toutes les implémentations actuelles de Ruby sont compilées. (Et il n'y a en fait pas un, mais deux compilateurs JIT pour l'IRM.) À l'exception de JScript, toutes les implémentations JavaScript actuelles sont compilées. Notez que le successeur de JScript, Chakra, est compilé. De nombreuses implémentations de Scheme sont compilées. ELisp est compilé.
Jörg W Mittag
3

Les langages de script étaient à l'origine considérés comme des mécanismes de contrôle pour les applications écrites dans un langage de programmation dur. Les programmes compilés ne pouvaient pas être modifiés au moment de l'exécution, donc la création de scripts offrait de la flexibilité aux utilisateurs.

Plus particulièrement, le script shell automatisait les processus dans le noyau du système d'exploitation (traditionnellement, AppleScript sur Mac); un rôle qui passait de plus en plus entre les mains de Perl, puis en sortait en Python ces derniers temps. J'ai vu Scheme (en particulier dans son implémentation Guile) utilisé pour déclarer des scènes de lancer de rayons; et récemment, Lua est très populaire en tant que langage de programmation pour les jeux de scripts - au point que la seule chose codée en dur dans de nombreux nouveaux jeux est le moteur graphique / physique, tandis que toute la logique du jeu est encodée en Lua. De la même manière, JavaScript a été pensé pour scénariser le comportement d'un navigateur Web.

Les langues se sont émancipées; personne ne pense maintenant au système d'exploitation comme une application (ou n'y pense plus du tout), et de nombreux langages de script autrefois ont commencé à être utilisés pour écrire leurs propres applications complètes. Le nom lui-même est devenu vide de sens et s'est répandu dans de nombreuses langues interprétées utilisées aujourd'hui, qu'elles soient conçues pour être interprétées à partir d'un autre système ou non.

Cependant, «langages de script» n'est certainement pas synonyme de «langages interprétés» - par exemple, BASIC a été interprété pendant la majeure partie de sa vie (c'est-à-dire avant qu'il ne perde son acronimicité et ne devienne Visual Basic), mais personne ne le considère vraiment comme script.

MISE À JOUR: Matériel de lecture comme d'habitude disponible sur Wikipedia .

Amadan
la source
En fait, l'implémentation BASIC d'origine était un compilateur. Ce n'est que plus tard que les clones BASIC ont été écrits en tant qu'interprètes, car les interprètes sont censés être plus faciles à écrire que les compilateurs.
Jörg W Mittag
1
@ Jörg: Pas tout à fait. Alors que les toutes premières implémentations de test de Dartmouth BASIC ont été compilées (appelées Card BASIC), les implémentations réelles étaient des interpréteurs. En fait, la nouveauté la plus importante de BASIC était probablement son caractère interactif. Pas besoin de perforer le code source dans une carte et de les envoyer au compilateur. L'utilisateur peut simplement s'asseoir au télétype, écrire le programme puis l'exécuter.
PauliL
Il est intéressant de noter que cette réponse introduit l'idée d'un langage «dur». Le terme «dur» a-t-il besoin d'une définition dans ce contexte?
DA Vincent
@DavidVincent: J'aurais probablement dû vouloir dire «plus difficile». Aucune définition formelle n'est nécessaire, la compréhension intuitive devrait suffire: il est beaucoup plus difficile d'écrire un programme en Assembly ou C qu'en Ruby ou Python, étant donné que les premiers sont beaucoup plus bas niveau et verbeux que les seconds.
Amadan du
3

Premier point, un langage de programmation n'est pas un "langage de script" ou quelque chose d'autre. Cela peut être un "langage de script" et autre chose.

Deuxième point, l'implémenteur du langage vous dira s'il s'agit d'un langage de script.

Votre question devrait se lire "Dans quelles implémentations un langage de programmation serait-il considéré comme un langage de script?", Et non "Quelle est la différence entre un langage de script et un langage de programmation?". Il n'y a pas d'intermédiaire.

Pourtant, je considérerai un langage comme un langage de script s'il est utilisé pour fournir un certain type de middleware. Par exemple, je considérerais la plupart des implémentations de JavaScript comme un langage de script. Si JavaScript était exécuté dans le système d'exploitation, pas dans le navigateur, ce ne serait pas un langage de script. Si PHP s'exécute à l'intérieur d'Apache, c'est un langage de script. S'il est exécuté à partir de la ligne de commande, ce n'est pas le cas.

Marcus Adams
la source
3

Je vois un langage de script comme tout ce qui ne nécessite pas une étape de «compilation» manifeste et lourde. La caractéristique principale du point de vue des programmeurs est la suivante: vous éditez le code et l'exécutez immédiatement.

Je considérerais donc JavaScript et PHP comme des langages de script, alors qu'ActionScript 3 / Flex ne l'est pas vraiment.

Peter Mortensen
la source
Je ne veux pas dénigrer la réponse de Peter, mais pouvons-nous ajouter plus qu'une opinion?
DA Vincent
3

Mon ami et moi venons d'avoir cet argument: quelle est la différence entre un langage de programmation et un langage de script.

Un argument populaire est que les langages de programmation sont compilés et les langages de script sont interprétés - Cependant, je crois que cet argument est complètement faux ... pourquoi?

  1. Chakra et V8 (moteurs JavaScript de Microsoft et de Google) compilent le code avant l'exécution
  2. QBasic est interprété - est-ce que cela fait de Qbasic un langage de "scripting"?

Sur cette base, voici mon argument pour la différence entre un langage de programmation et un langage de script:

Un langage de programmation s'exécute au niveau de la machine et a accès à la machine elle-même (mémoire, graphiques, son, etc.).

Un langage de script est en bac à sable et n'a accès qu'aux objets exposés au bac à sable. Il n'a pas d'accès direct à la machine sous-jacente.

Matthew Layton
la source
2

A mon avis, je dirais que les langages interprétés dynamiquement tels que PHP, Ruby, etc ... sont toujours des langages "normaux". Je dirais que les exemples de langages de "scripting" sont des choses comme bash (ou ksh ou tcsh ou autre) ou sqlplus. Ces langages sont souvent utilisés pour enchaîner les programmes existants sur un système en une série de commandes cohérentes et associées, telles que:

  1. copier A.txt dans / tmp / work /
  2. exécuter le processus de nettoyage nocturne sur le serveur de base de données
  3. consigner les résultats et les envoyer au sysdamin

Je dirais donc que la différence (pour moi, en tout cas) réside davantage dans la façon dont vous utilisez la langue. Des langages comme PHP, Perl, Ruby pourraient être utilisés comme "langages de script", mais je les vois généralement comme des "langages normaux" (sauf Perl qui semble aller dans les deux sens.

FrustréWithFormsDesigner
la source
Merci .. Cela rend les choses un peu plus claires. Donc, pour récapituler, les langages de script sont conçus pour utiliser des programmes déjà existants ensemble dans une séquence. MAIS des langages comme C peuvent être utilisés pour faire la même chose via les API. Donc, techniquement, tout dépend de l'utilisation
Laz
Non, vous faites simplement une distinction artificielle (c'est ce que c'est). Si vous pouvez créer quelque chose rapidement avec lui, un langage sera souvent appelé un langage de script, mais ce n'est pas une définition stricte ou quoi que ce soit. Les langages couramment interprétés sont également appelés langages de script.
wlangstroth
@Will: toute distinction serait artificielle. C'était ma distinction opiniâtre. ;)
FrustratedWithFormsDesigner
oui, mais "scripting" dans ce cas est un usage très familier et vague. Décider qu'il est "d'utiliser des programmes déjà existants ensemble dans une séquence" est très spécifique, et pas tout à fait juste. Cela ressemble peut-être à un script shell , mais pas à Perl. Ensuite, pour contraster cela avec les API (?) ... Je ne voulais tout simplement pas que le gars s'éloigne trop de la piste.
wlangstroth
2

Je vais simplement continuer et migrer ma réponse à partir de la question en double


Le nom «Langage de script» s'applique à un rôle très spécifique: le langage dans lequel vous écrivez des commandes à envoyer à une application logicielle existante. (comme un "scénario" de télévision ou de film traditionnel)

Par exemple, il était une fois les pages Web HTML ennuyeuses. Ils étaient toujours statiques. Puis un jour, Netscape a pensé: "Hé, et si nous laissions le navigateur lire et agir sur les petites commandes de la page?" Et comme ça, Javascript s'est formé.

Une simple commande javascript est la alert() commande qui demande / commande au navigateur (une application logicielle) qui lit la page Web d'afficher une alerte.

Maintenant, est alert()lié, de quelque manière que ce soit, au C ++ ou à tout autre langage de code que le navigateur utilise réellement pour afficher l'alerte? Bien sûr que non. Quelqu'un qui écrit "alert ()" sur une page .html ne comprend pas comment le navigateur affiche réellement l'alerte. Il écrit juste une commande que le navigateur interprétera.

Voyons le code javascript simple

<script>
var x = 4
alert(x)
</script>

Ce sont des instructions qui sont envoyées au navigateur, pour que le navigateur les interprète lui-même. Le langage de programmation que le navigateur utilise pour définir une variable sur 4, et mettre cela dans une alerte ... il n'a aucun rapport avec javascript.

Nous appelons cette dernière série de commandes un "script" (c'est pourquoi il est entouré de <script>balises). Juste par la définition de "script", au sens traditionnel: Une série d'instructions et de commandes envoyées aux acteurs . Tout le monde sait qu'un scénario (un scénario de film), par exemple, est un script.

Le scénario (script) n'est pas les acteurs, ni la caméra, ni les effets spéciaux. Le scénario leur dit simplement quoi faire.

Maintenant, ce qui est un script langage , exactement?

Il existe de nombreux langages de programmation qui ressemblent à différents outils dans une boîte à outils; certaines langues ont été conçues spécifiquement pour être utilisés comme scripts.

Javasript est un exemple évident; il existe très peu d'applications de Javascript qui ne relèvent pas du domaine des scripts.

ActionScript (le langage des animations Flash) et ses dérivés sont des langages de script, en ce sens qu'ils émettent simplement des commandes au lecteur / interpréteur Flash. Bien sûr, il existe des abstractions telles que la programmation orientée objet, mais tout cela est simplement un moyen d'arriver à la fin: envoyer des commandes au lecteur flash.

Python et Ruby sont également couramment utilisés comme langages de script. Par exemple, j'ai travaillé une fois pour une entreprise qui utilisait Ruby pour écrire des commandes à envoyer à un navigateur qui ressemblaient à "allez sur ce site, cliquez sur ce lien ..." pour effectuer des tests automatisés de base. Je n'étais en aucun cas un "développeur de logiciels" à ce poste. Je viens d'écrire des scripts qui envoyaient des commandes à l'ordinateur pour envoyer des commandes au navigateur.

En raison de leur nature, les langages de script sont rarement «compilés», c'est-à-dire traduits en code machine et lus directement par l'ordinateur.

Même les applications GUI créées à partir de Python et Ruby sont des scripts envoyés à une API écrite en C ++ ou C. Elle indique à l'application C ce qu'elle doit faire.

Il y a bien sûr une ligne d'imprécision. Pourquoi ne pouvez-vous pas dire que Machine Language / C sont des langages de script, car ce sont des scripts que l'ordinateur utilise pour s'interfacer avec la carte mère / les cartes graphiques / les puces de base?

Il y a quelques lignes que nous pouvons tracer pour clarifier:

  1. Lorsque vous pouvez écrire un langage de script et l'exécuter sans "compiler", c'est plus une sorte de script direct. Par exemple, vous n'avez rien à faire avec un scénario pour dire aux acteurs quoi en faire. Il est déjà là, utilisé tel quel. Pour cette raison, nous exclurons les langages compilés d'être appelés langages de script, même s'ils peuvent être utilisés à des fins de script dans certaines occasions.

  2. Le langage de script implique des commandes envoyées à une application logicielle complexe ; c'est la raison pour laquelle nous écrivons des scripts en premier lieu - vous n'avez donc pas besoin de connaître la complexité du fonctionnement du logiciel pour lui envoyer des commandes. Ainsi, les langages de script ont tendance à être des langages qui envoient des commandes (relativement) simples à des applications logicielles complexes ... dans ce cas, le langage machine et le code d'assemblage ne le coupent pas.

Justin L.
la source
2

Puis-je suggérer que les langages de script sont un terme dont beaucoup de gens s'éloignent. Je dirais que cela se résume principalement aux langages compilés et aux langages dynamiques de nos jours.

Je veux dire que vous ne pouvez pas vraiment dire quelque chose comme Python, ou Ruby sont des langages de "script" de nos jours (vous avez même des trucs comme IronPython et JIT-your-favorite-language , la différence a été encore plus floue).

Pour être honnête, personnellement, je ne pense plus que PHP soit un langage de script. Je ne m'attendrais pas à ce que les gens aiment catégoriser PHP différemment de Java sur leur CV.

Robert Gould
la source
Même si je travaille beaucoup en php, je dirais que jusqu'à ce qu'il passe du statut basé sur un script à un modèle de servlet / real / fcgi déléguant des tâches de distribution depuis le serveur, je l'appellerais personnellement "un assez bon langage de script, qui peut donner l'illusion d'une application "
Kent Fredric
Statique / Dynamique, il existe des langages dynamiques qui sont compilés.
Brad Gilbert
Je le répète: je veux dire que vous ne pouvez pas vraiment dire quelque chose comme Python, ou Ruby sont des langages de "script" de nos jours (vous avez même des trucs comme IronPython et JitYourFavoriteLanguage, la différence a été encore plus floue).
Robert Gould
1

Les langages de script ont tendance à fonctionner dans un moteur de script qui fait partie d'une application plus large. Par exemple, JavaScript s'exécute dans le moteur de script de votre navigateur.

Martin OConnor
la source
Hilarant que la réponse acceptée ait deux votes négatifs.
Robert S.
1
Il devrait y avoir une sorte de badge pour cela. Que diriez-vous de "ne peut pas gérer la vérité."? Nan, un peu trop bavard. ;-)
Joseph Ferris
3
Perl, Python, Ruby, Tcl / Tk - pour ne citer que quatre langages de script - ne sont pas principalement intégrés dans une application plus grande.
Jonathan Leffler
3
Ergo - ce ne sont pas des langages de script.
Milen A. Radev
3
Euh ouais, ce serait bien si cela pouvait être annulé comme correct d'une manière ou d'une autre.
Noon Silk
1

Un langage de script est un langage qui est interprété à chaque fois que le script est exécuté, cela implique d'avoir un interprète et la plupart sont très lisibles par l'homme, pour être utile un langage de script est facile à apprendre et à utiliser.

Chaque langage compilable peut être transformé en langage de script et vice versa tout dépend de l'implémentation d'un interpréteur ou d'un compilateur, par exemple C ++ a un interpréteur donc il peut être appelé un langage de script s'il est utilisé ainsi (pas très pratique en général comme C ++ est un langage très complexe), l'un des langages de script les plus utiles actuellement est Python ...

Donc, pour répondre à votre question, la définition est sur l'utilisation d'un interprète pour exécuter des programmes scriptés rapides et faciles, pour traiter des tâches simples ou des applications prototypes, l'utilisation la plus puissante que l'on puisse faire des langages de script est d'inclure la possibilité pour chaque utilisation d'étendre un application compilée.

Panique
la source
1

Je préfère que les gens n'utilisent pas le terme «langage de script» car je pense que cela diminue l'effort. Prenez un langage comme Perl, souvent appelé "langage de script".

  • Perl est un langage de programmation!
  • Perl est compilé comme Java et C ++. Il est simplement compilé beaucoup plus rapidement!
  • Perl a des objets, des espaces de noms et des fermetures.
  • Perl a des IDE, des débogueurs et des profileurs.
  • Perl a une formation, un support et une communauté.
  • Perl n'est pas seulement Web. Perl n'est pas seulement un administrateur système. Perl n'est pas seulement le ruban adhésif d'Internet.

Pourquoi avons-nous même besoin de faire la distinction entre un langage comme Java qui est compilé et Ruby qui ne l'est pas? Quelle est la valeur de l'étiquetage?

Pour en savoir plus, consultez http://xoa.petdance.com/Stop_saying_script .

Andy Lester
la source
Aucun ordinateur ne peut exécuter nativement perl ou ruby ​​(ou toute autre forme dans laquelle ils pourraient être compilés). Par conséquent, perl et ruby ​​sont des langages de script, interprétés par un analyseur ou une machine virtuelle.
anon6439
@psoul: oui. tout comme java.
Stefano Borini
Il existe plusieurs techniques pour compiler ruby ​​en code machine bien que je ne sois pas sûr que l'une d'entre elles ne regroupe pas seulement l'interpréteur avec une chaîne représentant du code ruby, mais même si cela était vrai, un traducteur de code ruby ​​en machine peut être créé. le code machine ne le rendrait nulle part proche de la vitesse c en raison de toute la répartition dynamique et de la gc entre autres. Je ne pense pas qu'il y ait de processeurs ruby, mais des machines conçues pour s'adapter plus étroitement au modèle lisp et aux processeurs qui exécutaient le bytecode java.
Roman A. Taycher
1

Une différence importante est le typage fort (par rapport au typage faible ). Les langages de script sont souvent faiblement typés , ce qui permet d'écrire plus rapidement de petits programmes. Pour les grands programmes, c'est un inconvénient, car cela empêche le compilateur / interpréteur de trouver certains bogues de manière autonome, ce qui rend très difficile la refactorisation du code.

Dimitri C.
la source
1

Les langages de script sont des langages de programmation où les programmes sont généralement livrés aux utilisateurs finaux sous une forme textuelle lisible et où il existe un programme qui peut apparemment exécuter ce programme directement. (Le programme peut très bien compiler le script en interne; ce n'est pas pertinent ici car il n'est pas visible pour l'utilisateur.)

Il est relativement courant que les langages de script puissent prendre en charge une session interactive où les utilisateurs peuvent simplement taper leur programme et l'exécuter immédiatement. En effet, il s’agit d’une extension insignifiante de l’exigence essentielle du premier paragraphe; la principale exigence supplémentaire est l'ajout d'un mécanisme pour déterminer quand une instruction saisie est complète afin qu'elle puisse être envoyée au moteur d'exécution.

Boursiers Donal
la source
1

Pour une vision légèrement différente de la question. Un langage de script est un langage de programmation mais un langage de programmation n'est pas nécessairement un langage de script. Un langage de script est utilisé pour contrôler ou programmer un système. Ce système pourrait être un système d'exploitation où le langage de script serait bash. Le système peut être un serveur Web avec PHP comme langage de script. Les langages de script sont conçus pour remplir un créneau spécifique; ce sont des langues spécifiques à un domaine. Les systèmes interactifs ont interprété les langages de script, donnant lieu à l'idée que les langages de script sont interprétés; cependant, c'est une conséquence du système et non du langage de script lui-même.

phreed
la source
1

Un langage de script est un langage qui configure ou étend un programme existant.
Un langage de script est un langage de programmation.

Romain Hippeau
la source
1

La définition du «langage de script» est assez floue. Je me baserais sur les considérations suivantes:

  1. Les langages de script n'ont généralement pas d'étapes de compilation visibles par l'utilisateur. En règle générale, l'utilisateur peut simplement exécuter des programmes en une seule commande simple.

  2. Les programmes dans les langages de script sont normalement transmis sous forme source.

  3. Les langages de script ont normalement des runtimes qui sont présents sur un grand nombre de systèmes, et les runtimes peuvent être installés facilement sur la plupart des systèmes.

  4. Les langages de script ont tendance à être multiplateformes et non spécifiques à une machine.

  5. Les langages de script facilitent l'appel d'autres programmes et l'interface avec le système d'exploitation.

  6. Les langages de script sont généralement facilement intégrables dans des systèmes plus grands écrits dans des langages de programmation plus conventionnels.

  7. Les langages de script sont normalement conçus pour faciliter la programmation et avec beaucoup moins de considération pour la vitesse d'exécution. (Si vous voulez une exécution rapide, le conseil habituel est de coder les parties chronophages dans quelque chose comme C, et d'incorporer le langage dans C ou d'appeler les bits C à partir du langage.)

Certaines des caractéristiques que j'ai énumérées ci-dessus sont vraies pour les implémentations, auquel cas je fais référence aux implémentations les plus courantes. Il y a eu des interpréteurs C, avec (AFAIK) aucune étape de compilation évidente, mais ce n'est pas le cas de la plupart des implémentations C. Vous pouvez certainement compiler un programme Perl en code natif, mais ce n'est pas ainsi qu'il est normalement utilisé. Certaines autres caractéristiques sont de nature sociale. Certains des critères ci-dessus se recoupent quelque peu. Comme je l'ai dit, la définition est floue.

David Thornley
la source
0

Je dirais que le langage de script est celui qui manipule fortement les entités qu'il ne définit pas lui-même. Par exemple, JavaScript manipule les objets DOM fournis par le navigateur, PHP exploite une énorme bibliothèque de fonctions basées sur C, et ainsi de suite. Bien sûr, pas une définition précise, mais plutôt une façon de penser.

Michael Pliskin
la source
Mmm, PHP utilise la bibliothèque C sous-jacente, mais c'est le cas pour la plupart des langages, y compris Java (au niveau le plus bas). Et il ne manipule pas ces fonctions ...
PhiLho
0

Si ce n'est pas le cas / ne le ferait pas fonctionnerait sur le CPU, c'est un script pour moi. Si un interpréteur doit s'exécuter sur le processeur sous le programme, il s'agit d'un script et d'un langage de script.

Aucune raison de rendre les choses plus compliquées que cela?

Bien sûr, dans la plupart (99%) des cas, il est clair si un langage est un langage de script. Mais considérez qu'une VM peut émuler le jeu d'instructions x86, par exemple. Cela ne ferait-il pas du bytecode x86 un langage de script lorsqu'il est exécuté sur une machine virtuelle? Et si quelqu'un écrivait un compilateur qui transformerait le code Perl en un exécutable natif? Dans ce cas, je ne saurais plus comment appeler la langue elle-même. Ce serait la sortie qui importerait, pas la langue.

Là encore, je ne suis pas au courant que quoi que ce soit de tel ait été fait, donc pour l'instant je suis toujours à l'aise d'appeler des langages de script interprétés.

anon6439
la source
1
Vous appelez à peu près tous les langages sauf ceux qui compilent en binaire natif pour les langages de script? Je suis sûr que les développeurs Java seront heureux d'être appelés scripteurs;)
truppo
1
Elles sont. Scripteurs, c'est.
anon6439
0

Un script est un programme relativement petit . Un système est un programme relativement important ou une collection de programmes relativement importants.

Certains langages de programmation sont conçus avec des fonctionnalités que le concepteur de langage et la communauté de programmation considèrent comme utiles lors de l'écriture de programmes relativement petits. Ces langages de programmation sont connus sous le nom de langages de script , par exemple PHP.

De même, d'autres langages de programmation sont conçus avec des fonctionnalités que le concepteur de langage et la communauté de programmation considèrent comme utiles lors de l'écriture de programmes relativement volumineux. Ces langages de programmation sont appelés langages système , par exemple Java.

Désormais, les programmes petits et grands peuvent être écrits dans n'importe quelle langue. Un petit programme Java est un script. Par exemple, un programme Java "Hello World" est un script, pas un système. Un grand programme, ou une collection de programmes, écrit en PHP est un système. Par exemple, Facebook, écrit en PHP, est un système, pas un script.

Considérer une fonctionnalité de langage unique comme un «test décisif» pour décider si le langage est le mieux adapté à la programmation de scripts ou de systèmes est discutable. Par exemple, les scripts peuvent être compilés en code octet ou en code machine, ou ils peuvent être exécutés par interprétation directe de l'arbre de syntaxe abstraite (AST).

Ainsi, un langage est un langage de script s'il est généralement utilisé pour écrire des scripts . Un langage de script peut être utilisé pour écrire des systèmes, mais de telles applications sont susceptibles d'être considérées comme douteuses.

Greg Mattes
la source