A Programming Language

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:

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

  • Programming Language Design and Implementation — (PLDI) is one of the ACM SIGPLAN s most important conferences. The precursor of PLDI was the Symposium on Compiler Optimization, held July 27–28, 1970 at the University of Illinois at Urbana Champaign and chaired by Robert S. Northcote. That… …   Wikipedia

  • Programming Language for Business — or PL/B is a business oriented programming language originally called DATABUS and designed by Datapoint in the early 1970s as an alternative to COBOL because its 8 bit computers could not fit COBOL into their limited memory, and because COBOL did …   Wikipedia

  • programming language — ➔ language * * * programming language UK US noun [C] ► COMPUTER LANGUAGE(Cf. ↑computer language) …   Financial and business terms

  • programming language — Language Lan guage, n. [OE. langage, F. langage, fr. L. lingua the tongue, hence speech, language; akin to E. tongue. See {Tongue}, cf. {Lingual}.] [1913 Webster] 1. Any means of conveying or communicating ideas; specifically, human speech; the… …   The Collaborative International Dictionary of English

  • Programming Language One — Programming Language One, oft als PL/I (auch PL/1, PL1 oder PLI) abgekürzt ist eine Programmiersprache, die in den 1960er Jahren von IBM entwickelt wurde. Die Bezeichnung PL/1 ist vor allem in Deutschland gebräuchlich. Ursprünglich wurde PL/I… …   Deutsch Wikipedia

  • Programming Language 1 — noun A computer programming language which combines the best qualities of commercial and scientific oriented languages (abbrev PL/1) • • • Main Entry: ↑programme …   Useful english dictionary

  • Programming Language —   [engl.], Programmiersprache …   Universal-Lexikon

  • 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 — noun (computer science) a language designed for programming computers • Syn: ↑programing language • Topics: ↑computer science, ↑computing • Hypernyms: ↑artificial language …   Useful english dictionary

Share the article and excerpts

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