Privacy Policy Cookie Policy Terms and Conditions APL (Programmiersprache) - Wikipedia

APL (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie

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

[Bearbeiten] Besonderheiten

[Bearbeiten] 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.

[Bearbeiten] Simulationen

Andere Rechner (PC, Mainframe) können mit APL simuliert werden und damit können logische Fehler leicht erkannt werden. Das funktioniert aber auch für jede andere Maschine oder biologische Struktur, sofern diese in Unterstrukturen geteilt werden kann. Zeitbedarf bei anderen Programmiersprachen ginge dabei ins Unendliche.

[Bearbeiten] Programmcode

Folgen von Befehlen lassen sich zu Programmen zusammenfassen. Darin sind jedoch die klassischen Logikstrukturen IF-THEN-ELSE und DO-Schleifen nicht möglich - sie müssen mit der Verzweigungsfunktion ("GOTO", Operator ist ein rechtsgerichteter Pfeil) realisiert werden.

[Bearbeiten] 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.

[Bearbeiten] 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.

[Bearbeiten] 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

[Bearbeiten] Ausführung und Rangfolge

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

    10×2+3
 50

aber:

    (10×2)+3
 23

[Bearbeiten] 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 ungeheuer 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 Matritzenmultiplikation:

   1 2 3 +.x 40 50 60
320
APL-Statement
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.

[Bearbeiten] 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 Symbolen aus. Dies sind die berühmt-berüchtigten "One-Liner", eine Spielwiese ehrgeiziger APL-Programmierer. 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.

[Bearbeiten] 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.

[Bearbeiten] Entwicklung und 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 haben diese Implementierungen IBMs 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 sind. Auch in den Fachabteilungen größerer Unternehmen wird es immer noch gerne eingesetzt.

[Bearbeiten] 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.

[Bearbeiten] Links

[Bearbeiten] Implementierungen

[Bearbeiten] Periodika

[Bearbeiten] Über APL

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu