A Programming Language

APL, abgekürzt für A Programming Language, ist eine üblicherweise interpretierte Programmiersprache. Sie wurde von Kenneth E. Iverson und seinen Kollegen bei IBM in der 1960er Jahren als algorithmische Notation entwickelt. Einige Jahre später wurde APL als Programmiersprache auf Großrechnern implementiert und den Kunden als Timesharing-Option angeboten. Zu jener Zeit wurden IBM-Kugelkopf-Schreibmaschinen als „Terminal“ verwendet. Die ersten Implementierungen auf PCs benötigten ein Spezial-EPROM, damit der APL-Zeichensatz angezeigt werden konnte. Eine Vorläufer-Implementierung gab es schon 1975 auf der IBM 5100. Heute reicht die Installation eines APL-Zeichensatzes aus. Außerdem wurden seinerzeit spezielle Tastaturen verwendet, die später durch eine Bildschirmanzeige der Tastaturbelegung ersetzt wurden.

Inhaltsverzeichnis

Besonderheiten

Interaktivität

APL ist interaktiv: nach der Eingabe eines Befehls bzw. einer Reihe von Befehlen drückt man <Enter>, der/die Befehle werden vom Interpreter ausgeführt und das Ergebnis angezeigt. 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 einer der großen Vorteile von APL.

Programmcode

Folgen von Befehlen lassen sich zu Programmen zusammenfassen. Bis in die 1990er Jahre fehlten APL Kontrollstrukturen. Logik musste durch Sprunganweisungen realisiert werden, was zu schwer les- und wartbaren Programmen führte.

Datentypen

APL kennt die Datentypen Char, Bool, Int und Float, allerdings muss der Programmierer dies nicht unbedingt wissen beziehungsweise berücksichtigen, denn der Interpreter wandelt die Datentypen automatisch um, wann immer dies notwendig ist. Dies bedeutet 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

Ausführung und Rangfolge

Es gibt in APL nur eine einzige Rangfolgenregel: alles wird von rechts (!) nach links abgearbeitet (Polnische Notation). Eine selbstverständliche Ausnahme: Ausdrücke in Klammern werden zuerst abgearbeitet. Daher gilt:

    10×2+3
 50

aber:

    (10×2)+3
 23

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. Funktionen liefern Daten zurück, Operatoren sogenannte „abgeleitete Funktionen“ (engl.: derived function).

Beispiel

Das Zeichen Slash (/) steht für den Operator Reduce. Operatoren erwarten einen oder zwei Operanden. Wird nur ein Operand verwendet, dann muss er links neben dem Operator stehen:

+/

In diesem Beispiel ist der Operand die Funktion „Plus“. Zusammen mit dem Operator wird die abgeleitete Funktion Summiere gebildet.

Angewendet auf einen Vektor:

+/ 3 4 5

bewirkt der Operator Reduce, dass der Operand zwischen die einzelnen Bestandteile des Vektor eingefügt wird. Abstrakt ausgedrückt:

f/ n1 n2 n3  ==  n1 f n2 f n3

und im konkreten Beispiel:

+/ 3 4 5  ==  3 + 4 + 5

Wie mächtig dieses Konzept ist, wird aber erst bei Betrachtung eines anderen Operators klar: Expand (Backslash, \) verwendet den Operanden in der gleichen Weise wie Reduce, gibt aber Zwischenergebnisse aus:

   +\ 3 4 5
3 7 12

Weitere Beispiele

    x/ 3 4 5
60
    x\3 4 5
3 12 60
    -/3 4 5
4
    -\3 4 5
3 ¯1 4

Selbstverständlich gibt es auch Operatoren, die zwei Operanden verlangen. Der Operator Outer Product (.) ist ein solcher Operator. Verwendet man als Operanden die Funktionen Plus (+) und Mal (x), dann entsteht in APL die Matrizenmultiplikation:

   1 2 3 +.x 40 50 60
320
APL-Statement

Das funktioniert genauso mit Matrizen. Um dies zu demonstrieren, sind in dem Bild einige Zeilen aus einer APL-IDE (hier Dyalog APL/W) dargestellt. Es werden neben + und x drei APL-Funktionen verwendet:

  • Der nach links weisende Pfeil wird in APL verwendet, um die Zuweisung eines Wertes auf einen Variablennamen zu symbolisieren.
  • Das einem i ähnelnde Zeichen iota entstammt dem griechischen Alphabet und steht hier für die APL-Funktion Interval. Im ersten Anwendungsfall wird eine Zahlenkette von 1 bis 6 erzeugt.
  • Das dem Buchstaben p ähnelnde Zeichen rho entstammt dem griechischem Alphabet und steht für die APL-Funktion shape. Diese Funktion formatiert die rechts angegeben Daten. Die Anzahl der Achsen wird links von dem Zeichen angegeben. In dem ersten Anwendungsfall wird eine Matrix mit 2 Zeilen und 3 Spalten erzeugt.

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 eine Anweisung mit einigen Symbolen aus. Typisch sind die berühmt-berüchtigten „One-Liner“, eine Spielwiese ehrgeiziger APL-Programmierer. So ist es z. B. möglich, das n-Damen-Problem in einer Zeile zu realisieren. Natürlich bedeutet dies zugleich, dass ein APL-Statement auch schwerer zu verstehen ist – dies war ein Hauptargument gegen den kommerziellen Einsatz von APL: die praktische Unwartbarkeit der Programme. Durch eine großzügige Kommentierung des Programms lässt sich das Problem allerdings eingrenzen.

Ausführungsgeschwindigkeit

Da APL interpretiert wird, ist es vergleichsweise langsam in der Ausführung. Dies macht sich besonders dann unangenehm bemerkbar, wenn ein APL-Programm sich um einzelne Datenteilchen kümmern muss, zum Beispiel in einem KeyPress-Event-Handler. Andererseits umfasst APL einen großen Vorrat hochspezialisierter Funktionen, die für die Verarbeitung großer Arrays optimiert sind. Werden diese Funktionen auf große Datenmengen angewendet, dann können APL-Funktionen sehr schnell sein.

Entwicklung und aktuelle Situation

Bis ca. 1985 war 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 haben diese Implementierungen IBMs APL2 in Sachen Leistungsfähigkeit teilweise hinter sich gelassen, während IBM APL2 durch seine Integrationsfähigkeit in die Java-Welt besticht.

Die derzeit beste Implementierung, Dyalog APL, wurde von Microsoft in den Kreis der anerkannten .NET-Sprachen aufgenommen. IBM APL2 ist dagegen erste Wahl in IBMs Websphere Welt.

In den EDV-Abteilungen großer wie mittelgroßer Firmen konnte sich APL nie richtig durchsetzen. Wahrscheinlich beruht jedoch der Erfolg vieler Firmen auf dem Einsatz dieser Programmiersprache weil sie das Werkzeug zum Prototyping mathematisch wissenschaftlicher Verfahren war und in dieser Rolle nie ersetzt wurde. Bedeutung hat APL2 heute noch in der Banken-, Versicherungs- und der Tourismusbranche.

Heute wird APL in kleinen Projekten von spezialisierten Software-Firmen eingesetzt sowie als Werkzeug von Fachleuten, die sich eher als Systemanalytiker oder Business-Analysten denn als Programmierer bezeichnen. 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 Gegnern als Katastrophe betrachtet.

Weblinks

Implementierungen

Periodika

Über APL

Syntax


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • A+ (programming language) — For information on the A+ computer certification program, see CompTIA. Infobox programming language name = A+ paradigm = array year = 1988 designer = Arthur Whitney developer = Morgan Stanley latest release version = 4.20 2 latest release date =… …   Wikipedia

  • A Manufacturing Language — or AML is an interactive, structured robot programming language developed by IBM and capable of handling many operations, including interfacing and data processing, that go beyond the programming of robot motion and sensor commands. AML supports… …   Wikipedia

  • A Graphics Language — (AGL) is an extension of the BASIC programming language, implemented on Hewlett Packard minicomputers to simplify controlling a plotter. AGL commands describe the desired graphics plotting function, which the computer relays to the plotter as… …   Wikipedia

  • Programming language — lists Alphabetical Categorical Chronological Generational A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that… …   Wikipedia

  • Programming language specification — A programming language specification is an artifact that defines a programming language so that users and implementors can agree on what programs in that language mean.A programming language specification can take several forms, including the… …   Wikipedia

  • Programming language implementation — A programming language implementation is a system for executing programs written in a programming language.There are two general approaches to programming language implementation: *Interpretation: An interpreter takes as input a program in some… …   Wikipedia

  • Programming language reference — A programming language reference (or language reference manual) is an artifact that describes a programming language so that users and developers can understand the basic elements of and write computer programs in the target language.A… …   Wikipedia

  • A Sharp (programming language) — A Sharp may refer to multiple computer programming languages:*A Sharp (.NET), a port of the Ada programming language to the .NET environment *A Sharp (Axiom), a programming language for the Axiom computer algebra system …   Wikipedia

  • Programming language for Computable Functions — The Programming language for Computable Functions, or PCF, is a typed functional language introduced by Gordon Plotkin in 1977. It is based on the Logic of Computable Functions (LCF) by Dana Scott. It can be considered as a simplified version of… …   Wikipedia

  • Programming language theory — (commonly known as PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of programming languages and programming language features. It is a multi disciplinary field, both… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”