Mittwoch, 13. August 2014

Editoren für REXX, Teil 1: jEdit

Ein nicht zu vernachlässigender Faktor im »Ökosystem« einer Programmiersprache ist die Unterstützung durch Editoren – ist es doch diese Komponente, in der die meiste Arbeit erledigt wird. Für REXX ist die Situation da leider nicht optimal, zumindest soweit ich sie bisher erkundet habe. Es soll zunächst eine kurze Information zu jEdit (http://www.jedit.org) geben.

jEdit kennt einen Dateityp »objectrexx«. Dieser leistet Syntaxhervorhebung für REXX-Dateien, allerdings recht unvollständig. Zum Beispiel wird bei Kommentaren die Schachtelung nicht beachtet; viele Schlüsselwörter werden nicht hervorgehoben (anscheinend die abhängigen Schlüsselwörter, die nur dann als Schlüsselwörter gelten, wenn ein anderes Schlüsselwort vorausgeht). Kleine Probleme gibt es auch, wenn es darum geht, das Ende einer Zeichenkette zu bestimmen.

Automatische Einrückungen werden im Modus »objectrexx« zum Großteil sinnvoll vorgenommen. Das ist sehr angenehm.

Mit Hilfe der jEdit-Erweiterung CtagsSideKick gelingt eine rudimentäre Auf‌listung der Unterprogramme, sodass man per Mausklick dorthin navigieren kann. Diese Lösung basiert auf ctags, das zurzeit wohl noch keine mit ::routine definierten Unterprogramme listen kann. Das ist schade. Dazu kommt, dass bei komplexeren Programmen die Unterprogrammliste einfach nicht mehr angezeigt wird. Ich vermute, dass das ein Problem in CtagsSideKick ist, denn vim kann die Liste basierend auf dem gleichen ctags durchaus anzeigen.

Trotz der genannten Probleme ist jEdit trotzdem eine brauchbare Lösung zur Erstellung von REXX-Programmen.

Mittwoch, 6. August 2014

REXX-Befehle direkt in der Kommandozeile

Wie viele andere Skriptsprachen auch unterstützt OORexx die Übergabe von REXX-Befehlen direkt auf der Kommandozeile. Der zuständige Schalter ist -e. Es lässt sich also folgendermaßen eine Berechnung durchführen:

rexx -e "say 12 * 12"

Schnell mal eine Zahl nach hexadezimal konvertieren:

rexx -e "say d2x(153)"

(Die Funktion d2x wandelt eine Dezimalzahl in ihre hexadezimale Darstellung um.)

Oder die ersten drei Zeichen einer Datei hexadezimal ausgeben:

rexx -e "say c2x(charin('maqaf.odt', , 3))"

(charin liest Zeichen aus einer Datei. Der erste Parameter ist der Dateiname, der zweite, der hier ausgelassen ist, gibt die Position an, ab der gelesen werden soll; hier vom Anfang der Datei an. Der dritte Parameter ist die Zahl der zu lesenden Zeichen. c2x wandelt diese drei Zeichen dann in ihre Hexadezimaldarstellung um.)

Montag, 4. August 2014

REXX und der Shebang

Unter Linux ist es üblich, Skripte mit einer Shebang-Zeile beginnen zu lassen. In dieser Shebang-Zeile wird dem Betriebssystem mitgeteilt, mit welchem Interpreter das Skript zu starten ist. Eine solche Zeile könnte so aussehen:

#!/usr/bin/env ruby

Die Zeichenfolge #! nennt man Shebang. Danach schaut das Betriebssystem. In den meisten Skriptsprachen ist das Doppelkreuz wohl nicht ganz zufällig das Kommentarzeichen, sodass diese Zeile vom Interpreter nicht als eine reguläre Programmzeile gelesen wird.

REXX verwendet allerdings nicht das Doppelkreuz als Kommentarzeichen, sondern -- für einzeilige und /**/ für mehrzeilige Kommentare. Zumindest in Open Object Rexx (nennen wir es ab heute OORexx) funktioniert der Shebang aber trotzdem. Ein Skript darf also so beginnen:

#!/usr/bin/env rexx

Linux findet dann den richtigen Interpreter und dieser beschwert sich nicht über die eigentlich ungültige Syntax der ersten Zeile. Man kann diese Zeile auch drinlassen, wenn das Skript unter Windows ausgeführt wird. Auch die Windows-Version von OORexx ignoriert sie.

Freitag, 1. August 2014

Neue Ufer: REXX

Beruflich habe ich mittlerweile mit REXX zu tun bekommen. Dabei handelt es sich um eine Skriptsprache, die schon einiges älter ist als die, die heute weit verbreitet sind. Dennoch (oder: deshalb?) gibt es einige interessante Ansätze darin.

Die Variante von REXX, mit der ich arbeite ist Open Object Rexx (www.oorexx.org), wie der Name vermuten lässt, eine quelloffene, objektorientierte Fassung von REXX.

Heute werde ich noch nicht viel dazu schreiben; nur »Hello, world!« wollte ich kurz zum Besten geben. Es handelt sich um das kürzeste Hello-world-Programm, das mir bekannt ist:

say 'Hello, world!'