# Langage de script

Un langage de script est un type de langage de programmation interprété, sans compilation explicite. Un langage de script permet de manipuler les fonctionnalités d'un système informatique configuré pour fournir à l'interpréteur de ce langage un environnement et une interface qui déterminent les possibilités de celui-ci. Le langage de script peut alors s'affranchir des contraintes des commandes de bas niveau — prises en charge par l'intermédiaire de l'interface — et bénéficier d'une syntaxe de haut niveau.
Les langages de scripts sont des langages faciles à mettre en œuvre, et disposant de puissantes primitives et/ou d'une grande bibliothèque.
Les langages de script sont généralement exécutés à partir de fichiers (dits, précisément, scripts) contenant le code source du programme qui sera interprété. Il ne faut pas confondre le langage de script, qui est un langage de programmation, et le terme script, qui désigne les programmes écrits en langage de script.
Historiquement, les langages de script ont été créés pour raccourcir le processus traditionnel de développement édition-compilation-édition des liens-exécution propre aux langages compilés. Les premiers langages étaient souvent appelés « langage de commande » ou « langage d'enchaînement des travaux » (JCL : Job Control Language) car ils permettaient simplement d'automatiser une succession de commandes simples, à la manière d'un « script » de théâtre. Par la suite, ils furent munis d'exécutions conditionnelles implicites (IBM 1130) ou explicites (JCL), et enfin d'ordres de boucle et d'opérateurs les transformant en quasi-langages de programmation.
Le terme « langage de script » désigne parfois n'importe quel langage de programmation interprété. En pratique, le caractère interprété ou compilé se rapporte à une implémentation particulière, mais pas à un langage.
Dans un sens différent, on appelle aussi langage de script un langage où les éléments visuels sont considérés comme des personnages placés sur une « scène », personnages dont le comportement est défini par un script. L'un des premiers langages de ce type dans le monde de la micro-informatique a été le langage HyperTalk (langage orienté objet dérivé de Smalltalk) très proche du langage naturel, que Dan Winkler crée en 1987 pour commander le programme HyperCard sur MacIntosh. Le langage Lingo de Macromedia Director est un descendant direct d'HyperTalk.
Le terme langage de script a souvent une connotation négative, on préfère alors parler de langage de programmation dynamique quand c'est possible.

## Propriétés des langages de script

Les langages de script sont des langages sans compilation explicite ; ils sont soit compilés à la volée avant chaque exécution, soit exécutés directement, sans compilation préalable. Ils sont faciles à mettre en œuvre, cela permet leur exécution dès leur écriture. Ils sont équipés de fortes primitives et/ou d’une large bibliothèque, cela permet de programmer rapidement et de façon concise des tâches complexes.
Ils ont également plusieurs propriétés :
* Gestion automatique de la mémoire. Lors de la création d'un variable (chaîne de caractère, tableau d'entier, etc), une allocation de mémoire implicite a lieu, et cette mémoire est libérée lorsqu'elle ne sera plus atteignable par les données du programme ;
* Typage dynamique. Les vérifications sont réalisées pendant l'exécution ;
* Déclaration optionnelle des variables. Les langages scripts n'imposent généralement pas la déclaration des variables. Celles-ci peuvent être globales par défaut (bash) ou locales par défaut (Python, PHP) ;
* Expansion de variable. Les langages de script permettent généralement l'insertion de variable dans les chaînes de caractères, avec une syntaxe spéciale permettant de substituer une valeur à une variable ou à un calcul ;
* Utilisation d'expressions rationnelles ;
* Utilisation de tableaux associatifs.

### Propriété des scripts

On appelle script les programmes informatiques écrits en langage de script.
Dans le sens le plus traditionnel, qui est celui des scripts shell, un script sert principalement à lancer et coordonner l'exécution de programmes.
* Dans sa version la plus simple, un script ne spécifie qu'une suite de programmes à appeler dans un ordre donné (par exemple éditeur de texte, compilateur, éditeur de liens et exécution du code objet). Cela crée rapidement des inefficiences : à quoi bon en effet tenter de charger et d'exécuter un programme dont la compilation a échoué ?
* On y ajoute donc assez vite une possibilité d'exécution conditionnelle simple (||, &&) en fonction du résultat de l'étape immédiatement précédente (il ne sert à rien d'exécuter si la compilation est mauvaise).
* La possibilité d'y employer des variables, des paramètres, des structures de contrôle (répétition, exécution conditionnelle), etc. fait des langages de scripts de véritables langages de programmation.

## Liste des langages de script

Les langages de script les plus connus sont :
* AppleScript (peut être compilé) ;
* AutoIt (peut être compilé) ;
* Cmd (anciennement Command), Windows PowerShell pour Windows ;
* GNU Octave
* Google Apps Script;
* Groovy ;
* JavaScript ;
* KiXtart ;
* Lua ;
* Lisp (peut être compilé) ;
* Matlab
* PHP (peut être compilé) ;
* Perl (peut être compilé) ;
* Python (peut être compilé) ;
* Rebol ;
* Rexx ;
* Ruby ;
* Scheme (peut être compilé) ;
* Script shell : sh ; bash ; ksh ; zsh ; csh ; tcsh ; fish pour GNU/Linux et Unix ;
* Tcl/Tk;
* VBScript ;
* etc.
Mais il en existe beaucoup d'autres.

## Utilisation des scripts

Les scripts sont utilisés à différents niveaux :
* côté OS comme une méthode d'automatisation (VBA de Microsoft, Python). Notamment, cela permet d'administrer un système en recherchant à intervalles réguliers des motifs suspects dans les fichiers logs.
* côté serveur web dits Server Side Includes comme une méthode pour générer des pages dynamiques (JSP, PHP, ASP, ASP.NET) ;
* côté navigateur dits Client Side sous forme d'Applet (actionscript, C#, Applet java) d'automatisation (VBA de Microsoft). C'est un langage binaire ;
* interface graphique dit gui scripts, permettant de simuler des déplacements de la souris et des pressions de touches sur le clavier (bibliothèque Tkinter de Python).
* côté logiciel, les langages scripts sont parfois utilisés comme langage d'extension embarqué, c'est à dire langage permettant de se doter de fonctionnalités nouvelles construites comme des enchaînements de fonctionnalités existantes.

## Quelques avis
### Larry Wall

Larry Wall qui est le concepteur du langage de programmation Perl a dit :
* « when I was a RSTS programmer on a PDP-11, I certainly treated BASIC as a scripting language, at least in terms of rapid prototyping and process control. I'm sure it warped my brain forever »
    (Quand je programmais en RSTS sur un PDP-11, j'ai effectivement considéré le BASIC comme un langage de script, au moins à cause du prototypage facile et de la commande de processus pour lesquels on l'employait. Je suis certain que ça m'a déformé intellectuellement à long terme.)
* « basically, scripting is not a technical term. When we call something a scripting language, we're primarily making a linguistic and cultural judgment, not a technical judgment »
    (L'expression "Langage de script" ne constitue pas un terme technique ; quand on utilise cette expression, on fait part d'une appréciation linguistique et culturelle, on ne porte pas un jugement technique.)
— « Programming is Hard, Let's Go Scripting... » — « The Obsolescence of VBA Compared to Python »