Object REXX ist eine universell nutzbare, interpretierte, objektorientierte höhere Programmiersprache. Heute wird sie oft als ooRexx (kurz für „Open Object Rexx“) bezeichnet, welches der direkte Open Source Nachfolger von Object REXX ist.

Es ist eine Erweiterung der Rexx-Programmiersprache (oft als „Classic Rexx“ bezeichnet), die alle Funktionen und die Syntax beibehält, aber objektorientierte Programmierung (OOP) und andere Erweiterungen hinzufügt. Dem Einfluss von Classic Rexx folgend, ist ooRexx so konzipiert, dass die Programmiersprache leicht zu erlernen und zu benutzen ist und der Quelltext einfach zu pflegen ist. Konformität mit dem „Information Technology – Programming Language REXX“ ANSI X3.274-1996 Standard gewährleistet plattformübergreifende Interoperabilität mit anderen konformen Rexx-Implementierungen. Daher laufen Classic-Rexx-Programme in der Regel ohne Änderungen unter ooRexx.

Es gibt auch Rexx Object Oriented („roo!“), eine weitere Implementierung, die ursprünglich von Kilowatt Software entwickelt wurde und nicht mehr weiterentwickelt wird.

Geschichte Im Jahr 1988 wurde im Rahmen des „Oryx“-Projekt bei IBM unter der technischen Leitung von Simon C. Nash mit der Verschmelzung von Classic Rexx und dem Objektmodell von Smalltalk experimentiert. Ziel des Projektes war es, die Vorteile des objektorientierten Paradigmas auf Classic Rexx zu übertragen und gleichzeitig die Benutzerfreundlichkeit von Classic Rexx in die Welt der OOP zu bringen. Schon früh konzentrierte man sich daher darauf, alles als Objekte zu betrachten, Kapselung, Nachrichtenaustausch, objektbasierte Nebenläufigkeit, Klassen und Vererbung. alternativtext=IBM Object REXX Logo|mini|150x150px|IBM Object REXX (bis 2004) Diese anfängliche Arbeit führte später unter der Leitung von Rick McGuire zum ersten Prototyp von Object REXX, der 1992 vorgestellt wurde. Im Jahr 1994 kündigte IBM an, dass Object REXX den Classic-Rexx-Interpreter in der nächsten Version von OS/2 ersetzt. Objekt REXX wurde 1996 offiziell als Teil des Betriebssystems OS/2 Warp 4 veröffentlicht. Im Folgejahr kamen Versionen für Windows 95, Windows NT und Linux auf den Markt. Eine Version für AIX V4.1.5+ wurde 1999 eingeführt, und Versionen für zLinux und Sun/Solaris folgten im Jahr 2000. Das letzte Update für Windows 2000, Windows Me, Windows 98 und Windows NT 4.0 wurde 2001 herausgegeben.

Am 12. Oktober 2004 kündigte IBM die Einstellung von Object REXX an und übertrug den Quelltext und die Lizenzrechte an die Rexx Language Association (RexxLA). Der von IBM freigegebene Quelltext enthielt nicht die nötigen Klassen für die Unterstützung des IBM System Object Model (SOM) und der Workplace Shell (WPS). Die letzte OS/2-Version von Object REXX enthält diese nötigen Klassen, welche auch für die Nachfolgeprodukte von OS/2, eComStation und ArcaOS, lauffähig sind. alternativtext=Open Object Rexx Logo|mini|150x150px|Open Object Rexx (ab 2005) Im Jahr 2005 veröffentlichte die RexxLA mit ooRexx 3.0.0 eine neue Inkarnation von Object REXX unter der Common Public License. Der Quelltext dieser Version wurde stark überarbeitet, um die Lesbarkeit zu verbessern. Später wurde der ooRexx-Kernel in C++ umgeschrieben, und eine neue Architektur und native Schnittstellen unter der technischen Leitung von Rick McGuire entworfen und umgesetzt. Diese Arbeit ermöglichte es der RexxLA, ooRexx 4.0.0 mit 64-Bit-Unterstützung im Jahr 2009 zu veröffentlichen. Die RexxLA entwickelt und pflegt weiterhin ooRexx, Classic Rexx (Regina) sowie NetRexx und organisiert jährlich internationale Symposien.

Versionsüberblick Die folgende Tabelle gibt einen Überblick über die wichtigsten Versionen von Object REXX und ooRexx. Alle veröffentlichten ooRexx-Versionen und die dazugehörige Dokumentation sind auf Sourceforge frei verfügbar. Für Arch-Linux-basierte Distributionen sind die aktuelle und die Entwicklungsversion jeweils als Arch User Repository verfügbar. Seit Version 5.0.0 gibt es portable Versionen des Interpreters, die ohne Installation verwendet werden können. Für IntelliJ IDEA bietet das ooRexxPlugin Unterstützung für Syntaxhervorhebung, Syntaxprüfung, Autovervollständigung und Dokumentation unter Verwendung von Annotationen nach dem Vorbild von Javadoc.

VersionVeröffentlichungAnmerkungen Erste offizielle Veröffentlichung als Teil von OS/2 Warp 4 Unterstützung für objektorientiertes Paradigma Konzepte wie SELECT, DO Schleifen, IF-THEN-ELSE Verzweigungen Unterstützung von Prozedur- und Funktionsaufrufen, Stems und zusammengesetzten Variablen Bietet Array-Verarbeitung, Arithmetik und integrierte Funktionen Enthält Schnittstellen zu DB2, TCP/IP-Sockets und C-Anwendungen Erste Veröffentlichungen für Windows Development Edition (30. Mai 1997) bietet zusätzlich eine Dialogbibliothek und einen Dialogeditor sowie einen eingebauten Tokenisierer Erste Veröffentlichung für AIX V4.1.5 Hinzufügung einer Bibliothek für das Filetransferprotokoll (FTP) Unterstützung für Windows 98, Windows Me, Windows 2000 und Windows NT Unterstützung für Object Linking and Embedding/ActiveX, Windows Script Host (WSH) Engine und Unicode-Funktionen Hinzufügung der nativen RxMath-Bibliothek Erste Veröffentlichung als Open Source Enthält eine Erweiterungsklasse für reguläre Ausdrücke und ooDialog 3.0.0 Verbesserte PDF-Dokumentation Verschiedene Erweiterungen Gesonderte Dokumentation für ooDialog Unterstützung für Linux, Windows, AIX und Solaris Zusätzliche Methoden für verschiedene Klassen und neue Funktionen für die RexxUtil-Bibliothek Hinzufügung der Klasse CircularQueue Unterstützung für MacOS Zusätzliche Methoden für die Klassen MutableBuffer, String und Object Enthält eine Schnittstelle zu Open Office Verschiedene Erweiterungen Unterstützung für 64-bit-Versionen von Linux, AIX und Windows Unterstützung für WSH-Engine eingestellt Verbesserte C++-Anwendungsprogrammierschnittstelle Hinzufügen der Klassen Buffer, IdentityTable, Orderable, Package, Pointer, RexxContext, Routine, WeakReference und SocketClass Neue Methoden für die Klassen RexxQueue, Object, DateTime, Method, Stem, String, MutableBuffer und OLEObject Zusätzliche Klassen und Methoden für ooDialog Hinzufügung von Beispielprogrammen und separater Dokumentation für die Windows-Erweiterungsbibliothek Hinzufügen der RxUnixSys-Bibliothek und der ooSQLite-Erweiterung Verbesserung der TCP/IP socket und ooDialog Unterstützung Hinzufügen der Klasse File und neuer Methoden für die Klasse DateTime Hinzufügung von Erweiterungsklassen für den Umgang mit CSV, Multipurpose Internet Mail Extensions und dem Simple Mail Transfer Protocol Separate Dokumentation für die Rexx- und die Unix-Erweiterungsbibliothek (RxUnixSys) Mehr als 43 Verbesserungen (z. B. Tracing) Eigenständiges Installationsprogramm für ooDialog 4.2.3 und mehrere neue Klassen und Methoden Systemd-Unterstützung und Konformität mit Linux Standard Base Neue Methoden für die Klassen Relation, OrderedCollections, Array, String, Mutablebuffer, StackFrame, Queue und OrderedCollection Separate Dokumentation für die externe Bibliothek ooSQLite Insgesamt 86 neue Funktionen und 76 Erweiterungen Hinzufügen der Klassen AlarmNotification, Json, MessageNotification, RexxInfo, StringTable und Validate Neue Methoden für die Klassen Alarm, Class, Collection, Directory, Message, Method, MutableBuffer, Object, Package, Routine, String und RxFtp Separate Dokumentation ooRexxUnit (Modultest-Framework), orxnCurses (ncurses-Bibliothek), C/C++-APIs und die Release- und Build-Umgebung Insgesamt 36 Erweiterungen Verbesserungen der Json Klasse und Aufnahme des oleinfo Skripts zur Erleichterung der Windows-Automatisierung Hinzufügung der TraceObject Klasse zur Verbesserung der Diagnose von multithreaded Programmen

Sprachdesign Das Sprachdesign von ooRexx folgt der Philosophie von Classic Rexx, die darauf abzielt, eine „menschenzentrierte“ Programmiersprache anzubieten, die leicht zu erlernen, zu programmieren, zu merken und zu pflegen ist. Diese Ziele werden zum Teil dadurch erreicht, dass der Sprachumfang klein gehalten wird und die Sprache dem Principle of Least Surprise folgt. Eine lesbare Syntax wird durch das Ignorieren von Groß- und Kleinschreibung, freie Formatierung, die Verwendung weniger Interpunktion und Anweisungen in einfachem Englisch ermöglicht. Außerdem handelt es sich um eine dynamische Programmiersprache, was Flexibilität ermöglicht und es erlaubt, sich auf die Entwicklung und nicht auf sprachliche Beschränkungen zu konzentrieren. Dem Designprinzip „Dokumentation vor Implementierung“ folgend, bietet ooRexx eine umfassende Dokumentation gemäß dem IBM Style Guide, mit Syntaxdiagrammen und Beispielen.

Anweisungen Wie in Classic Rexx gibt es Zuweisungs-, Schlüsselwort- und Befehlsanweisungen. Im Einklang mit dem Ziel, die Sprache klein zu halten, hat ooRexx 5.0.0 nur dreißig Schlüsselwortanweisungen. Im Gegensatz zu vielen anderen Sprachen sind keine Schlüsselwörter reserviert. Wenn eine Anweisung weder als Zuweisungs- noch als Schlüsselwortanweisung erkannt wird, gilt sie als Zeichenkette oder, falls es sich um einen gültigen Befehl handelt, als Befehlsanweisung und wird zur Ausführung an das Betriebssystem übergeben. Nach der Ausführung wird die Variable RC mit dem Rückgabewert gefüllt. Darüber hinaus ermöglicht die Anweisung ADDRESS die Umleitung von Befehlen in bestimmte Befehlsumgebungen wie Bourne Shell, Bash, Z-Shell, CMD oder einige Editoren wie ISPF, TSO EDIT, XEDIT und andere. Mit ADDRESS können auch Fehler abgefangen werden.a = "Hallo Welt" /* Zuweisungsanweisung */ do i = 1 to 2 /* Stichwortanweisung "DO" */ say "Runde #" i":" a /* Stichwortanweisung "SAY" */ end /* Stichwortanweisung "END" */ "echo Hallo Welt" /* Befehl an das Betriebssystem */ say "RC:" rc /* numerische Rückgabewert des Befehls */Zusätzlich zu den drei Anweisungstypen von Classic Rexx fügt ooRexx Direktiven hinzu, die am Ende des Quelltextes platziert werden müssen. Nach dem Laden und Prüfen der Syntax führt der Interpreter alle definierten Direktiven aus, um die Ausführungsumgebung einzurichten, bevor er weitere Anweisungen verarbeitet werden. Direktiven können verwendet werden, um Routinen, Klassen, Methoden, Attribute oder Ausführungsoptionen wie zum Beispiel die Genauigkeit der Arithmetik zu definieren. Um Direktiven leicht erkennbar zu machen, werden sie mit zwei aufeinander folgenden Doppelpunkten (::) eingeleitet.

Um die Wiederverwendbarkeit von Code zu erleichtern, ermöglicht die ::REQUIRES Direktive die Integration eines anderen Rexx-Programms (auch als Paket bezeichnet) oder einer externen (nativen) Bibliothek. Diese Direktive veranlasst den Interpreter, jede Routine und Klasse, welche die PUBLIC Option spezifiziert, direkt zugänglich zu machen. Externe Pakete verwenden üblicherweise die Dateierweiterung .cls, zum Beispiel ::requires "csvstream.cls" oder ::requires "json.cls". Einige externe Pakete und Bibliotheken werden mit dem ooRexx-Interpreter ausgeliefert.

Freie Formatierung Die Positionierung des Quelltextes ist bei ooRexx irrelevant, was ein hohes Maß an Flexibilität ermöglicht. Vor der Ausführung fügt der Interpreter mehrere nicht in Anführungszeichen stehende Leerzeichen zu einem zusammen, während eine in Anführungszeichen (einfach oder doppelt) eingeschlossene Zeichenkette nicht verändert wird. Zur Verkettung können zwei senkrechte Linien (||), die Trennung von Begriffen mit Leerzeichen oder aneinanderstoßende Begriffe verwendet werden. Optional können Codezeilen auf mehrere Zeilen verteilt werden, indem das Komma (,) oder das Minuszeichen (-) als Fortsetzungszeichen verwendet wird. Außerdem können mehrere Zeilen durch ein Semikolon (;) in einer einzigen Zeile zusammengefasst werden. Da durch freie Formatierung weniger syntaktische Regeln berücksichtigt werden müssen, wird davon ausgegangen, dass dies den Lernaufwand reduziert, indem die intrinsische kognitive Belastung verringert wird.say "Hallo Welt!" /* Ausgabe: Hallo Welt!! */