Rexx

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
REXX (REstructured eXtended eXecutor)
Paradigma multi-paradigma, gestructureerd
Verschenen in 1979
Ontworpen door Mike Cowlishaw
Ontwikkeld door Mike Cowlishaw, IBM
Typesysteem dynamisch
Implementaties NetREXX (IBM)[1], Open Object REXX[2], Regina[3] en anderen
Beïnvloed door PL/1, EXEC 2, Basic
Portaal  Portaalicoon   Informatica

REXX (Restructured Extended Executor) is een door IBM ontwikkelde programmeertaal. Er zijn diverse implementaties beschikbaar onder opensourcelicenties. REXX is een gestructureerde programmeertaal, ontworpen om gemakkelijk te leren en gemakkelijk te lezen. Er zijn commerciële en open source interpreters beschikbaar voor verschillende computerplatforms. Er zijn ook compilers beschikbaar voor IBM-mainframes.

Eigenschappen[bewerken]

REXX heeft de volgende eigenschappen en mogelijkheden:

  • dynamische datatypering (geen declaraties)
  • geen gereserveerde sleutelwoorden (behalve in lokale context)
  • willekeurige numerieke precisie
  • een grote verzameling ingebouwde functies (met name string- en tekstbewerking)
  • automatisch opslagbeheer
  • datastructuren benaderbaar op inhoud
  • eenvoudige toegang tot operating systeemcommando's en faciliteiten
  • eenvoudige foutafhandeling en ingebouwde debugger
  • weinig kunstmatige beperkingen
  • vereenvoudigde I/O-faciliteiten

REXX heeft maar 23, meestal zichzelf verklarende instructies (bijvoorbeeld call, parse en select), met minimale interpunctie en formatterings-eisen. Het is een taal met een vrij formaat met slechts 1 datatype: de tekenstring. Dit betekent dat alle data zichtbaar (symbolisch) is en dat debuggen eenvoudiger is.

De syntaxis van REXX lijkt op die van PL/I, maar kent minder notaties. Dit maakt het interpreteren door een programma lastiger, maar maakt het eenvoudiger om een programma in REXX te schrijven.

Geschiedenis[bewerken]

REXX is ontworpen en voor het eerst geïmplementeerd als een vrije-tijdsproject door Mike Cowlishaw tussen 20 maart 1979 en midden 1982. Oorspronkelijk was het de bedoeling om een scripttaal te maken om de talen EXEC en EXEC 2 te vervangen. Het was ontworpen om een macro- of scripttaal te zijn op elk mogelijk computerplatform. In dit opzicht is REXX een voorloper van Tcl en Python.

REXX werd voor het eerst in het openbaar beschreven op de SHARE 56-conferentie in Houston in 1981. De reacties van klanten, aangevoerd door Ted Johnston van SLAC leidden er toe dat IBM het uitbracht als een product in 1982.

In de loop der jaren heeft IBM REXX een onderdeel gemaakt van bijna al haar besturingssystemen: VM/CMS, VM/GCS, MVS TSO/E, AS/400, OS/2, VSE/ESA, AIX, CICS/ESA en PC-DOS. Ook zijn er versies beschikbaar voor Novell Netware, Windows, Java en Linux.

De eerste niet-IBM-versie werd in 1984/1985 voor PC-DOS geschreven door Charles Daney. Andere versies zijn ontwikkeld voor Atari, Amiga, Unix (vele varianten), Solaris, DEC, Windows, Windows CE, PocketPC, MS-DOS, Palm OS, QNX, OS/2, Linux, BeOS, EPOC32, AtheOS, OpenVMS, OpenEdition, Macintosh en Mac OS X.

Er zijn verschillende freewareversies beschikbaar. In 1992 verschenen de meestgebruikte open sourceversies: Ian Colliers REXX/imc voor Unix en Anders Christensens Regina (verder ontwikkeld door Mark Hessling) voor Windows en Linux. BREXX is een implementatie voor WinCE- en PocketPC-platforms.

In 1996 publiceerde ANSI een standaard voor REXX: ANSI X3274–1996 "Information Technology – Programming Language REXX".

Sinds midden jaren 1990 zijn er twee nieuwere varianten van REXX verschenen:

  • NetRexx – deze taal compileert naar Java-bytecode via Java-broncode; deze taal gebruikt geen keywords. Verder wordt het Java-objectmodel gebruikt en daarom is de taal niet uitwisselbaar met 'klassiek' REXX.
  • ObjectRexx – een objectgeoriënteerde versie die wel uitwisselbaar is met 'klassiek' REXX.

Op 12 oktober 2004 kondigde IBM aan dat ze van plan was om haar implementatie van ObjectREXX vrij te geven onder de Common Public License.

Wikibooks Wikibooks heeft een studieboek over dit onderwerp: Cursus programmeren in REXX.