Langages de scripts, automatisation de commandes et
production de documents structurés :
1. Langages de scripts versus "grands" langages
gilles.hunault "at" univ-angers.fr
Table des matières cliquable
1. Comparaison entre "grands langages" et langages de scripts
3. Le langage APL et ses dérivés : J et K
Il est possible d'afficher toutes les solutions via ?solutions=1.
1. Comparaison entre "grands langages" et langages de scripts
Y a-t-il vraiment des raisons profondes pour opposer les "grands langages" et les langages de scripts ? Peut-on faire l'impasse de certains grands langages ? et de certains langages de scripts ?
Solution : masquer la solution
La «guerre des langages de programmation» a existé dès l'apparition du premier langage de haut niveau puisqu'il entrait en concurrence avec l'assembleur. Historiquement, les premiers langages ne visaient pas les mêmes buts : Fortran servait à réaliser des calculs scientifiques alors que Cobol était dédié aux applications de gestion (APL restant peu connu à l'époque). C'est à partir du moment où C et Pascal ont été reconnus comme langages généraux pouvant tout programmer que la rivalité est apparue. L'opposition avec les langages de scripts n'a duré qu'une dizaine d'années : on reconnait aujourd'hui la complémentarité des approches, les langages de scripts servant aux développements rapides, de petite taille ou de prototypage ou lorsque la vitesse d'exécution n'est pas le critère de choix le plus important.
Des langages spécialisés comme Ada, Lisp ou Prolog ont gardé leurs adeptes (fanatiques ? zélotes ?) alors que certains langages n'ont jamais vraiment été reconnus, parfois injustement, comme Logo, Forth, Modula, Oberon. Certains, considérés aujourd'hui comme mythiques et fondateurs comme le fameux SmallTalk ou PL/1, ne sont plus vraiment utilisés. Enfin, les langages comme Miranda, Haskell, Camel ou l'incontournable Basic (par exemple de VBA) restent toujours à part.
Il nous semble qu'il n'est pas raisonnable aujourd'hui de faire l'impasse sur les grands langages que sont C, C++ et Java. Toutefois, après un apprentissage de base de ces deux langages -- ce qui inclut : la programmation objet, les expressions régulières, les itérateurs et les tableaux associatifs --, il est certainement préférable de choisir puis d'approfondir et de maitriser un seul de ces deux langages, plutôt que de vouloir garder un niveau égal dans les deux langages.
On peut certainement appliquer la même stratégie pour les langages de scripts. Il est assez facile d'en apprendre les rudiments en une heure, quelque soit le langage, quitte à approfondir plus tard, afin de pouvoir revendiquer cela sur un CV, ou pour automatiser les tâches courantes. Par contre, choisir ensuite entre Perl, Python ou Ruby relève d'un choix personnel, voire d'une embauche à la clé. Certains projets comme BioConductor fournissent des programmes C avec des interfaces nommées BioPerl, BioR, BioPython...
On voit ici comment la bioinformatique a résolu le problème du choix des langages de scripts : on les prend tous !Par contre on pourra certainement se dispenser d'approfondir Apl ou Rexx et, si on fait l'impasse sur les calculs statistiques (ce qui est sans doute une grave erreur de culture), de maitriser le langage R -- mais pas d'en connaitre les bases.
2. Autres langages de scripts
A part ceux cités sur la page principale de ce cours, y a-t-il d'autres langages de scripts ? anciens ? nouveaux ? encore utilisés ?
Solution : masquer la solution
Il y a eu principalement EXEC (remplacé par REXX), APL, Logo même si ces deux derniers langages ne sont pas toujours considérés par tous les programmeurs comme des langages de scripts. Mais surtout, il ne faut pas oublier, bien sûr, les langages de scripts "de bas niveau" dédiés au système d'exploitation, comme celui de Dos, Bash ou équivalents (pour Linux). Si nous ne les présentons pas, c'est principalement parce qu'ils ne sont pas interopérables comme on dit, ce qui signifie qu'un script pour un OS x ne s'exécutera pas sur un OS y alors qu'un script PERL, par exemple, n'est pas directement lié à l'OS (c'est l'interpréteur-programme qui est différent, pas le script). APL, en tant que produit IBM est toujours utilisé, de même que les versions pour Windows et Linux, à cause de la puissance d'expression d'APL (voir exercice suivant) alors que Logo semble avoir à peu près disparu.
Les langages dédiés, présents en même temps que le système d'exploitation sont forcément encore beaucoup utilisés (qui n'a jamais écrit un fichier .BAT, .CMD ou .sh pour changer de répertoire avant de lancer une application ?) ne serait-ce que parce qu'on peut associer à leurs scripts des raccourcis-clavier, des icones...
Il serait vain de penser que les langages de scripts sont figés. Certains apparaissent, d'autres disparaissent. Il faut attendre l'usage et la popularité, bref il faut du temps avant de découvrir si un langage reste. Donc, il faut peut-être ne pas jeter trop vite des langages comme Rebol, Autoit, Lua, Groovy, Squeak... ou encore Chapel, Zimbu qui "datent" des année 2010-2020...
3. Le langage APL et ses dérivés : J et K
Pourquoi le langage APL est-il encore aujourd'hui (2012) très différent de tous les autres langages ? Que peut-on faire aujourd'hui avec APL ? Sans faire référence aux Men in Black, que sont J et K ?
Solution : masquer la solution
En fait, APL n'utilise pas des mots mais des symboles. Par exemple +/V calcule la somme des éléments du vecteur V et +/,M calcule la somme des éléments d'une matrice (car ,M linéarise la matrice, c'est-à-dire en fait un vecteur). De même l'expression (ιN °.x ιN<-10) produit les tables de multiplications des nombres de 1 à 10. C'est ce qui rend APL si cryptique mais aussi très concis car chaque symbole peut s'utiliser avec 0, 1 ou 2 arguments qui est éventuellement le chainage d'autres symboles avec 0, 1 ou 2 arguments... On pourra consulter mon tuteur APL pour plus de renseignements.
Il fallait au départ un clavier spécial pour utiliser APL. Sans doute trop précoce, il a continué à faire des fanatiques et des adeptes, notamment pour les mathématiques, les statistiques, les études économiques. Avec Windows et X-Window, APL est devenu plus facile à utiliser et son mode en session interactive permet d'écrire rapidement des interfaces... Les langages J et K sont les successeurs d'APL, avec des notations qu'on peut écrire avec un clavier "normal". Pour plus de renseignements, voir (dans cet ordre) la page anglaise du wiki sur APL puis la page française du wiki sur APL puis le document APL vu du ciel avant de passer au langage J et au langage K avec le fameux exemple suivant :
(!R)@&{&/x!/:2_!x}'!Rqui fait ce que vous pensez !
Vous pouvez tester APL sans l'installer via tryapl.org.
4. Le langage SCALA
Qu'est-ce que le langage SCALA ? Pourquoi est-il un des rares langages à pouvoir se revendiquer à la fois langage de scripts et "grand langage" ?
Solution : masquer la solution
SCALA est un langage à la fois objet, fonctionnel et multi-échelle (du prototype à l'application lourde), compatible et incluant Java VM. Il est compilable comme un grand langage, utilisable en interactif comme un langage de scripts... Le site open classrooms présente assez bien quelques-unes des particularités de ce langage. Le site officiel contient au noeud_25 un résumé des avantages de Scala. Enfin, la page anglaise du wiki (mais pas la page française) est assez explicite sur les styles de programmation offerts par Scala.
5. Installation des interpréteurs et numéros de version
Vérifiez que vous disposez bien des langages Awk, Rexx/Regina, Perl (version 5), Rhino, Php (au moins 5.3), Python (version 3.1), Ruby (version 1.9), Tcl et Tk ; dans le cas contraire, installez les versions demandées. Pour chaque langage, afficher le numéro de version et pour tous les langages sauf Awk, calculer 2 puissance 8 en mode interactif.
Solution : masquer la solution
L'installation des logiciels sous Linux se fait très simplement avec sudo apt-get.
sudo apt-get install gawk sudo apt-get install regina-rexx sudo apt-get install perl sudo apt-get install php5-cli sudo apt-get install rhino sudo apt-get install tcl sudo apt-get install tk sudo apt-get install python3.1 sudo apt-get install ruby1.9.1Sous Windows, il faut recourir à des installeurs (.exe), par exemple sur le site d'Active State pour Perl, Tcl/Tk et Python. Voici les adresses officielles que nous conseillons pour Windows :
Langage Site (cliquer) Awk gnuwin32 Rexx sourceforge Perl active state Php zmws Javascript mozilla.org Tcl active state Python active state Ruby ruby-lang Pour les numéros de version, le paramètre -v ou --version est souvent implémenté :
$gh> gawk --version GNU Awk 3.1.6 Copyright © 1998, 1991-2007 Free Software Foundation, Inc. [...] $gh> regina --version Regina REXX-Regina_3.3(MT) 5.00 25 Apr 2004. All rights reserved. [...] $gh> perl --version This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi [...] $gh> php --version PHP 5.3.2-1ubuntu4.18 with Suhosin-Patch (cli) (built: Sep 12 2012 19:12:47) [...] $gh> rhino Rhino 1.7 release 2 2010 01 20 js> quit() $gh> tclsh % puts "$tcl_platform(osVersion)\n" 2.6.32-45-generic %exit $gh> wish % info patchlevel 8.5.8 %exit $gh> python --version Python 2.6.5 $gh> python3.1 --version Python 3.1.2 $gh> ruby --version ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]Le calcul de 2 puissance 8 se fait soit par simple évaluation, soit par appel d'une fonction ou d'une méthode :
$gh> regina rt.rex Rexx> say 2**8 256 Rexx> exit $gh> perl pt.pl perl> 2**8 256 perl> exit $gh> php -a Interactive shell php > echo pow(2,8) ; 256 php > exit $gh> rhino Rhino 1.7 release 2 2010 01 20 js> Math.pow(2,8) 256 js> quit() $gh> tclsh % set a [expr pow(2,8)] 256.0 % exit $gh> python3 Python 3.1.2 (r312:79147, Oct 23 2012, 20:07:42) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 2**8 256 >>> quit() $gh> irb # ruby irb(main):001:0> 2**8 => 256 irb(main):002:0> quit
6. Cartes de référence
Où trouver des cartes de référence pour chacun des langages de scripts cités ? Et des tableaux synoptiques de commande pour retrouver les syntaxes de base ?
Solution : masquer la solution
Il y a de nombreux sites qui fournissent des cartes de référence, plus ou moins détaillées. Une tentative intéressante est http://hyperpolyglot.org par exemple pour sa page scripting, mais il faut au moins un écran 27 pouces pour en profiter ! Pour Perl et Php, il y a la fameuse page perl2php. De nombreuses cartes de références sont aussi nommées cheat-sheets, d'où le site cheatography. Mais il y a aussi rosetta code, refcardz , econsultant cheat-sheets, et dzone...
Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.
Retour à la page principale de (gH)