Was ist APL, wann und warum ist APL sinnvoll?

Unsere Entwickler verwenden vorzugsweise die Programmiersprache APL. Trotz unbestreitbarer Vorteile
ist APL selbst in Fachkreisen nur wenig bekannt. Und diejenigen, die es kennen, schrecken nicht selten
vor den scheinbar unverständlichen Symbolen oder dem angeblich hohen Ressourcenverbrauch zurück.
Wir möchten hier versuchen, die Vorteile der Programmiersprache zu erläutern und die Vorurteile
zu entkräften.

In aller Kürze

Mit APL lässt sich Software mit einem Bruchteil des Aufwands realisieren, der zum Beispiel in C++
oder Java erforderlich wäre. Das gilt ganz besonders, wenn es um komplexe Datenstrukturen oder
aufwendige Analysen geht.
Die Vorteile, die der kompakte Code und die Interpreterstruktur von APL bieten, kommen aber auch dann
besonders zum Zuge, wenn Anwendungen anfangs oder sogar dauerhaft raschem Wandel unterworfen sind.
Obwohl die Sprache sehr alt ist, lassen moderne APL-Entwicklungsumgebungen mit graphischen
Benutzeroberflächen und einer Vielzahl von Schnittstellen hinsichtlich der technischen Möglichkeiten
keine Wünsche offen.

Symbole

Der augenfälligste Unterschied zwischen APL und anderen Sprachen ist, dass die eingebauten Funktionen
nicht durch Schlüsselwörter („equals“, „do“) sondern über etwa 100 verschiedene Symbole angesprochen
werden. Auf Anhieb erscheinen APL-Funktionen daher erst einmal recht unverständlich.



Wer Code wie diesen zum ersten Mal sieht, wird kaum glauben, dass man APL innerhalb sehr kurzer Zeit
lernen kann. Dennoch ist das der Fall. Die bereitgestellten Funktionen sind intuitiv, und das klare Regelwerk
der Syntax machen es eher leicht, die Sprache zu erlernen. Nach kurzer Zeit spart man nicht nur Tipparbeit,
der Code wird vor allem übersichtlicher, und daher weniger fehleranfällig als in anderen Sprachen.
Der eigentliche Code der obigen Funktion besteht übrigens nur aus der 8. Zeile.
Die anderen Zeilen enthalten die Funktionsdeklaration (0. Zeile) und Kommentare.

Mächtigkeit der Sprache

Hinter den Symbolen verbergen sich recht mächtige Funktionen. APL-Funktionen sind so konzipiert,
dass sie sich, sofern sinnvoll, auf beliebige Strukturen anwenden lassen. Die Funktion „+“ beispielsweise
addiert nicht nur einzelne Zahlen, sondern komponentenweise auch Vektoren, Matrizen, Datenquader
oder Strukturen mit noch mehr Dimensionen, ja sogar sogenannte ‚nested arrays‘, wie sie als verkettete
Strukturen aus anderen Sprachen bekannt sind.

Daten lassen sich so recht einfach analysieren. Sei zum Beispiel in der 3x12-Matrix „umsatz“ der Umsatz
einer Firma pro Vertreter und Monat gegeben, wobei die Zeilen sich auf die drei Vertreter und die Spalten
sich auf die Monate beziehen.

so ergibt

den Gesamtumsatz pro Monat,
den Jahresumsatz pro Vertreter,
den gesamten Jahresumsatz der Firma

und



den durchschnittlichen Monatsumsatz pro Vertreter.

Erscheint es angenehm, dass es nicht notwendig ist, Schleifen zu schreiben, die bekanntermaßen einer der
häufigsten Quellen von Fehlern sind, erscheint es nützlich, dass Code und Bedeutung leicht zu überblicken
sind, so liegt der handfesteste Vorteil womöglich darin, dass dieselben drei Codezeilen auch dann die
gewünschten Ergebnisse liefern, wenn es sich um mehr oder weniger als drei Vertreter oder eine andere
Anzahl von Spalten handelt. Ja, selbst wenn nachträglich auf einer dritten Achse nun verschiedene Artikel
erscheinen oder gar auf einer vierten Achse die Orte der Umsätze, so sind die drei Codezeilen nicht nur
funktionsfähig, sie ändern ihren Sinn in angemessener Weise auf Umsatzsummen pro Monat und Artikel,
bzw. Umsatzsumme pro Vertreter und Artikel. Die letzte Zeile würde in dieser Schreibweise stets den
Umsatz über alle Artikel, Vertreter und Monate liefern.

Es ist nicht zuletzt diese Eigenschaft der Flexibilität, die die doch stets eingeklagte Wiederverwendung von

Funktionalitäten befördert.

Interpretersprache

APL ist eine Interpretersprache, das heißt, die Programme werden nicht kompiliert, sondern erst bei
Ausführung in maschinenverständlichen Code übersetzt. Die damit verbundene längere Laufzeit und
der Speicherverbrauch des Interpreters waren bis Anfang der 90er Jahre ein echtes Hindernis für
den Einsatz von APL auf PCs. Inzwischen hat die Leistungsfähigkeit der Hardware so rasante Sprünge
gemacht, dass die Laufzeitnachteile durch die Interpretation der Anweisungen völlig bedeutungslos
geworden sind (bei großen Datenmengen waren diese seit jeher vernachlässigbar). Im Vergleich zu
modernen Office-Paketen ist auch der Platzdarf des Interpreters kaum der Rede wert. Übrigens sind
auch Programmiersprachen wie Java und C# „halbe“ Interpretersprachen, da die Programme nicht
mehr direkt in Maschinensprache, sondern in einen Bytecode übersetzt werden, der dann zur Laufzeit
interpretiert wird.

Während die Nachteile der Interpreterstruktur durch die rasante Hardwareentwicklung praktisch nicht
mehr bestehen, haben die Vorteile nichts von ihrer Nützlichkeit verloren. Einer dieser Vorteile ist
natürlich die Flexibilität des Codes. Aber die Interpreterstruktur reduziert auch enorm
die Entwicklungsaufwände. Im Interpreter lassen sich Programme zu Testzwecken jederzeit anhalten
und verändern. Die Veränderung von Funktionen oder Testdaten ist sofort wirksam, und das Programm
kann am Ausstiegspunkt in der neuen Fassung wieder in Gang gesetzt werden. Einzelne Statements und
Funktionen lassen jederzeit in der augenblicklichen oder einer mitgespeicherten Umgebung ausprobieren.

Die Produktivität eines Entwicklers hängt nicht nur von der Beherrschung der Sprache ab, sondern ebenso sehr von der Mächtigkeit der Entwicklungs- und Debuggingumgebung, die in der Regel von der eigentlichen Sprache verschieden ist und bei aller Mächtigkeit an Debuggingtools nicht die Instrumente bereitstellt, die die Sprache zur Verfügung hat. Was am Datenbestand, der zu einem bestimmten Zeitpunkt der Laufzeit besteht, nicht stimmt, ist aber oft nicht einfach festzustellen. Stimmen denn wenigstens die Umsatzsummen mit den Testvorgaben überein? In einer Debuggingumgebung wird man kaum die Schleife schreiben können, die diese Summe ausrechnet. Im APL-Interpreter aber stehen die Instrumente zur Datenmanipulation und -analyse jederzeit auch außerhalb der geschriebenen Funktionen zur Verfügung. Der Entwickler kann am Bildschirm die drei obigen Umsatzzeilen ausführen oder die Daten in anderer Weise, auch unter Verwendung von eigentlich zum Programm gehörigen Funktionen, analysieren.

Es ist die Summe dieser Möglichkeiten, die die Entwicklung unter APL enorm beschleunigt und das Aufspüren und Beseitigen von Fehlern erleichtert.

APL unter Windows, Unix, OS/2 und auf Mainframe

Für die Entwicklung von APL-Programmen auf dem PC existieren verschiedene Interpreter, die ständig weiter entwickelt werden. Die a.k.e verwendet hauptsächlich das Produkt APL+Win der Firma APL2000. Diese moderne Entwicklungsumgebung bietet mit allen wünschenswerten Tools zur Entwicklung graphischer Benutzeroberflächen, DLL-, ODBC- und ActiveX-Anbindungen sowie Netzwerkfunktionen für Internet und LAN auch alle technischen Voraussetzung für die Erstellung moderner Business-Anwendungen. Eine Anbindung an das .NET-Framework ist in Vorbereitung.

Viele unserer Kunden setzen Großrechner unter zOS bzw. OS/390 ein. Hier arbeiten wir mit dem APL-Interpreter der Firma IBM, die ebenfalls einen Interpreter für OS/2 und Windows bereitstellt.

Inzwischen existieren umfangreiche Toolbibliotheken, beispielsweise zur Erstellung von Masken, DB-Zugriffen, Listen oder auch PDF-Dokumenten. APL-Interpreter für Unix werden von den Firma Dyadic und APL2000 angeboten. APL ist in hohem Maße standardisiert, so dass die verschiedenen Interpreter sich in ihrer APL-Syntax nicht unterscheiden.

Natürlich entwickeln wir auch in anderen Programmiersprachen....

Bei allen Vorteilen, die wir für APL sehen, mag es die unterschiedlichsten Gründe geben, nicht APL einzusetzen, und selbstverständlich gibt es ein paar Bereiche, in denen auch wir APL nicht empfehlen. a.k.e kann Ihnen auch in diesem Fall behilflich sein. Nutzen Sie unsere Erfahrung in der erfolgreichen Durchführung von Softwareprojekten.