Dans les langages de pro­gram­ma­tion, les langages de script cons­ti­tuent une famille appréciée et per­met­tent souvent de répondre aux exigences posées avec rapidité. À l’origine, les langages de script étaient plutôt utilisés pour les ap­pli­ca­tions de niche ou servaient de langage de « collage » pour ras­sem­bler des systèmes existants. Avec l’arrivée du World Wide Web, une série de langages de script s’est établie pour l’uti­li­sa­tion des serveurs Web. Les langages de script sim­pli­fiant le trai­te­ment du texte, ils sont parfaits pour créer dy­na­mi­que­ment des pages HTML.

À l’heure actuelle, les langages de script re­pré­sen­tent, d’après l’index TIOBE env. un tiers des langages de pro­gram­ma­tion les plus utilisés dans le monde. Côté client, Ja­vaS­cript est pra­ti­que­ment le seul langage de script courant dans les na­vi­ga­teurs. Côté serveur, les langages PHP, Python, Ruby et Perl sont toutefois également des langages de script.

Quelle est la dif­fé­rence entre un langage de pro­gram­ma­tion et un langage de script ?

Pour com­prendre ce qui ca­rac­té­rise un langage de script, il est utile de connaître les dif­fé­rences entre ces langages et les langages de pro­gram­ma­tion comme C, C++ et Java. Dans ces langages, le pro­gram­meur écrit un code source qui est ensuite converti en code binaire lors d’une étape séparée. Deux fichiers sont par con­sé­quent utilisés : le fichier avec le code source, dans lequel le pro­gram­meur travaille et un fichier binaire créé à partir du premier qui est exé­cu­table di­rec­te­ment sur l’or­di­na­teur. Un programme spécial appelé com­pi­la­teur joue le rôle de tra­duc­teur entre les fichiers.

La con­ver­sion du code source en code binaire est appelée « com­pi­la­tion ». Pendant la com­pi­la­tion, la plau­si­bi­lité du code source est contrôlée : toutes les variables utilisées ont-elles été définies ? Les types d’arguments de fonc­tion­na­li­tés cor­res­pon­dent-ils à la dé­fi­ni­tion des fonc­tion­na­li­tés ? Le pro­gram­meur a-t-il oublié un caractère quelque part ? Ce contrôle est effectué pour l’ensemble du code source lors de la com­pi­la­tion et peut demander un peu de temps. Le code binaire résultant de la com­pi­la­tion est fortement optimisé afin de tra­vail­ler ra­pi­de­ment et sans erreur lors de l’exécution dans la mesure du possible. Les langages compilés con­vien­nent donc tout par­ti­cu­liè­re­ment aux tâches né­ces­si­tant une im­por­tante puissance de calcul et pour les systèmes plus grands.

Lors de l’exécution d’un programme codé dans un langage de script, aucune com­pi­la­tion n’est effectuée. Par con­sé­quent, aucun fichier binaire n’est généré à partir du code source écrit par le pro­gram­meur. De ce fait, les pro­grammes codés dans des langages de script sont gé­né­ra­le­ment moins efficaces dans leur exécution. Cette perte d’ef­fi­ca­cité ne constitue toutefois pas vé­ri­ta­ble­ment un in­con­vé­nient puisqu’il s’agit d’un choix délibéré : les langages de script dé­char­gent le pro­gram­meur en chargeant davantage le pro­ces­seur. C’est la raison pour laquelle les langages de script sont par­ti­cu­liè­re­ment adaptés aux pro­grammes de taille petite à moyenne.

L’idée con­sis­tant à alléger le travail du pro­gram­meur tient lieu de fil rouge dans l’ar­chi­tec­ture de nombreux langages de script. Ces derniers renoncent donc à la gestion manuelle de la mémoire, une tech­no­lo­gie par­ti­cu­liè­re­ment efficace mais propice aux erreurs. Par ailleurs, dans la plupart des langages de script, il n’est pas né­ces­saire d’indiquer le type de variable. Les pro­grammes codés dans des langages de script n’étant pas compilés, il n’est pas non plus né­ces­saire de disposer d’une fonction main(). Les langages de script per­met­tent d’écrire un logiciel de façon plus directe et avec moins de code source. Comparez les exemples suivants. Les deux pro­grammes présentés four­nis­sent le même résultat :

// "Bonjour tout le monde" Exemple dans Java
class Bonjourtoutlemonde {
    static public void main( String args[] ) {
        System.out.println( "Bonjour tout le monde !" );
    }
}
# "Bonjour tout le monde" Exemple dans Python
print "Bonjour tout le monde !"

Ca­rac­té­ris­tiques des langages de script

Comme évoqué au début de cet article, les pro­grammes codés avec des langages de script ne sont pas convertis en code binaire par un com­pi­la­teur avant leur exécution. Un programme appelé in­ter­pré­teur est utilisé à la place du com­pi­la­teur. Vous pouvez vous re­pré­sen­ter les choses de la façon suivante : l’in­ter­pré­teur lit le code source de haut en bas, puis génère et exécute dans ce cadre le code binaire partie après partie.

Si les termes « code source », « code binaire » et « in­ter­pré­teur » vous semblent encore flous, vous pouvez vous référer à l’exemple suivant : re­pré­sen­tez-vous le code source comme des notes de musique jouées par un orchestre. Dans cet exemple, le code binaire cor­res­pond à une version du morceau en­re­gis­trée sur un CD. Le morceau sur le CD peut être lu sur n’importe quel lecteur CD, mais ne peut plus être modifié. L’in­ter­pré­teur cor­res­pond à l’orchestre qui joue le morceau en direct.

Pro­gram­mer de façon in­te­rac­tive avec des langages de script via REPL

Dans de nombreux langages de script, il est possible d’exécuter l’in­ter­pré­teur de façon in­te­rac­tive. Ce mode est appelé REPL, de l’anglais « read-eval-print-loop », qui peut se traduire ap­proxi­ma­ti­ve­ment par « lire-exécuter-restituer-répéter ». Le pro­gram­meur transmet le code source à l’in­ter­pré­teur qui le lit et l’exécute. L’in­ter­pré­teur affiche ensuite le résultat (restituer) et attend l’entrée suivante (répéter).

Si une erreur est restituée dans le mode REPL, le pro­gram­meur peut afficher les contenus des variables afin de localiser l’erreur. Il est par ailleurs possible d’écraser la valeur d’une variable et de tester des parties du code source avec la nouvelle valeur. Cette méthode permet de composer un programme à partir de sections plus petites ayant été testées in­di­vi­duel­le­ment. Le dé­ve­lop­pe­ment et la ré­so­lu­tion des erreurs se déroulent en une seule fois. De cette façon, il est par­ti­cu­liè­re­ment simple d’écrire ra­pi­de­ment un programme fonc­tion­nel.

Définir des struc­tures de données complexes comme littéraux dans les langages de script

Les langages de script ont pour but de faciliter le travail du pro­gram­meur. Pour ce faire, ces langages four­nis­sent aux pro­gram­meurs une série d’outils. Ces outils com­pren­nent des struc­tures de données complexes comme les chaînes de ca­rac­tères, les listes, les champs et les objets. Dans les langages de script, ces struc­tures peuvent être écrites sous forme de « littéraux ». Ils per­met­tent d’afficher di­rec­te­ment des struc­tures de données complexes au lieu de les cons­truire à partir de plusieurs commandes. Le pro­gram­meur peut exprimer les struc­tures de données né­ces­saires sim­ple­ment ce qui facilite son travail.

// Exemple pour un littéral d’objet en JavaScript
client = {
    'prénom': "Claude",
    'nom': "Dupond",
    'âge': 40,
    'aktiv': true,
    'adresse': {
        'privée': {},
        'société': {},
    },
}
# Exemple de génération HTML pour un littéral de modèle en JavaScript
titre_page= 'Qu’est-ce qu'un langage de script ?’
h1 = '<h1>${titre_page}</h1>'
# renvoie "<h1>Qu’est-ce qu’un langage de script ?</h1>"

Typage dynamique dans les langages de script

Dans les exemples de code ci-dessus, vous avez peut-être remarqué qu’aucun type comme « String », « int » ou « bool » n’est indiqué. Pour l’exécution, le programme a toutefois besoin des in­for­ma­tions sur le type. Par con­sé­quent, d’où pro­vien­nent-elles ?

Les langages de script ont gé­né­ra­le­ment recours au « typage dynamique » : l’in­ter­pré­teur déduit le type d’une variable à partir du contexte. Dans les langages de script, le type d’une variable n’est pas fixe et peut changer en fonction du contexte. Un exemple :

# Exemple de typage dynamique en Python
# un nom affiché sous forme de liste de prénom, nom
name = ['Claude', 'Dupond']
# le type de variable "name" est "list"
type(name)
# seul le prénom est ensuite nécessaire
name = name[0]
# le type de la variable "name" est "str"
type(name)

Uti­li­sa­tion des langages de script

Les langages de script sont ca­té­go­ri­sés en fonction de l’uti­li­sa­tion et du domaine d’uti­li­sa­tion. Certains langages de script sont utilisés dans l’invite de commande pour résumer des séquences de commandes et per­met­tent ainsi une au­to­ma­ti­sa­tion. Bash et Po­wer­Shell font partie de ces langages.

VBA et Ap­pleS­cript assument une fonction similaire puisqu’ils per­met­tent d’au­to­ma­ti­ser des processus au niveau de l’ap­pli­ca­tion.

Sur un serveur Web, PHP, Perl, Ruby, Python et Ja­vaS­cript sont utilisés pour réaliser des sites Internet et des ap­pli­ca­tions Web dy­na­miques. Par ailleurs, Ja­vaS­cript est le seul langage de script des na­vi­ga­teurs Web. Conçu ini­tia­le­ment pour la pro­gram­ma­tion d’éléments in­te­rac­tifs, Ja­vaS­cript est aujourd’hui utilisé pour écrire des ap­pli­ca­tions Web entières.

Les langages de script in­ter­vien­nent également en sta­tis­tique et dans le domaine scien­ti­fique prin­ci­pa­le­ment avec les langages R et Python.

Aller au menu principal