|
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.

|