NetRexx, une approche différente pour un language de programmation
Orienté objet et fonctionnant sur la JVM, ce langage de script est original dans sa conception, et même étrange.
Le language Rexx (REstructured eXtended eXecutor) a été créé par Mike Colishaw
en 1970 pour IBM, et implémenté sur l'IBM 370. Il était utilisé
comme outil de scripting sur OS/2. Il avait pour but de fournir une syntaxe claire et structurée
NetRexx est une version orientée
objet, qui a été écrite en 1997, et qui se compile
en bytecode Java pour tourner sur les machines virtuelles Java (JVM).
La dernière version date de 2013.
Une carte de roi (rex en latin) est quelquefois
utilisée pour illustrer le langage.
Pourquoi utiliser NetRexx?
On parle assez peu de NetRexx de nos jours. Il est en fait peu utilisé en dehors de l'environnement IBM.
REXX s'adressait à l'utilisateur néophyte, plutôt qu'au programmeur professionnel. Il pouvait convenir au calcul scientifique mais de nos jours est largement supplanté par Julia et Python dans ce domaine.
NetRexx est conçu pour remplacer Java avec une syntaxe plus simple et a été le premier langage autre que Java à être porté sur la JVM.
Il permet aussi de faire des applets en utilisant les API de Java.
C'est un moyen d'utiliser un même langage pour le scripting et les applications, mais de nombreux autres langages offrent la même possibilité. En effet, il est devenu courant de porter un langage sur la JVM (Jython, JRuby, etc...), ce qui rend Netrexx inutile pour une utilisation pratique car il est moins complet.
Son principal intérêt est pour l'étude d'une approche différente dans les langages de programmation et les simplifications dans la syntaxe qu'il apporte.
Des structures de contrôle évoluées
Le langage allie la simplicité de la syntaxe avec la complexité des constructs.
- C'est un langage de script oriented objet (contrairement à Rexx). Il supporte l'héritage et la généricité (qui manque à Go).
- Une méthode se termine quand une autre méthode commence, ou à la fin
du fichier. "Return" sert seulement à retourner une
valuer.
- Le corps d'une fonction est terminé par une ligne blanche, ce qui est peut-être unique dans les langages de programmation, tandis que Python est le seul a utiliser l'indentation comme part de la syntaxe.
- Le construct select case ... when ... then est l'équivalent NetRexx du switch ... case, mais en plus puissant. Puisqu'il n'y a pas de valeur à comparer, avec les différents cas, l'intérêt semble surtout dans la valeur par défaut, quand aucun cas n'est retenu.
- Un bloc d'instructions est délimité par do ... end. En ajoutant une condition, on crée une boucle.
Le même construct général do .. end remplace ainsi plusieurs types de boucles dans les autres languages (while, for, until...).
Mais cette fois ce n'est pas vraiment une simplification, si l'on ajoute while à do, il serait plus simple d'utiliser seulement while. - C'est la même chose avec le construct loop for, le mot loop est redondant.
- String est le type par défaut pour les variables.
- Le tableau de taille fixe et le tableau associatif sont les seuls types composites, hormis les classes.
- Un message est affiché dans la console avec le mot réservé SAY alors que les autres langages utilisent echo (venant de Bash) ou print (de Basic).
Un programme NetRexx peut être soit compilé en bytecode, ou directement interprété. Dans le premier cas il est compatible avec l'API Java et ses classes.
Même si le langage apporte de nombreuses simplifications qui rendent l'écriture d'un script plus rapide, sa conception semble fantaisiste et était perfectible. C'est un langage puissant mais qui n'apporte rien de particulier en terme de fonctionnalités.
Exemples de code provenant du manuel de NetRexx...
-- Demo: Attente d'une réponse
loop label prompt forever
reply=ask
select
when reply.datatype('n') then say reply**3
when reply='Quit' then leave prompt
otherwise say 'eh?'
end
end prompt
say 'Done.'
Une applette qui affiche "Salut le Monde!":
class HelloApplet extends Applet
method init
resize(200, 40)
method paint(g=Graphics)
g.drawString("Salut le Monde!", 50, 30)
L'applette est chargée avec ce code HTML:
<applet code="HelloApplet.class" width=200 height=40> </applet>
Voir aussi...
- Scala, un langage populaires pour le scripting ou pour remplacer Java sur la JVM.
- Rexx Language Association. Association qui héberge le code sourcde de NetRexx maintenant, donné par IBM. Notez que l'association utilise des minuscules alors que l'auteur utilisait mettait le nom tout en majuscules.