APL (Programmiersprache)
Überblick
APL, abgekürzt für A Programming Language, ist eine interpretierte Programmiersprache. Sie wurde von Kenneth E. Iverson und seinen Kollegen bei IBM in der 60er Jahren entwickelt und war auf Großrechnern wie auch auf Vorläufern des Personal Computers populär. Sie gilt als zweitälteste Programmiersprache nach FORTRAN. Für die Erstellung der Quelltexte wird ein spezieller Zeichensatz benötigt, so dass man ein spezielles EPROM benötigte. Heute reicht die Installation eines APL-Zeichensatzes aus. Außerdem wurden seinerzeit natürlich spezielle Tastaturen verwendet, die später durch eine Bildschirmanzeige der Tastaturbelegung ersetzt wurden.
Besonderheiten
Interaktivität
APL ist interaktiv: nach der Eingabe eines Befehls bzw. einer Reihe von Befehlen drückt man <Enter>, und der/die Befehle werden vom Interpreter ausgeführt. Tritt ein Fehler auf, erhält man eine entsprechende Meldung. Man kann seine Eingabe modifizieren und erneut ausführen. Die dadurch mögliche direkte Interaktion mit dem Computer ist bis heute zweifellos einer der großen Vorteile von APL.
Datentypen
APL kennt die Datentypen Char, Bool, Int und Float, allerdings muss der Programmierer dies nicht unbedingt wissen bzw. berücksichtigen, denn der Interpreter wandelt die Datentypen automatisch um, wann immer dies notwendig ist. Dies bedeutet natürlich auch, dass APL keine Typenprüfung kennt.
Speicherverwaltung
Auch die Speicherverwaltung wird vom Interpreter übernommen. Ein APL-Programmierer muss sich weder um das Reservieren noch um das Freigeben von Speicher kümmern.
Array-Verarbeitung
Fast alle Funktionen in APL sind non-skalar ausgelegt. Dies bedeutet, dass Funktionen nicht nur auf einzelne Skalare, sondern auch auf Vektoren, Matrizen und vieldimensionale Daten angewendet werden können.
Beispiele
In jeder Programmiersprache geht dies:
2 + 3 5
In APL geht aber auch:
2 3 4 + 3 5 6 7
und auch dies:
2 3 4 + 5 6 7 7 9 11
Funktionen und Operatoren
APL kennt sowohl Funktionen als auch Operatoren, aber die Bedeutung der Begriffe ist anders als in der Mathematik: Funktionen werden auf Daten angewendet, Operatoren auf Funktionen und Daten.
Beispiel
Das Zeichen Slash / steht der den Operator xyz. Operatoren erwarten einen oder zwei Operanden. Wird nur ein Operand verwendet muß er links neben dem Operator stehen:
+/
In diesem Beispiel ist der Operand die Funktion "Plus". Zusammen mit dem Operator wird eine abgeleitete Funktion (engl.: derived function) gebildet. Hier ist dies die abgeleitete Funktion Summiere.
Angewendet auf einen Vektor:
+/ 3 4 5
bewirkt der Operator /, dass der Operand zwischen die einzelnen Bestandteile des Vektor eingefügt wird. Abstrakt ausgedrückt:
+/ n1 n2 n3 == n1 + n2 + n3
und im konkreten Beispiel:
+/ 3 4 5 == 3 + 4 + 5
Wie ungeheuer mächtig dieses Konzept ist, wird aber erst bei Betrachtung eines anderen Operators klar: Backslash \ verwendet den Operanden in der gleichen Weise wie /, gibt aber Zwischenergebnisse aus:
+\ 3 4 5 3 7 12
Selbstverständlich gibt es auch Operatoren, die zwei Operanden verlangen. Der Punkt-Operator . ist ein solcher Operator. Verwendet man als Operanden die Funktionen Plus + und Mal x, dann entsteht in APL die Matritzenmultiplikation:
1 2 3 +.x 40 50 60 320
Mächtigkeit und Lesbarkeit
APL ist mächtig: Keine andere Sprache kann mit dieser Kürze und Stringenz aufwarten. Wo in anderen Programmiersprachen viele Zeilen vonnöten sind, reicht bei APL häufig schon ein Statement mit einigen wenigen Symbolen aus. Natürlich bedeutet dies zugleich, dass ein APL-Statement auch schwerer zu verstehen ist.
Ausführungsgeschwindigkeit
Da APL interpretiert wird, ist es vergleichsweise langsam in der Ausführung. Dies macht sich besonders dann unangenehm bemerkbar, wenn man sich um einzelne Datenteilchen kümmern muss, zum Beispiel in einem KeyPress-Event-Handler. Andererseits umfasst APL einen großen Vorrat hochspezialiserter Funktionen, die für die Verarbeitung großer Arrays optimiert sind. In solchen Fällen können APL-Programme erstaunlich schnell sein.
Aktuelle Situation
Bis ca. 1985 war die IBM mit ihrem APL2-Interpreter auf PCs wie auf Mainframes der führende Anbieter. In den folgenden knapp 10 Jahren wurde die Sprache dann aber nicht nennenswert weiterentwickelt. Erst seit ca. 1992 haben kleinere Software-Firmen (APL2000, Dyalog APL) APL kontinuierlich weiterentwickelt. Mittlerweile habe diese Implementierungen IBM's APL2 in Sachen Leistungsfähigkeit weit hinter sich gelassen.
Die derzeit beste Implementierung, Dyalog APL, wurde von Microsoft in den Kreis der anerkannten .NET-Sprachen aufgenommen.
In den EDV-Abteilungen großer wie mittelgroßer Firmen konnte sich APL nie richtig durchsetzen. In diesem Bereich hat es in Deutschland daher kaum noch Bedeutung. In der Banken- und Versicherungsbranche wird es mitunter noch in alten Anwendungen eingesetzt.
Heute wird APL in kleinen Projekten von spezialisierten Software-Firmen eingesetzt sowie als Werkzeug von Fachleuten, die keine Programmierer sein. Auch in den Fachabteilungen größerer Unternehmen wird es immer noch gerne eingesetzt.
J und APL
In seinen späten Jahren hat der Designer von APL, Ken Iverson, einen zweiten Versuch gewagt. Das Ergebnis ist die Sprache J, die nichts mit Microsofts J zu tun hat. Diese Sprache ähnelt in ihren Konzepten sehr stark APL, verwendet aber ausschließlich Zeichen des ASCII-Zeichensatzes. Dies wird von Anhängern als gewaltiger Fortschritt, von Gegner als Katastrophe betrachtet.