Langage de scripts : historique et définition Laurent Pierron INRIA Lorraine / LORIA scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.1/46
Plan de la présentation Des langages de commandes aux langages de scripts orientés-objets, de nombreuses filiations Tentative de définition des langages de scripts par leurs caractéristiques scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.2/46
Histoire des langages de scripts Histoire non exhaustive et biaisée Evolution de l informatique : architecture et systèmes d exploitations langages de programmation orienté modèle langages de script scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.3/46
Préhistoire : avant 1970 Grands systèmes, traitements par lot Langages spécialisés : COBOL (gestion), Fortran (numérique), LISP (IA), APL Scripts : Job Control Language (JCL sur OS/360) Affectation des ressources : mémoire, bandes, lecteurs de cartes Sélection des programmes : compilateur, programme de traitement scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.4/46
Moyen-âge : 1970-1980 Mini-systèmes, moniteurs transactionnels, Multics, Unix, premiers tableurs Langages : Pascal, PL-1, C, Basic, Prolog Scripts : shells Unix interactif composants = programmes filtres communication = texte ASCII + pipe structure identique langage algorithmique scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.5/46
Pré-moderne : 1980-1990 Ordinateurs personnels Systèmes : DOS, MacOS, X11, Emacs, Excel interfaces graphiques base de données relationnelles Langages : Smalltalk, C++, Objective-C, PostScript (impression), SQL programmation orientée-objet conception orientée-objet scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.6/46
Pré-moderne : 1980-1990 Scripts : awk, tcl/tk,.bat, Emacs-Lisp, Macro-Excel, Rexx(IBM) transformation de données extension d applications par scripts scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.7/46
Age moderne : 1990-2000 Internet, Linux, Windows, HTML/XML, Corba ordinateurs sur réseau mondial montée en puissance : calcul, mémoire, stockage hypertexte Langages : Java, Hypercard (graphique) Langages orientés application graphique Langages orientés réseau scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.8/46
Age moderne : 1990-2000 Scripts : Perl, Python, JavaScript, VisualBasic, AppleScript, PHP Langages universels similaires aux langaes applicatifs Composants = fonction de bibliothèques Données = objets complexes Langages orientés objets scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.9/46
Et demain... Parrot : fusion Python+Perl Ruby : mieux que Perl et Python Scripts embarqués dans les documents : EcmaScript pour XML et XSL VBScript document utilisateur PHP/ASP documents HTML côté serveur scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.10/46
Et demain... Environnement de développements graphiques (IDE) à la VisualBasic : composants cliquables à la InterfaceBuilder : RAD classique à la PowerBuilder : de la conception au programme Scripter son environnement pour en tirer plus... scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.11/46
Quelques histoires particulières Tcl/Tk VisualBasic Perl Python scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.12/46
Tcl/Tk : Tcl Tcl créé en 1988 par John Ousterhout à Berkeley et suivi chez Sun puis Scriptics Besoin d un langage de commande pour des applications interactives Buts : Langage extensible, intégrable dans les applications, simple, générique scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.13/46
Tcl/Tk : Tk Tk créé fin 1988, nécessite deux ans pour être fonctionnel But : développer des interfaces graphiques (GUI) avec peu de développeurs Ecriture sous forme de composants en extension de Tcl scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.14/46
Tcl/Tk : Croissance Popularité croissante dizaine de milliers d utilisateurs en 1993 Application GUI en pur Tcl/Tk développée 5 à 10 fois plus vite qu en C/Motif GUI Tk intégré aux langages : Perl, Python Permet de développer des applications graphiques portables sur différents systèmes Extension objet : [incr Tcl] Tcl héritier direct des shells Unix par sa syntaxe et ses concepts scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.15/46
Tcl : 99 bouteilles de bière (1/2) proc bottles {i} { return "$i bottle[expr $i!=1?"s":""]" } proc line123 {i} { puts "[bottles $i] on the wall," puts "[bottles $i]," puts "take one down, pass it around," } scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.16/46
Tcl : 99 bouteilles de bière (2/2) proc line4 {i} { puts "[bottles $i] on the wall.\n" } for {set i 99} {$i>0} {} { line123 $i incr i -1 line4 $i } scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.17/46
Tcl/Tk chez SourceForge 443 projets dont Tcl lui-même 2 projets dans les 100 projets les plus actifs Nebula Device - Realtime 3D game/visualization engine, written in C++, scriptable through Tcl/Tk BLT Toolkit - Adds new commands and widgets to Tcl :2D graph, barchart, stripchart, tab notebook, tree viewer. Visual Tcl - development environment for UNIX, Windows, Mac and AS400. Entirely written in Tcl/Tk. Generates scripting.tex Langage de scripts : historique pure et définition Tcl/Tk Laurent Pierron code. 23/1/2002 17:32 p.18/46
VisualBasic Langage propriétaire Microsoft sorti le 10 mai 1991, uniquement sous Microsoft Windows La version 3.0 permet d intégrer des composants logiciels Langage hérité de Basic, fourni avec les premières générations de MS-DOS, langage de programmation classique simple à utiliser orienté objet scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.19/46
VisualBasic Objectif : Programmation applications Microsoft (Word, Excel, Access) composants ActiveX Création d interface graphique à la souris en assemblant des composants graphiques VisualBasic a donné un avatar VBScript pour programmer des applications Internet INCONVENIENT : complètement propriétaire Produit stratégique d après Microsoft scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.20/46
VisualBasic : 99 bouteilles de bière Dim n As Integer Dim s As String Width = 6000 Height = Screen.Height * 2 / 3 Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 Caption = "99 Bottles of Beer" List1.Top = 0 List1.Left = 0 List1.Width = Form1.ScaleWidth List1.Height = Form1.ScaleHeight scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.21/46
VisualBasic : 99 bouteilles de bière List1.AddItem s & "99 bottles of Beer List1.AddItem s & "99 bottles of Beeee List1.AddItem "You take one down, pass For n = 98 To 1 Step -1 s = IIf(n = 1, n & " final bottle", List1.AddItem s & " of Beer on the List1.AddItem "" List1.AddItem s & " of Beer on the List1.AddItem s & " of Beeeer..." List1.AddItem "You take one down, p Next n List1.AddItem "No more bottles of Beer scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.22/46
VisualBasic sur sourceforge 580 projets dont 2 dans les 100 plus actifs Exemples de projets actifs : Bugs Online - Very simple and powerful ASP/Access based bug tracking system Decal - plugin shell for Asheron s Call Virtual Person Level 1 - provide a generic, user friendly platform to create an artificial speaker of natural language Innombrables sites Internet consacrés à VisualBasic scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.23/46
Perl : le chameau Auteur : Larry Wall, 1987 Larry Wall n était pas satisfait de grep, sed et awk pour créer des rapports systèmes Perl emprunte beaucoup à awk : syntaxe, expressions régulières, tableaux associatifs Manipulation de chaîne de longueur arbitraire Succès universel de Perl auprès des administrateurs systèmes Unix et des premiers programmeurs de serveurs Web scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.24/46
Perl : le chameau Perl5 introduit des définitions de classes et d objets Perl a été porté sur plus de 80 systèmes différents (PDAS y compris), absents : PalmOS et Java scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.25/46
Perl : 99 bouteilles de bière $nbot = $ARGV[0]; $nbot = 100 if $nbottles eq $nbot < foreach (reverse(1.. $nbot)) { $s = ($_ == 1)? "" : "s"; $onelesss = ($_ == 2)? "" : "s"; print "\n$_ bottle$s on the wall,\n"; print "$_ bottle$s of beer,\n"; print "Take one down, pass it around, print $_-1, " bottle$onelesss on the } print "\n*burp*\n"; scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.26/46
Perl sur sourceforge 2839 projets dont 6 dans les 100 premiers net-snmp - tools and libraries relating for Simple Network Management Protocol Fink - bring the full world of Unix Open Source to Darwin and Mac OS X AWS - web server logfile analyzer HW+ / DXR3 device driver for Linux for two DVD playback cards Webmin System stats - graphical statics display of history scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.27/46
Python : Origine Auteur : Guido Van Rossum, Noël 1989 Langage de script extensible pour programmer un nouveau système d exploitation, mieux que C et primitives systèmes plus fines qu en Bourne shell Langage aussi facile à apprendre et utiliser que le langage ABC de l INRIA, avec fonctionnalités de Modula-3 scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.28/46
Python : Origine Première version réalisée pendant les vacances de Noël 1989 Première version diffusée sur Internet en février 1991 Nom d après les Monty Python s Flying Circus Python est orienté-objet, extensible et embarquable dans une application scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.29/46
Python : Usage Python peut scripter des applications Java Python peut scripter des composants ActiveX comme VisualBasic Python fonctionne en natif sur tous les systèmes classiques y compris PDAs (Palm, Psion, WinCE), PlayStation, magnétoscopes (VxWorks) Python fonctionne également partout où Java fonctionne scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.30/46
Python : 99 bouteilles de bière def bottle(n): try: return { 0: "no more bottles", 1: "1 bottle"}[n] except KeyError: return "%d bottles" % for i in range(99, 0, -1): b1, b0 = bottle(i), bottle(i-1) print "%(b1)s on the wall, %(b1)s,\n"\ "take one down, pass it around,\n "%(b0)s on the wall." % locals() scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.31/46
Python sur sourceforge 1350 projets dont Python lui-même et 6 projets dans les plus actifs CvsGui - high-end interface clients (WinCvs, MacCvs, gcvs) on top of cvs Crystal Space 3D - 3D SDK for Linux, Windows, Macintosh, NeXT, BeOS. SCons - software construction tool (build tool, substitute for Make) Mailman - the GNU mailing list manager Jython - Java implementation of Python scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.32/46
Caractéristiques des langages de script scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.33/46
Assemblage de composants Suppose existence composants utiles Ex : Composants interface utilisateur sous VB, Tcl/Tk Ex : Programmes filtres sous Unix shell Extension des composants Algorithmes et données simples scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.34/46
Typage de données faible Simplification interface composants => faible typage Variables interchangeables et automatiques Codes et données interchangeables Création/exécution de code à la volée Orienté chaînes de caractères = représentation uniforme scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.35/46
Données uniformes Pas de restrictions d usage Généricité des fonctions Ex. shell : select grep script wc Tout est flux de caractères Connection E/S par pipe Réutilisation encouragée scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.36/46
Langages fortement typés Interfaces incompatibles Objets spécifiques Ecriture de convertisseurs Recompilations éventuelles Réutilisation peu encouragée Multiplication des objets scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.37/46
Un exemple en Tcl button.b -text Salut! -font {Times 16}- command puts salut+ Bouton avec texte en Times 16 Clic sur bouton affiche texte Tout est chaîne : propriétés (-text), programmes (puts..), valeurs (Salut!) Arguments de commandes ordre quelconque, éventuellement absents button accepte 20 arguments scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.38/46
Même exemple Java/C++ Code en plus des déclarations : Java : 7 lignes de code, 2 méthodes C++ (MFC) : 25 lignes de code, 3 procédures Surcharge due au fort typage Font en C++ : déclaration+initialisation+setfont (3 lignes, 14 paramètres) scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.39/46
Détection des erreurs Erreurs de syntaxe à l analyse Types à l exécution vs. compilation Outils d analyse de code Moins de code = moins d erreurs scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.40/46
Interpréteurs Cycle développement-test rapide Programmation à l exécution : ex. Word+VB Génération de code à la volée : ex. Tcl Web navigateur : HTML->code tcl->exécute scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.41/46
Types de base Principes de conception : simples, puissants, génériques Chaînes de longueur arbitraire Listes Tableaux associatifs scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.42/46
Performances Peu rapide pour des itérations mais peu d itérations Cause : interprète, haut niveau Dépend des composants Très performant pour les types de base scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.43/46
Langage de haut niveau 1 instruction = 100 000 instructions machine 1 instruction C = 5 instructions machine Primitives haut niveau ex. Perl : expression régulière comme addition scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.44/46
Eléments de choix langage de scripts Richesse bibliothèque de composants Intégration de nouveaux composants Facilité par le langage Mécanismes pour d autres langages Facilité d apprentissage Lisibilité du code scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.45/46
Conclusion Utilisation : assemblage de composants Développement rapide Apprentissage aisé Pour utilisateur non expert en programmation scripting.tex Langage de scripts : historique et définition Laurent Pierron 23/1/2002 17:32 p.46/46