<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=REXX</id>
	<title>REXX - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=REXX"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=REXX&amp;action=history"/>
	<updated>2026-04-06T07:53:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=REXX&amp;diff=3131&amp;oldid=prev</id>
		<title>imported&gt;Schotterebene: Direktlink statt Begriffsklärung</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=REXX&amp;diff=3131&amp;oldid=prev"/>
		<updated>2025-03-10T13:59:24Z</updated>

		<summary type="html">&lt;p&gt;Direktlink statt Begriffsklärung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{{Infobox Programmiersprache&lt;br /&gt;
| Name                         = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Logo                         = [[Datei:Powrexx2.gif]]&lt;br /&gt;
| Beschreibung                 = &lt;br /&gt;
| Erscheinungsjahr             = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Entwickler                   = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersion              = ANSI X3.274&lt;br /&gt;
| AktuelleVersionFreigabeDatum = 1996&lt;br /&gt;
| Typisierung                  = [[Dynamische Typisierung|dynamisch]]&lt;br /&gt;
| Implementierung              = Regina, [[ARexx]]&lt;br /&gt;
| Dialekte                     = &lt;br /&gt;
| Beeinflusst_von              = EXEC 2, [[PL/I]]&lt;br /&gt;
| Beeinflusste                 = [[Object REXX|ooRexx]], [[NetRexx]]&lt;br /&gt;
| Betriebssystem               = [[z/OS]], [[Microsoft Windows|Windows]], [[Linux]], [[AIX]], [[OS/2]], [[PC DOS]], [[OS/400]], [[AmigaOS]],  uvm.&lt;br /&gt;
| Lizenz                       = &lt;br /&gt;
| Website                      = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;REXX&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039;estructured &amp;#039;&amp;#039;&amp;#039;Ex&amp;#039;&amp;#039;&amp;#039;tended E&amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039;ecutor&amp;#039;&amp;#039;) ist eine von [[Mike Cowlishaw]] bei [[IBM]] entwickelte [[Skriptsprache]].&lt;br /&gt;
&lt;br /&gt;
== Herkunft ==&lt;br /&gt;
REXX stammt aus dem [[Großrechner]]bereich. Mike Cowlishaw hatte es in den 1980er Jahren als Nachfolger der Skriptsprache EXEC&amp;amp;nbsp;2 unter [[z/VM|VM]] zuerst implementiert (der Unterschied zwischen dem relativ simplen und nicht sehr mächtigen EXEC-2 und REXX ist ähnlich groß wie der zwischen der MS-DOS Batch-Sprache und BASIC). REXX steht dabei für „Restructured EXtended eXecutor“ (Language). REXX wurde auf [[Time-Sharing Option|TSO]] und andere Umgebungen wie [[OS/2]] portiert. Eine angepasste Version –&amp;amp;nbsp;genannt [[ARexx]]&amp;amp;nbsp;– erfreut sich seit 1987 auch auf dem [[Amiga]] großer Beliebtheit, da beinahe jedes wichtige Programm damit „fernsteuerbar“ ist. Mittlerweile sind auch Interpreter für fast alle Umgebungen bis hin zum [[Palm OS]] erhältlich. 1996 wurde REXX zum ANSI-Standard (ANSI X3.274-1996 „Information Technology – Programming Language REXX“).&lt;br /&gt;
&lt;br /&gt;
REXX kann besonders leicht erweitert werden, indem [[Programmbibliothek|dynamische Programmbibliotheken]] zum eigentlichen Interpreter hinzugeladen werden. Insbesondere unter OS/2 ist eine Vielfalt solcher Bibliotheken mit mathematischen, [[Datenbank]]-, [[Socket (Software)|Socket]]- und System-Funktionen verfügbar, die wie normale REXX-Funktionen angesprochen werden können.&lt;br /&gt;
REXX ist in der Regel eine [[Interpreter|interpretierte]] Sprache, aber für Linux und für IBM-Großrechner-Betriebssysteme sind auch REXX-[[Compiler]] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Konzepte ==&lt;br /&gt;
=== Alles ist ein String ===&lt;br /&gt;
In &amp;#039;&amp;#039;klassischem Rexx&amp;#039;&amp;#039; (im Unterschied zum hier nicht behandelten, jedoch kompatiblen [[Objektorientiertes Rexx|Objektorientierten Rexx]]) ist jeder Wert ein [[Zeichenkette|String]] – auch Zahlen. Es ist also ohne weiteres möglich, Zahlenwerte mit String-Manipulationen zu ändern und das Ergebnis sofort wieder als Zahl zu verwenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
a = 2&lt;br /&gt;
a = a || &amp;#039;00&amp;#039;&lt;br /&gt;
say a / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Anhängen zweier Nullen wird &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; mit 100 „multipliziert“; das Ergebnis, die Zeichenkette &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;, kann sofort wieder als Zahl verwendet werden. Ausgegeben wird &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Folgerichtig ist die Arbeit mit Strings in Rexx sehr einfach.&lt;br /&gt;
&lt;br /&gt;
Die obige Verkettungsoperation kann auch als&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
a = a&amp;#039;00&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
geschrieben werden. Ein oder mehrere Leerzeichen zwischen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;#039;00&amp;#039;&amp;lt;/code&amp;gt; führen hingegen dazu, dass bei der impliziten Verkettung ein Leerzeichen eingefügt wird, was unerwünscht ist, wenn das Ergebnis eine Zahl sein soll.&lt;br /&gt;
&lt;br /&gt;
Wenn eine Zahl benötigt wird, weil der verwendete Operator mit Zahlen arbeitet, versucht Rexx, den vorliegenden Wert als Zahl zu interpretieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
say &amp;#039; 1&amp;#039; + 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gibt &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall rechnet Rexx auf neun Dezimalstellen genau; durch Angabe einer höheren Anzahl kann jedoch fast beliebig genau gerechnet werden.&lt;br /&gt;
Diese wenig hardwarenahe Methode von Rexx führt dazu, dass arithmetische Operationen vergleichsweise langsam ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Auswertungslogik ===&lt;br /&gt;
Rexx wurde unter anderem entwickelt, um auf einfache Weise Kommandos an eine Umgebung absetzen zu können. Dies wird unterstützt durch die folgende Strategie bei der Auswertung einer Anweisung, welche Rexx-Programme unempfindlich gegenüber neu eingeführten Schlüsselwörtern macht und die ein Alleinstellungsmerkmal der Sprache darstellt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Wenn das zweite [[Tokenisierung|Token]] mit einem Gleichheitszeichen beginnt, handelt es sich um eine Wertzuweisung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hieraus folgt, dass z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
if = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
eine gültige Anweisung ist, die der Variablen &amp;#039;&amp;#039;IF&amp;#039;&amp;#039; den Wert &amp;#039;&amp;#039;1&amp;#039;&amp;#039; zuweist!&lt;br /&gt;
&lt;br /&gt;
Hingegen wäre&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
if == 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zwar ein gültiger logischer Ausdruck, der prüft, ob die Variable if exakt den Wert 1 hat; als eigenständige Anweisung ergibt sie jedoch einen Syntaxfehler, weil der zuzuweisende Wert &amp;#039;&amp;#039;= 1&amp;#039;&amp;#039; eben &amp;#039;&amp;#039;kein&amp;#039;&amp;#039; gültiger Ausdruck ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Ist das zweite Token ein Doppelpunkt, handelt es sich um eine Marke&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Marken werden benötigt, um Prozeduren und Funktionen zu realisieren; diese notiert man in Rexx &amp;#039;&amp;#039;nach&amp;#039;&amp;#039; dem „ausführbaren Teil“ des Programms. Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
say: funk(&amp;#039;dir x&amp;#039;)&lt;br /&gt;
exit&lt;br /&gt;
funk: return Arg(1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man könnte erwarten, dass &amp;lt;code&amp;gt;dir x&amp;lt;/code&amp;gt; zur Standardausgabe ausgegeben wird. Das Schlüsselwort &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; fungiert hier jedoch nur als Marke; der Ausdruck &amp;lt;code&amp;gt;funk(&amp;#039;dir x&amp;#039;)&amp;lt;/code&amp;gt; bildet&lt;br /&gt;
schon die nächste Anweisung.&lt;br /&gt;
Gemäß Regel 4 (siehe unten) wird also &amp;lt;code&amp;gt;funk&amp;lt;/code&amp;gt; aufgerufen und &amp;lt;code&amp;gt;dir x&amp;lt;/code&amp;gt; zur Ausführung an die Umgebung übergeben. (Es ginge auch ohne die Funktion &amp;lt;code&amp;gt;funk&amp;lt;/code&amp;gt;; dies nur als einfaches Beispiel für einen Funktionsaufruf.)&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich, mit &amp;lt;code&amp;gt;signal value &amp;#039;&amp;#039;Ausdruck&amp;#039;&amp;#039;&amp;lt;/code&amp;gt; eine bestimmte Marke anzusteuern; dies ist eher unüblich und nur in bestimmten Fällen sinnvoll, z.&amp;amp;nbsp;B. als Alternative zu sehr großen &amp;lt;code&amp;gt;select&amp;lt;/code&amp;gt;-Anweisungen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3. Wenn das erste Token ein Schlüsselwort ist, erfolgt die Auswertung entsprechend dieser Schlüsselwortanweisung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Solche Schlüsselwörter sind z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt;. Die späte Auswertung der Schlüsselwörter begünstigt Erweiterungen. Zukünftige Versionen der Sprache können so neue Schlüsselwörter einführen, ohne dass existierende Programme überarbeitet werden müssen: sowohl Variablen als auch Marken können ihren Namen behalten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4. In jedem anderen Fall wird die Anweisung als [[Ausdruck (Programmierung)|Ausdruck]] ausgewertet und das Ergebnis an die Umgebung übergeben&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, dass die folgende Rexx-Anweisung (unter [[PC-kompatibles DOS|DOS]], [[Microsoft Windows|Windows]], [[OS/2]], …) den Inhalt des aktuellen Verzeichnisses ausgibt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder auch:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;dir&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Im ersten Fall ist &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; eine Variable; wurde ihr kein Wert zugewiesen, so ist ihr Wert &amp;lt;code&amp;gt;DIR&amp;lt;/code&amp;gt; (ihr Name in Großbuchstaben), und es wird &amp;lt;code&amp;gt;DIR&amp;lt;/code&amp;gt; an die Umgebung übergeben und ausgeführt. Im zweiten Fall wird garantiert &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; übergeben und ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Es könnte sein, dass eine zukünftige Rexx-Version ein Schlüsselwort &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; einführt. Um sicherzugehen, dass das Programm auch dann noch funktioniert, kann z.&amp;amp;nbsp;B. durch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erzwungen werden, dass die Anweisung als Ausdruck (Verkettung der Variablen mit dem Leerstring) erkannt wird;&lt;br /&gt;
oder man verwendet einfach die Variante, das Kommando als Stringkonstante zu übergeben.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Michael Cowlishaw: &amp;#039;&amp;#039;The Rexx Language: A Practical Approach to Programming.&amp;#039;&amp;#039; ISBN 0-13-780651-5.&lt;br /&gt;
* Johann Deuring: &amp;#039;&amp;#039;REXX Grundlagen für die z/OS Praxis&amp;#039;&amp;#039;. 2005. ISBN 978-3-486-20025-6&lt;br /&gt;
* Michael Metz et al.: &amp;#039;&amp;#039;ARexx. Eine Einführung und mehr.&amp;#039;&amp;#039; ISBN 3-930733-00-5.&lt;br /&gt;
* Karlheinz Wittemann: &amp;#039;&amp;#039;REXX unter MVS-TSO/E.&amp;#039;&amp;#039; ISBN 3-446-17956-9.&lt;br /&gt;
* Karlheinz Wittemann: &amp;#039;&amp;#039;Inside z/OS. Das große TSO-REXXikon&amp;#039;&amp;#039;, 2009, ISBN 978-3-00-029410-5.&lt;br /&gt;
* Howard Fosdick: &amp;#039;&amp;#039;Rexx Programmer’s Reference.&amp;#039;&amp;#039; Wiley/Wrox, 2005, ISBN 0-7645-7996-7.&lt;br /&gt;
* Merrill Callaway: &amp;#039;&amp;#039;The ARexx Cookbook. A Tutorial Guide to the ARexx Language on the Commodore Amiga Personal Computer&amp;#039;&amp;#039;, 1992, ISBN 978-0963277305.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{commonscat|REXX_(programming_language)|REXX}}&lt;br /&gt;
{{Wikibooks}}&lt;br /&gt;
* [https://www.rexxla.org RexxLA] Rexx Language Association&lt;br /&gt;
* [http://regina-rexx.sourceforge.net Regina.] Open-Source-Implementierung für Unix und Windows&lt;br /&gt;
* [http://www.oorexx.org Open Object Rexx] – Open-Source-Projekt unter Obhut der Rexx Language Association (RexxLA), das IBMs Object REXX weiterentwickelt.&lt;br /&gt;
* [https://github.com/Jaxo/yaxx REXX für Palm OS]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/topic/books_web/sc415728.pdf REXX/400 Programmers Guide] (PDF; 854 kB)&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4196484-6}}&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Rexx}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Skriptsprache]]&lt;br /&gt;
[[Kategorie:DOS-Betriebssystemkomponente]]&lt;br /&gt;
[[Kategorie:Großrechner-Betriebssystem (IBM)]]&lt;br /&gt;
[[Kategorie:OS/2-Betriebssystemkomponente]]&lt;br /&gt;
[[Kategorie:Abkürzung|REXX]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Schotterebene</name></author>
	</entry>
</feed>