Valid XHTML     Valid CSS2    

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

  2. Autres langages de scripts

  3. Le langage APL et ses dérivés : J et K

  4. Le langage SCALA

  5. Installation des interpréteurs et numéros de version

  6. Cartes de référence

 

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 :  

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 :  

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 :  

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}'!R
     
     

qui 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 :  

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 :  

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.1
     
     

Sous 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 :  

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 gH    Retour à la page principale de   (gH)