Wednesday, 24 January 2007

Découvrir le Rexx

Qui dit langage de script de nos jours pense typiquement à Perl, Python, ou Ruby. Eventuellement, il en connaîtra d'autres, comme l'Applescript sur les ordinateurs Mac, shell, si c'est un ancien d'Unix, etc. Un alternatif qui est moins connu qu'il ne devrait l'être, c'est le Rexx. Ici je donne quelques raisons de considérer le Rexx si vous êtes à la recherche d'un langage de script, en mettant l'accent sur ses avantages par rapport aux langages plus connus.

  • Le Rexx est multi-plateforme. Ceci lui donne déjà un avantage par rapport aux langages plus traditionnels tel que l'Applescript ou shell. Comme Perl et Python, des interprètes Rexx existent sur toutes les plateformes majeures, y compris même la machine virtuelle Java. Rexx est même plus multi-plateforme encore, étant le langage de script de référence sur les systèmes IBM moins connus, comme MVS et OS/2. Si vous vous mettez au Rexx, donc, vous serez habile à programmer sur n'importe quel ordinateur, même si un jour vous changez de système.
  • Le Rexx est simple. Perl, Python, et Ruby sont des langages très à la mode. Cela comporte ses propres avantages, notamment au niveau des libraries. Mais ce sont aussi des langages complexes. Pas de problème si vous les utilisez régulièrement. Mais si vous êtes comme moi, et vous n'avez pas besoin d'un langage de script plus souvent qu'une ou deux fois par mois, ça peut être frustrant de devoir aller à la documentation chaque fois pour se rappeler comment faire une opération simple comme lire ou écrire un fichier. Avec Rexx, je trouve ce travail de mémoire plus simple, ce qui me rend plus productif.
  • Le Rexx est puissant. Ce n'est pas parce que j'insiste sur sa simplicité qu'il faut croire qu'il s'agit d'un deuxième Basic! Rexx a tout le dynamisme qu'un programmeur Perl peut vouloir, y compris les comportements utiles par défaut, les variables dynamiques, etc. Les commandes parse et interpret sont particulièrement puissantes avec cette dernière on peut exécuter du code créé dynamiquement, comme en Lisp!
  • Le Rexx est utilisé en industrie. Bonne chance pour trouver une boîte suffisement bien branchée pour employer le Ruby en industrie! Perl et Python sont de plus en plus présents, c'est vrai, mais seul Rexx se trouve dêjà en place avec ce qu'on nomme "les vieilles technologies". Et en plus, il est moins connu par les programmeurs actuels. Une bonne connaissance de Rexx peut donc aider le programmeur professionnel à faire de la programmation dynamique dans un environnement technique où cela est rarement possible, et à faire valoir une connaissance qui n'est pas facile à trouver sur le marché de l'emploi. Les librairies Rexx sont aussi très complètes.
  • Le Rexx fait de l'arithmatique décimale. Beaucoup de gens ne sont pas au courant des inexactitudes mathématiques provoquées par leur code à cause de l'arithmatique binaire de la plupart des langages de programmation. (Par exemple, en C (sur x86) et Java, la condition 1.1 - 1 == 0.1 sera false!) Rexx évite tous ces problèmes en faisant de l'arithmatique décimale à précision arbitraire. Croyez-moi, c'est une bonne chose.

Voilà pour les avantages tels que je les vois. Maintenant je vous présente un peu de code pour vous montrer la facilité de Rexx. Le programme suivant affiche un message à l'êcran:

say "Bonjour tout le monde"

A la différence de Perl et ses amis, qui ont grandi dans le monde Unix, où le C domine, Rexx a grandi au sein d'IBM, et sa syntaxe s'inspire plutôt de PL/I. C'est un point historique, mais sa seule vraie conséquence c'est qu'on remplace { et } par les mots-clefs DO et END. Les structures de contrôle sont donc assez facile à assimiler:

if x = 2 then do
  say 2
end
else do
  say "pas 2"
end
/* Compter de 1 à 10 */
do x = 1 to 10 
  say x
end
do 3
  say "Cette ligne s'écrira trois fois."
end
do forever
  say "Ce boucle ne termine jamais."
end

Et ainsi de suite, ce n'est pas mon but ici de donner toute la syntaxe du langage. Regardons plutôt un exemple pratique, pour voir si on peut envisager comment on utiliserait Rexx dans la vraie vie. En voici un script qui prend deux arguments: un fichier d'entrée et un fichier de sortie. Il lit ensuite le fichier d'entrée et remplace tous les tablatures par quatre espaces.

parse arg filein fileout .
do while chars(filein) > 0
  char = charin(filein)
  if c2x(char) == 09 then
    call charout fileout, "    "
  else
    call charout fileout, char
end

La première ligne met les valeurs du premier et deuxième arguments fournis à la ligne de commandes dans les variables filein et fileout. Après, le programme boucle sur le fichier d'entrée en remplaçant toutes les tablatures par quatre espaces, mais laissant les autres caractères comme ils sont.

Ce n'est qu'un exemple toute bête, mais ça ne prend qu'un coup d'œil pour voir que le langage est beaucoup plus lisible que le Perl sans être verbeux, et sans sacrifier sa puissance dynamique. Le résultat: un langage facile à apprendre, difficile à oublier, et très utile pour toutes sortes de programmation, des PDA jusqu'aux Mainframes!

Liens utiles sur le Rexx (anglais):

Posted by jon at 11:10 PM in Programming 
 
« January »
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
28293031   
       
 
Non enim id agimus ut exerceatur vox, sed ut exerceat.