Nach der Ankündigung des Compilers für MVS

Rexx ist auf dem Weg zu einer universalen Programmiersprache

04.10.1991

Obschon als SAA-kompatibel deklariert, ist die von IBM entwickelte Prozedursprache "Rexx" fast nur Insidern vertraut. Nachdem IBM kürzlich einen bei der Dortmunder mbp GmbH gestrickten Rexx-Compiler für MVS vorgestellt hat, wird sich das möglicherweise bald ändern.

Der "Restructured Extended Executor" (Rexx) wurde ursprünglich für den IBM-internen Einsatz entwickelt, hat aber längst auch bei den Anwendern viele Anhänger gefunden. Anfangs als Prozedursprache gedacht, setzt sich Rexx mehr und mehr auch als allgemein verwendbare Programmiersprache durch.

Nachdem Rexx im VM/CMS-Bereich der Kommandosprache "Exec" den Garaus gemacht hat, schickt es sich nun an, das MVS-Gegenstück "CIist" in die Vergessenheit zu verbannen. Sympathien erwirbt sich Rexx durch leichte Erlernbarkeit und eine komfortable Zeichenmanipulation. Die Einführung eines Compilers für VM/CMS im Jahre 1989 und die Vorstellung eines MVS-Compilers Ende Juni dieses Jahres dürfte Rexx auf dem Weg zur anerkannten Programmiersprache in der IBM-Welt einige Schritte weitergebracht haben.

Einfach und unterhaltsam

Rexx wurde von seinem geistigen Vater M.F. Cowlishaw erstmals zwischen 1979 und 1983 als Interpreter auf dem System/370 implementiert. Der Konzeption der Sprache lag, wie Cowlishaw selbst sagte, nur ein Gedanke zugrunde, nämlich die Überzeugung, daß der beste Weg, gute Programme zu fördern, darin liegt, ihre Erstellung so einfach und unterhaltsam wie nur möglich zu machen. Und so ist tatsächlich eine Sprache entstanden, von der Fachleute behaupten, daß sie besser geeignet sei als etwa Basic, um einen Anfänger in die Welt des Programmierens einzuführen.

Bei IBM selbst setzte sich Rexx zunächst vor allem als Ersatz für Exec, die Kommandosprache für VM/CMS, durch. Mit der SAA-Ankündigung im Jahre 1987, die Rexx als Standard-Prozedursprache deklarierte, begann der Siegeszug dieser Sprache auch außerhalb von Big Blue. Dem Ruf der Anwender folgend stellte IBM Rexx auch als Interpreter für VM/CMS, MVS/TSO und sogar für MS-DOS, OS/400 und OS/2 zur Verfügung.

Die Gründe für diese Rexx-Mania liegen auf der Hand. Rexx ist eine vollwertige Programmiersprache mit dem Schwerpunkt auf der Textmanipulation. Sie besteht aus weniger als zwei Dutzend Instruktionen und etwa 60 Built-in-Functions (BIF), die die Programmierung vereinfachen sollen.

Die besondere Eignung als Kommandosprache bezieht Rexx aus der Fähigkeit, Commands aus einem Programm heraus nahtlos an die Host-Umgebung absetzen zu können. Beide Eigenschaften - die umfangreichen Textmanipulationsmöglichkeiten und die definierten Methoden, mit dem Betriebssystem zu kommunizieren - haben die Sprache für viele Anwender schnell unersetzlich werden lassen.

Die kontinuierliche Ausweitung des Einsatzes von Rexx ließ allerdings recht bald den Wunsch aufkommen, dem Interpreter, der zunächst konzipiert und implementiert wurde, einen Compiler für VM/CMS folgen zu lassen - obgleich Rexx weithin als nicht kompilierbar galt. Den Ausschlag für die Entscheidung, eine Machbarkeitsstudie durchführen zu lassen, gaben vor allem die Forderungen nach einer bis dahin nicht verfügbaren Programmdokumentation für die immer umfangreicheren Sourcen sowie nach einer höheren Performance. Eine Rolle haben auch Sicherheitsaspekte gespielt, denn die zu interpretierenden Quellprogramme müssen ständig für jedermann sichtbar im System vorgehalten werden.

Auf Basis der Machbarkeitsstudie wurde dann mit der Entwicklung begonnen. Das Ergebnis war ein Compiler, der die Nutzung der Rexx-Funktionalität zwar geringfügig einschränkt, auf der anderen Seite aber dem Anwender alle Vorteile eines kompilierten Programmes beschert.

Eine der Einschränkungen besteht darin, daß die Debugging-orientierte Trace-Funktion des Interpreters fehlt. Diese Funktion benötigt der Compiler im Prinzip allerdings überhaupt nicht, weil nur Programme kompiliert werden, die bereits einem Debugging mit dem Interpreter unterzogen wurden.

Außerdem kann der Compiler - oder besser gesagt: sein Laufzeitsystem - nicht die Rexx-funktion "Interpret" ausführen, die in der Praxis aber kaum Anwendung findet, beziehungsweise in anderer Form realisiert werden kann. In allen anderen Funktionen sind Interpreter und Compiler von kompatibel.

Identische Schnittstellen

Kompilierte und zu interpretierende Rexx-Programme können sich gegenseitig aufrufen. Wegen identischer externer Schnittstellen sind kompilierte und zu interpretierende Rexx-Programme sogar "Stecker-kompatibel": In jeder Umgebung, wo ein zu interpretierendes Rexx-Programm ausgeführt wird, kann das kompilierte Programm auch ablaufen.

Nach der Implementierung des Rexx-lnterpreters auf MVS/TSO im Jahre 1988 vollzog sich eine ähnliche Entwicklung wie zuvor schon bei den VM/CMS-Anwendern: Die Sprache lief umgehend der vorhandenen Prozedursprache Clist den Rang ab, was nicht verwundert, weil Clist zumindest äußerlich dem Exec von VM/CMS ähnelt.

Die grundlegenden Vorzüge des Konzepts

Gegenüber Clist besitzt Rexx außerdem eine Reihe Vorzügen: Clist kann nur mit TSO kommunizieren, während Rexx die Möglichkeit bietet, auch mit anderen System-Programmen in Verbindung zu treten, so zum Beispiel mit dem ISPF-Editor. Daneben bietet Rexx - im Gegensatz zu Clist - die Fähigkeit zur Zerlegung von Zeichenketten mit Hilfe von Schablonen (Parsing) sowie zum Einsalz eines Data-Stacks, zum Beispiel bei der Ein- und Ausgabefunktion. Auch die Möglichkeit zur Verwendung von Groß- und Kleinbuchstaben hat Rexx der älteren Prozedursprache voraus.

Darüber hinaus weist das Konzept von Rexx einige grundlegende Vorzüge auf, die die Sprache für den Einsatz im MVS-Umfeld prädestinieren: Rexx kennt keine Deklarationen von Daten; Alle Variablen werden als Zeichenketten behandelt. Numerische Daten - Reals wie Integers - sind lediglich spezielle Arten von Character-Strings, und die Werte von Variablen können beliebig lang sein.

In Rexx gibt es auch keine Arrays im herkömmlichen Sinne. Statt dessen lassen sich Compound-Variablen festlegen, die eine Art assoziative Indexierung erlauben. Die "Indizes" dieser Variablen können beliebigen Inhalts sein, sind also nicht auf numerische Daten beschränkt.

Weitere Besonderheiten von Rexx bestehen zum Beispiel darin, daß jede einfache Variable von vornherein mit ihrem eigenen Namen initialisiert ist oder daß die Genauigkeit von arithmetischen Variablen beliebig eingestellt werden kann. Diese Eigenschaften prädestinieren Rexx nicht nur für den Einsatz als Kommandowerkzeug; sie sind auch der Grund, weshalb kompilierte Rexx-Programme bis zu zehnmal schneller ausgeführt werden als interpretierte.

Die Forderung nach einem Compiler für MVS/TSO war demnach zwangsläufig. Vor allem MVS-Großanwender dürften diesem Compiler mit Interesse entgegensehen - vor allem auch deshalb, weil Rexx im Gegensatz zu Clist zu den SAA-Sprachen gehört. Im Bereich von OS/2 und OS/400 wird die weitere Entwicklung abzuwarten sein. Aber auch hier wird die Beliebtheit von Rexx sicher schnell zunehmen.

*Dr. Roger Spencer ist leitender Systemspezialist bei der mbp Software & Systems GmbH Dortmund: in dieser Eigenschaft war er maßgeblich an der Entwicklung des Rexx Compilers für MVS beteiligt