APL (Programmiersprache) - APL (programming language)

APL
Paradigma Array , funktional , strukturiert , modular
Entworfen von Kenneth E. Iverson
Entwickler Larry Breed , Dick Lathwell , Roger Moore und andere
Erstmals erschienen 27. November 1966 ; Vor 54 Jahren ( 1966-11-27 )
Stabile Version
ISO/IEC 13751: 2001 / 1. Februar 2001 ; vor 20 Jahren ( 2001-02-01 )
Schreibdisziplin Dynamisch
Plattform Plattformübergreifend
Lizenz Proprietär , Open Source
Wichtige Implementierungen
  • APL\360
  • APL\1130
  • APL*Plus
  • Scharfe APL
  • APL2
  • Dyalog APL
  • NARS2000
  • APLX
  • GNU-APL
Beeinflusst von
Mathematische Notation
Beeinflusst

APL (benannt nach dem Buch A Programming Language ) ist eine Programmiersprache, die in den 1960er Jahren von Kenneth E. Iverson entwickelt wurde . Sein zentraler Datentyp ist das mehrdimensionale Array . Es verwendet eine große Auswahl an speziellen grafischen Symbolen, um die meisten Funktionen und Operatoren darzustellen, was zu einem sehr prägnanten Code führt. Es war ein wichtiger Einfluss auf die Entwicklung von Konzeptmodellen, Tabellenkalkulationen , funktionaler Programmierung und Computermathematikpaketen. Es hat auch mehrere andere Programmiersprachen inspiriert.

Geschichte

Mathematische Notation

Eine mathematische Notation zum Manipulieren von Arrays wurde von Kenneth E. Iverson ab 1957 an der Harvard University entwickelt . 1960 begann er für IBM zu arbeiten, wo er diese Notation mit Adin Falkoff entwickelte und 1962 in seinem Buch A Programming Language veröffentlichte. Das Vorwort nennt die Prämisse:

Angewandte Mathematik beschäftigt sich hauptsächlich mit dem Entwurf und der Analyse expliziter Verfahren zur Berechnung der genauen oder ungefähren Werte verschiedener Funktionen. Solche expliziten Prozeduren werden Algorithmen oder Programme genannt . Da eine effektive Notation zur Beschreibung von Programmen eine beträchtliche syntaktische Struktur aufweist, wird sie als Programmiersprache bezeichnet .

Diese Notation wurde innerhalb von IBM für kurze Forschungsberichte zu Computersystemen verwendet, wie dem Burroughs B5000 und seinem Stack-Mechanismus, wenn Stack-Maschinen im Vergleich zu Registermaschinen von IBM für kommende Computer bewertet wurden.

Iverson verwendete seine Notation auch in einem Entwurf des Kapitels A Programming Language , geschrieben für ein Buch, das er mit Fred Brooks schrieb , Automatic Data Processing , das 1963 veröffentlicht werden sollte.

1979 erhielt Iverson den Turing Award für seine Arbeit an APL.

Entwicklung zu einer Computerprogrammiersprache

Bereits 1962 wurde der erste Versuch unternommen, die Notation zur Beschreibung eines kompletten Computersystems zu verwenden, nachdem Falkoff mit William C. Carter seine Arbeit zur Standardisierung des Befehlssatzes für die Maschinen diskutiert hatte, die später zur IBM System/360- Familie wurden.

1963 implementierte Herbert Hellerman, der am IBM Systems Research Institute arbeitete, einen Teil der Notation auf einem IBM 1620- Computer und wurde von Schülern in einem speziellen High-School-Kurs zur Berechnung transzendenter Funktionen durch Reihensummierung verwendet. Studenten testeten ihren Code in Hellermans Labor. Diese Implementierung eines Teils der Notation wurde als Personalized Array Translator (PAT) bezeichnet.

Im Jahr 1963 Falkoff, Iverson und Edward H. Sussenguth Jr. , alle Arbeiten bei IBM, verwendet , um die Notation für eine formale Beschreibung der IBM System / 360 - Serie Maschine Architektur und Funktionalität, die in einem Papier führten veröffentlicht in IBM System Journal in 1964. Nach der Veröffentlichung wandte sich das Team einer Implementierung der Notation auf einem Computersystem zu. Einer der Beweggründe für diesen Schwerpunkt der Implementierung war das Interesse von John L. Lawrence, der neue Aufgaben bei Science Research Associates hatte , einem 1964 von IBM gekauften Bildungsunternehmen. Lawrence bat Iverson und seine Gruppe, die Sprache als Werkzeug zu verwenden, um Computer im Bildungsbereich entwickeln und einsetzen.

Nachdem Lawrence M. Breed und Philip S. Abrams von der Stanford University dem Team von IBM Research beigetreten waren, setzten sie ihre bisherige Arbeit an einer in FORTRAN IV programmierten Implementierung für einen Teil der Notation fort, die für den IBM 7090- Computer auf dem IBSYS- Betriebssystem. Diese Arbeit wurde Ende 1965 abgeschlossen und später IVSYS (für Iverson-System) genannt. Die Grundlage dieser Implementierung wurde 1966 von Abrams in einem Technischen Bericht der Stanford University "An Interpreter for Iverson Notation" ausführlich beschrieben, der akademische Aspekt wurde formal von Niklaus Wirth betreut . Wie das frühere PAT-System von Hellerman enthielt diese Implementierung nicht den APL-Zeichensatz, sondern verwendete spezielle englische reservierte Wörter für Funktionen und Operatoren. Das System wurde später für ein Timesharing- System angepasst und bis November 1966 für den IBM System/360 Model 50 Computer umprogrammiert, der im Timesharing-Modus läuft und intern bei IBM verwendet wurde.

Hardware

IBM Typeballs und Typewheel mit griechischen APL-Zeichen.
Die Sicht eines Programmierers auf das Tastaturlayout IBM 2741 mit dem eingesetzten APL-Schreibelement-Druckkopf

Eine wichtige Entwicklung in der Fähigkeit, APL effektiv zu verwenden, war vor der breiten Verwendung von Kathodenstrahlröhren- Terminals ( CRT ) die Entwicklung eines speziellen austauschbaren Schreibelements der IBM Selectric-Schreibmaschine mit all den speziellen APL-Zeichen darauf. Dies wurde auf Papierdruckterminal-Workstations verwendet, die den Selectric-Schreibmaschinen- und Schreibelement-Mechanismus verwenden, wie zum Beispiel das IBM 1050- und das IBM 2741- Terminal. Tastenkappen könnten über den normalen Tasten platziert werden, um anzuzeigen, welche APL-Zeichen eingegeben und getippt werden, wenn diese Taste gedrückt wird. Zum ersten Mal konnte ein Programmierer die richtigen APL-Zeichen, wie sie in Iversons Notation verwendet werden, eintippen und sehen, ohne umständliche englische Schlüsselwortdarstellungen verwenden zu müssen. Falkoff und Iverson ließen Ende 1964 die speziellen APL Selectric-Schreibelemente 987 und 988 entwerfen, obwohl kein APL-Computersystem zur Verfügung stand, um sie zu verwenden. Iverson nannte Falkoff als Inspiration für die Idee, ein IBM Selectric-Schreibelement für den APL-Zeichensatz zu verwenden.

Viele APL-Symbole, sogar mit den APL-Zeichen auf dem Selectric-Eingabeelement, mussten noch durch Überstreichen zweier vorhandener Elementzeichen eingegeben werden. Ein Beispiel ist das Aufwertungszeichen , das aus einem Delta (Shift-H) und einem Sheffer-Strich (Shift-M) gebildet werden musste. Dies war notwendig, da der APL-Zeichensatz viel größer war als die 88 zulässigen Zeichen des Typing-Elements, selbst wenn die Buchstaben auf Großbuchstaben (Großbuchstaben) beschränkt waren.

Kommerzielle Verfügbarkeit

Die erste interaktive APL-Anmeldung und Erstellung eines APL-Arbeitsbereichs wurde 1966 von Larry Breed mit einem IBM 1050-Terminal in den IBM Mohansic Labs in der Nähe des Thomas J. Watson Research Center , der Heimat von APL, in Yorktown Heights, New York, durchgeführt .

IBM war hauptsächlich für die Markteinführung von APL verantwortlich. Die erste öffentlich verfügbare Version von APL wurde 1968 für die IBM 1130 veröffentlicht . IBM stellte APL\1130 kostenlos zur Verfügung, jedoch ohne Haftung oder Support. Es würde in nur 8k 16-Bit-Speicherwörtern laufen und eine dedizierte 1-Megabyte-Festplatte verwenden.

APL hat von Ende der 1960er bis Anfang der 1980er Jahre auf Mainframe-Timesharing-Systemen Fuß gefasst, zum Teil, weil es mehrere Benutzer auf Systemen mit niedrigeren Spezifikationen unterstützen würde, die keine Hardware für die dynamische Adressübersetzung hatten . Weitere Leistungsverbesserungen für ausgewählte IBM System/370 Mainframe-Systeme umfassten den APL Assist Microcode, bei dem eine gewisse Unterstützung für die APL-Ausführung in der Firmware des Prozessors enthalten war , im Gegensatz zu einer vollständigen Implementierung durch höherwertige Software. Etwas später, als Mitte bis Ende der 1980er Jahre endlich Hardware mit entsprechender Leistung verfügbar wurde, migrierten viele Benutzer ihre Anwendungen in die PC-Umgebung.

Frühe IBM APL-Interpreter für IBM 360- und IBM 370-Hardware implementierten ihr eigenes Multi-User-Management, anstatt sich auf die Host-Services zu verlassen, also waren sie ihre eigenen Timesharing-Systeme. Das erstmals 1966 bei IBM eingesetzte APL\360- System war ein Mehrbenutzer-Interpreter. Die Fähigkeit zur programmgesteuerten Kommunikation mit dem Betriebssystem für Informationen und das Setzen von Interpreter-Systemvariablen wurde durch spezielle privilegierte "I-Beam"-Funktionen erreicht, die sowohl monadische als auch dyadische Operationen verwenden.

Im Jahr 1973 veröffentlichte IBM APL.SV , eine Fortsetzung des gleichen Produkts, die jedoch gemeinsame Variablen als Mittel für den Zugriff auf Einrichtungen außerhalb des APL-Systems wie Betriebssystemdateien bot . Mitte der 1970er-Jahre wurde der IBM-Mainframe-Interpreter sogar für den Einsatz auf dem Desktop-Computer IBM 5100 angepasst , der über eine kleine CRT und eine APL-Tastatur verfügte, als die meisten anderen Kleincomputer der damaligen Zeit nur BASIC boten . In den 1980er Jahren erfreute sich das VSAPL- Programmprodukt einer breiten Verwendung bei Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP und CICS- Benutzern.

In den Jahren 1973-1974 leitete Patrick E. Hagerty die Implementierung des APL-Interpreters der University of Maryland für die 1100- Reihe der Großrechner der Serie UNIVAC 1100/2200 von Sperry . Zu dieser Zeit hatte Sperry nichts. 1974 wurde der Student Alan Stebbens mit der Durchführung einer internen Funktion beauftragt. Xerox APL war ab Juni 1975 für Xerox 560 und Sigma 6, 7 und 9 Mainframes mit CP-V und für Honeywell CP-6 verfügbar .

In den 1960er und 1970er Jahren entstanden mehrere Timesharing-Firmen, die APL-Dienste mit modifizierten Versionen des IBM APL\360-Interpreters verkauften. In Nordamerika waren die bekannteren Unternehmen IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) und The Computer Company (TCC). CompuServe trat 1978 auch mit einem APL-Interpreter auf den Markt, der auf einer modifizierten Version von Digital Equipment Corp und Carnegie Mellons basiert und auf den KI- und KL-36-Bit-Maschinen von DEC lief. Die APL von CompuServe stand sowohl dem kommerziellen Markt als auch dem Verbraucherinformationsdienst zur Verfügung. Mit dem Aufkommen weniger teurer Mainframes wie dem IBM 4300 und später des Personalcomputers Mitte der 1980er Jahre war die Timesharing-Industrie so gut wie verschwunden.

Sharp APL war von verfügbaren IP Sharp Associates , zunächst als Time - Sharing - Dienst in den 1960er Jahren und später als ein Programmprodukt um 1979 beginnend Sharp APL war eine erweiterte APL Implementierung mit vielen Spracherweiterungen, wie Pakete (die Fähigkeit, zu setzen oder mehrere Objekte in eine einzelne Variable), Dateisystem, verschachtelte Arrays und gemeinsam genutzte Variablen .

APL-Interpreter waren auch von anderen Großrechner- und Minicomputerherstellern erhältlich, insbesondere Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens AG , Xerox und anderen .

Garth Foster von der Syracuse University sponserte regelmäßige Treffen der APL-Implementierer-Community im Minnowbrook Conference Center von Syracuse in Blue Mountain Lake, New York . In späteren Jahren organisierte Eugene McDonnell ähnliche Treffen auf dem Asilomar Conference Grounds in der Nähe von Monterey, Kalifornien, und in den Pajaro Dunes in der Nähe von Watsonville, Kalifornien. Die SIGAPL Special Interest Group der Association for Computing Machinery unterstützt weiterhin die APL-Community.

Mikrocomputer

Auf Mikrocomputern, die ab Mitte der 1970er Jahre verfügbar wurden, wurde BASIC zur dominierenden Programmiersprache. Nichtsdestotrotz boten einige Mikrocomputer stattdessen APL - der erste war der auf Intel 8008 basierende MCM/70, der 1974 veröffentlicht wurde und hauptsächlich im Bildungsbereich verwendet wurde. Eine andere Maschine dieser Zeit war der 1977 veröffentlichte VideoBrain Family Computer , der mit seinem APL-Dialekt namens APL/S geliefert wurde.

Der 1981 eingeführte Commodore SuperPET enthielt einen von der University of Waterloo entwickelten APL-Interpreter .

1976 behauptete Bill Gates in seinem Offenen Brief an Hobbyisten, dass die Microsoft Corporation APL für den Intel 8080 und das Motorola 6800 implementierte, aber wegen der Softwarepiraterie „sehr wenig Anreiz hatte, [es] Hobbyisten zur Verfügung zu stellen“ . Es wurde nie veröffentlicht.

APL2

Beginnend in den frühen 1980er Jahren implementierte die IBM APL-Entwicklung unter der Leitung von Jim Brown eine neue Version der APL-Sprache, die als primäre Erweiterung das Konzept der verschachtelten Arrays enthielt , bei denen ein Array andere Arrays enthalten kann, und neue Sprachfunktionen, die erleichtert die Integration verschachtelter Arrays in den Programm-Workflow. Ken Iverson, der die Entwicklung der APL-Sprache nicht mehr unter Kontrolle hatte, verließ IBM und wechselte zu IP Sharp Associates , wo einer seiner wichtigsten Beiträge darin bestand, die Entwicklung von Sharp APL so zu gestalten, dass sie seiner Vision besser entspricht.

Da andere Anbieter damit beschäftigt waren, APL-Interpreter für neue Hardware zu entwickeln, insbesondere für Unix- basierte Mikrocomputer , war APL2 fast immer der Standard, der für neue APL-Interpreter-Entwicklungen gewählt wurde. Noch heute nennen die meisten APL-Anbieter oder ihre Benutzer die APL2-Kompatibilität als Verkaufsargument für diese Produkte.

APL2 für IBM Großrechner ist weiterhin verfügbar. IBM nennt seine Verwendung für Problemlösung, Systemdesign, Prototyping, technische und wissenschaftliche Berechnungen, Expertensysteme, für den Mathematikunterricht und andere Fächer, Visualisierung und Datenbankzugriff und war erstmals 1984 für CMS und TSO verfügbar . Die APL2 Workstation Edition (Windows, OS/2 , AIX , Linux und Solaris ) folgten viel später in den frühen 1990er Jahren.

Moderne Implementierungen

Verschiedene Implementierungen von APL von APLX, Dyalog et al. umfassen Erweiterungen für die objektorientierte Programmierung , Unterstützung für .NET Framework , XML-Array-Konvertierungsprimitive, Grafik, Betriebssystemschnittstellen und Lambda-Kalkül- Ausdrücke.

Abgeleitete Sprachen

APL hat die Grundlage für die folgenden Sprachen gebildet oder diese beeinflusst:

  • A und A+ , eine alternative APL, letztere mit grafischen Erweiterungen.
  • FP , eine funktionale Programmiersprache.
  • Ivy, ein Interpreter für eine APL-ähnliche Sprache, die von Rob Pike entwickelt wurde und ASCII als Eingabe verwendet.
  • J , das ebenfalls von Iverson entworfen wurde und ASCII mit Digraphen anstelle von Sonderzeichen verwendet.
  • K , eine proprietäre Variante von APL, entwickelt von Arthur Whitney.
  • LYaPAS , eine sowjetische Erweiterung von APL.
  • MATLAB , ein numerisches Berechnungstool.
  • Nial , eine High-Level-Array-Programmiersprache mit einer funktionalen Programmiernotation.
  • Polymorphic Programming Language , eine interaktive, erweiterbare Sprache mit einer ähnlichen Basissprache.
  • S , eine statistische Programmiersprache (normalerweise jetzt in der Open-Source-Version bekannt als R ).
  • Speakeasy , eine interaktive numerische Computerumgebung.
  • Wolfram Language , die Programmiersprache von Mathematica .

Sprachmerkmale

Zeichensatz

APL wurde für seine Wahl eines einzigartigen, nicht standardmäßigen Zeichensatzes sowohl kritisiert als auch gelobt. Einige, die es lernen, werden zu glühenden Anhängern, was darauf hindeutet, dass Iversons Idee, dass die verwendete Notation einen Unterschied macht, ein gewisses Gewicht hat. In den 1960er und 1970er Jahren konnten nur wenige Endgeräte und sogar Bildschirme den APL-Zeichensatz reproduzieren. Die gängigsten verwendeten den IBM Selectric- Druckmechanismus, der mit einem speziellen APL-Element verwendet wurde. Eines der frühen APL- Leitungsterminals (nur im Zeilenmodus , nicht im Vollbildmodus) war das Texas Instruments TI Modell 745 (ca. 1977) mit dem vollständigen APL-Zeichensatz, der Halb- und Vollduplex- Telekommunikationsmodi für die Interaktion mit einer APL- Zeit bot -sharing- Dienst oder Remote-Mainframe, um einen Remote-Computerjob auszuführen, der als RJE bezeichnet wird .

Im Laufe der Zeit wurde durch den universellen Einsatz hochwertiger Grafikdisplays, Druckgeräte und Unicode- Unterstützung das Problem der APL-Schriftarten weitgehend beseitigt. Die Eingabe von APL-Zeichen erfordert jedoch die Verwendung von Eingabemethoden-Editoren , Tastaturzuordnungen, virtuellen/Bildschirm-APL-Symbolsätzen oder leicht referenzierbaren gedruckten Tastaturkarten, die Anfänger, die an andere Programmiersprachen gewöhnt sind, frustrieren können. Bei Anfängern, die noch keine Erfahrung mit anderen Programmiersprachen haben, ergab eine Studie mit Gymnasiasten, dass das Tippen und Verwenden von APL-Zeichen die Schüler in keiner messbaren Weise behinderte.

Zur Verteidigung der APL-Nutzung erfordert APL weniger Codierung zum Eintippen, und Tastaturzuordnungen werden im Laufe der Zeit gespeichert. Außerdem werden spezielle APL-Tastaturen hergestellt und heute verwendet, ebenso wie frei verfügbare herunterladbare Schriftarten für Betriebssysteme wie Microsoft Windows. Die berichteten Produktivitätsgewinne gehen davon aus, dass man genug Zeit damit verbringen wird, mit APL zu arbeiten, damit es sich lohnt, sich die Symbole, ihre Semantik und Tastaturzuordnungen zu merken, ganz zu schweigen von einer beträchtlichen Anzahl von Redewendungen für allgemeine Aufgaben.

Entwurf

Im Gegensatz zu traditionell strukturierten Programmiersprachen ist APL-Code typischerweise als Ketten von monadischen oder dyadischen Funktionen und Operatoren strukturiert , die auf Arrays wirken . APL hat viele nicht standardmäßige Primitive (Funktionen und Operatoren), die durch ein einzelnes Symbol oder eine Kombination einiger weniger Symbole angezeigt werden. Alle Primitive sind so definiert, dass sie die gleiche Priorität haben und immer rechts zugeordnet sind. Somit wird APL von rechts nach links gelesen oder am besten verstanden .

Frühe APL - Implementierungen (circa 1970 oder so) hatten keine Programmierung loop- Strömungssteuerstrukturen wie dooder whileSchleifen und if-then-elseKonstrukte. Stattdessen verwendeten sie Array-Operationen, und die Verwendung von strukturierten Programmierkonstrukten war oft nicht erforderlich, da eine Operation auf einem vollständigen Array in einer Anweisung ausgeführt werden konnte. Zum Beispiel ist die iotaFunktion ( ιkönnen) for-Schleife ersetzen Iteration : ιN wenn sie auf eine skalare positive ganze Zahl ergibt ein eindimensionales Array (Vektor) aufgetragen, 1 2 3 ... N. Neuere Implementierungen von APL beinhalten im Allgemeinen umfassende Steuerstrukturen , so dass Datenstruktur und Programmkontrollfluss klar und sauber getrennt werden können.

Die APL-Umgebung wird als Arbeitsbereich bezeichnet . In einem Arbeitsbereich kann der Benutzer Programme und Daten definieren, dh die Datenwerte existieren auch außerhalb der Programme, und der Benutzer kann die Daten auch manipulieren, ohne ein Programm definieren zu müssen. In den folgenden Beispielen gibt der APL-Interpreter zunächst sechs Leerzeichen ein, bevor er auf die Eingabe des Benutzers wartet. Die eigene Ausgabe beginnt in Spalte eins.

      n  4 5 6 7
Weist den Vektor von Werten {4 5 6 7} der Variablen zu n, eine Array-Erstellungsoperation. Ein äquivalenter, aber noch prägnanterer APL-Ausdruck wäre . Mehrere Werte werden in Array gespeichert , die Operation wird ohne formale Schleifen oder Kontrollflusssprache ausgeführt . n 3 + 4n
      n 
4 5 6 7
Zeigen Sie den Inhalt von an n, derzeit ein Array oder Vektor.
      n+4
8 9 10 11
4 wird nun zu allen Elementen von vector addiert n, wodurch ein 4-Element-Vektor {8 9 10 11} entsteht.
Wie oben zeigt der Interpreter von APL das Ergebnis an, da der Wert des Ausdrucks keiner Variablen (mit einem ) zugewiesen wurde .
      +/n
22
APL zeigt die Summe der Komponenten des Vektors an n, dh in 22 (= 4 + 5 + 6 + 7)einer sehr kompakten Schreibweise: Lesen Sie +/ als "plus, over..." und eine geringfügige Änderung wäre "multiply, over..."
      m  +/3+⍳4
      m
22
Diese Operationen können in einer Anweisung kombiniert werden, wobei zu beachten ist, dass APL Ausdrücke von rechts nach links auswertet: zuerst ein Array erstellt, dann 3 zu jeder Komponente hinzugefügt, die summiert und das Ergebnis in der Variablen gespeichert und schließlich angezeigt wird. 4[1,2,3,4]m

In normaler mathematischer Schreibweise ist es äquivalent zu: . Denken Sie daran, dass mathematische Ausdrücke nicht von rechts nach links gelesen oder ausgewertet werden.

Der Benutzer kann den Arbeitsbereich mit allen Werten, Programmen und Ausführungsstatus speichern.

APL verwendet eine Reihe von Nicht- ASCII- Symbolen, die eine Erweiterung der traditionellen arithmetischen und algebraischen Notation sind. Die Verwendung einzelner Zeichennamen für einzelne Anweisungen, Mehrfachdaten ( SIMD ) - Vektorfunktionen ist eine Möglichkeit, mit der APL eine kompakte Formulierung von Algorithmen für die Datentransformation ermöglicht, wie beispielsweise die Berechnung von Conways Game of Life in einer Codezeile. In fast allen APL-Versionen ist es theoretisch möglich, jede berechenbare Funktion in einem Ausdruck, dh in einer Codezeile, auszudrücken.

Wegen des ungewöhnlichen Zeichensatzes verwenden viele Programmierer spezielle Tastaturen mit APL-Tastenoberteilen, um APL-Code zu schreiben. Obwohl es verschiedene Möglichkeiten gibt, APL-Code nur mit ASCII-Zeichen zu schreiben, wird dies in der Praxis fast nie getan. (Man könnte meinen, dass dies Iversons These über Notation als Denkwerkzeug unterstützt .) Die meisten, wenn nicht alle modernen Implementierungen verwenden Standard-Tastaturlayouts mit speziellen Zuordnungen oder Eingabemethoden-Editoren, um auf Nicht-ASCII-Zeichen zuzugreifen. In der Vergangenheit war die APL-Schrift mit kursiven Großbuchstaben und aufrechten Ziffern und Symbolen unverwechselbar. Die meisten Anbieter zeigen den APL-Zeichensatz weiterhin in einer benutzerdefinierten Schriftart an.

Befürworter von APL behaupten, dass die Beispiele für so genannten Nur - Schreib-Code (schlecht geschriebener und fast unverständlicher Code) fast ausnahmslos Beispiele für schlechte Programmierpraxis oder Anfängerfehler sind, die in jeder Sprache vorkommen können. Befürworter behaupten auch, dass sie mit APL viel produktiver sind als mit konventionelleren Computersprachen und dass funktionierende Software in viel kürzerer Zeit und mit viel weniger Programmierern implementiert werden kann als mit anderen Technologien.

Sie können auch behaupten, dass APL sich aufgrund seiner Kompaktheit und Kürze gut für eine umfangreichere Softwareentwicklung und Komplexität eignet, da die Anzahl der Codezeilen stark reduziert werden kann. Viele APL-Befürworter und -Praktiker halten auch Standard-Programmiersprachen wie COBOL und Java für vergleichsweise mühsam. APL wird häufig dort gefunden, wo Time-to-Market wichtig ist, wie beispielsweise bei Handelssystemen.

Terminologie

APL unterscheidet klar zwischen Funktionen und Operatoren . Funktionen nehmen Arrays (Variablen oder Konstanten oder Ausdrücke) als Argumente und geben Arrays als Ergebnisse zurück. Operatoren (ähnlich wie Funktionen höherer Ordnung ) nehmen Funktionen oder Arrays als Argumente und leiten verwandte Funktionen ab. Die Summenfunktion wird beispielsweise abgeleitet, indem der Reduktionsoperator auf die Additionsfunktion angewendet wird. Durch Anwenden desselben Reduktionsoperators auf die Maximumfunktion (die die größere von zwei Zahlen zurückgibt) wird eine Funktion abgeleitet, die die größte einer Gruppe (Vektor) von Zahlen zurückgibt. In der J-Sprache ersetzte Iverson die Begriffe Verb für Funktion und Adverb oder Konjunktion für Operator .

APL identifiziert auch diejenigen Funktionen, die in die Sprache integriert sind und durch ein Symbol oder eine feste Kombination von Symbolen als Primitive dargestellt werden . Die meisten Primitive sind entweder Funktionen oder Operatoren. Das Codieren von APL ist weitgehend ein Prozess des Schreibens nicht-primitiver Funktionen und (in einigen Versionen von APL) Operatoren. Einige Primitive werden jedoch weder als Funktionen noch als Operatoren angesehen, vor allem als Zuweisung.

Einige Wörter, die in der APL-Literatur verwendet werden, haben eine andere Bedeutung als in der Mathematik und der Allgemeinheit der Informatik.

Terminologie der APL-Betreiber
Begriff Beschreibung
Funktion Operation oder Zuordnung, die null, ein (rechts) oder zwei (links und rechts) Argumente akzeptiert, die Skalare, Arrays oder kompliziertere Strukturen sein können und ein ähnlich komplexes Ergebnis zurückgeben können. Eine Funktion kann sein:
  • Primitive: integriert und durch eine einzelne Glyphe dargestellt;
  • Definiert: als benannte und geordnete Sammlung von Programmanweisungen;
  • Abgeleitet: als Kombination eines Operators mit seinen Argumenten.
Array datenbewertetes Objekt von null oder mehr orthogonalen Dimensionen in Zeilen-Major- Reihenfolge, wobei jedes Element ein primitives skalares Datum oder ein anderes Array ist.
niladic keine Argumente annehmen oder verlangen, nullary
monadisch erfordert nur ein Argument; rechts für eine Funktion, links für einen Operator, unär
dyadisch erfordert sowohl ein linkes als auch ein rechtes Argument, binär
ambivalent oder monadisch in einem monadischen oder dyadischen Kontext verwendbar, wodurch das linke Argument eliminiert werden kann
Operator Operation oder Zuordnung, die eine (links) oder zwei (links und rechts) Funktion oder Array-Wert-Argumente (Operanden) nimmt und eine Funktion ableitet. Ein Operator kann sein:
  • Primitive: integriert und durch eine einzelne Glyphe dargestellt;
  • Definiert: als benannte und geordnete Sammlung von Programmanweisungen.

Syntax

APL verfügt über explizite Darstellungen von Funktionen, Operatoren und Syntax und bietet somit eine Grundlage für die klare und explizite Angabe erweiterter Funktionen in der Sprache und Tools zum Experimentieren mit ihnen.

Beispiele

Hallo Welt

Dies zeigt " Hallo Welt " an:

'Hello, world'

Ein Designthema in APL besteht darin, in einigen Fällen Standardaktionen zu definieren, die in den meisten anderen Programmiersprachen zu Syntaxfehlern führen würden.

Die obige String-Konstante 'Hello, world' wird angezeigt, da display die Standardaktion für jeden Ausdruck ist, für den keine Aktion explizit angegeben ist (zB Zuweisung, Funktionsparameter).

Potenzierung

Ein weiteres Beispiel für dieses Thema ist, dass die Exponentiation in APL als " 2*3" geschrieben wird, was anzeigt, dass 2 hoch 3 potenziert wird (dies würde 2^3in einigen anderen Sprachen als " 2**3" und in FORTRAN und Python geschrieben werden): Viele Sprachen verwenden * to bedeutet Multiplikation wie in 2*3, aber APL verwendet 2×3dafür. Wenn jedoch keine Basis angegeben wird (wie bei der Anweisung " *3" in APL oder " ^3" in anderen Sprachen), würde man in den meisten anderen Programmiersprachen einen Syntaxfehler haben. APL nimmt jedoch an, dass die fehlende Basis die natürliche Logarithmuskonstante e (2.71828....) ist und interpretiert " *3" als " 2.71828*3".

Einfache Statistiken

Angenommen, das Xist ein Array von Zahlen. Dann (+/X)÷⍴Xgibt seinen Durchschnitt. Lesen von rechts nach links , ⍴Xgibt die Anzahl der Elemente in X, und da ÷ein dyadischen Operator ist, wird der Begriff auf der linken als auch erforderlich. Es steht in Klammern, da sonst X genommen würde (so dass die Summation X÷⍴Xvon jedem Element von X dividiert durch die Anzahl der Elemente in X wäre) und +/Xalle Elemente von X addiert. Darauf aufbauend wird die Standardabweichung berechnet . Da die Zuweisung ein Operator ist, kann sie außerdem in einem Ausdruck vorkommen, also ((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5

SD((+/((X - AV(T+/X)÷⍴X)*2))÷⍴X)*0.5

würde geeignete Werte in T, AV und SD setzen. Natürlich würde man diesen Ausdruck in eine Funktion für die wiederholte Verwendung umwandeln, anstatt ihn jedes Mal neu einzugeben.

Wähle 6 Lottozahlen

Dieser folgende Ausdruck im Direktmodus generiert einen typischen Satz von Pick 6- Lotteriezahlen : sechs pseudozufällige Ganzzahlen im Bereich von 1 bis 40, garantiert nicht wiederholend und zeigt sie in aufsteigender Reihenfolge an:

x[x6?40]

Das oben Genannte macht eine Menge, kurz gesagt, obwohl es einem neuen APLer komplex erscheinen mag . Es kombiniert die folgenden APL- Funktionen (auch Primitive und Glyphen genannt ):

  • Die erste auszuführende (APL wird von ganz rechts nach ganz links ausgeführt) ist eine dyadische Funktion ?(benannt, dealwenn dyadisch), die einen Vektor zurückgibt , der aus einer ausgewählten Zahl (linkes Argument: 6 in diesem Fall) von zufälligen ganzen Zahlen im Bereich von 1 bis zu einem angegebenen Maximum besteht ( rechtes Argument: 40 in diesem Fall), das, wenn die maximale -Vektorlänge garantiert ist, sich nicht wiederholt; Generieren/erstellen Sie also 6 zufällige ganze Zahlen im Bereich von 1-40.
  • Dieser Vektor wird dann der Variablen zugewiesen ( ) x, da er später benötigt wird.
  • Dieser Vektor wird dann in aufsteigender Reihenfolge nach einer monadischen Funktion sortiert , deren rechtes Argument alles rechts davon bis zur nächsten unausgeglichenen Klammer oder Klammer hat. Das Ergebnis von sind die Indizes, die das Argument in aufsteigender Reihenfolge anordnen.
  • Dann wird die Ausgabe von verwendet, um die Variable zu indizieren x, die wir zuvor zu diesem Zweck gespeichert haben, und wählt so ihre Elemente in aufsteigender Reihenfolge aus.

Da sich links vom ganz linken x keine Funktion befindet, die APL mitteilt, was mit dem Ergebnis zu tun ist, gibt es es einfach auf dem Display aus (in einer einzigen Zeile, durch Leerzeichen getrennt), ohne dass dazu eine explizite Anweisung erforderlich ist.

?hat auch ein monadisches Äquivalent namens roll, das einfach eine zufällige ganze Zahl zwischen 1 und seinem einzigen Operanden [rechts davon] (einschließlich) zurückgibt. So könnte ein Rollenspielprogramm den Ausdruck verwenden, ?20um einen zwanzigseitigen Würfel zu würfeln.

Primzahlen

Der folgende Ausdruck findet alle Primzahlen von 1 bis R. Sowohl in der Zeit als auch im Raum ist die Berechnungskomplexität (in Big-O-Notation ).

(~RR∘.×R)/R1↓⍳R

Von rechts nach links ausgeführt bedeutet dies:

  • Iota erzeugt einen Vektor enthält ganze Zahlen von1bisR(wennR= 6zu Beginn des Programms⍳Rist1 2 3 4 5 6)
  • Löschen Sie das erste Element dieses Vektors ( Funktion), dh 1. So 1↓⍳Rist2 3 4 5 6
  • Auf R den neuen Vektor ( , Zuweisungsprimitiv ) setzen, d.2 3 4 5 6
  • Der / Replikatoperator ist dyadisch (binär) und der Interpreter wertet zuerst sein linkes Argument aus (vollständig in Klammern):
  • Erzeuge das äußere Produkt von Rmultipliziert mit R, dh eine Matrix, die die Multiplikationstabelle von R mit R ( °.×Operator) ist, dh
4 6 8 10 12
6 9 12 fünfzehn 18
8 12 16 20 24
10 fünfzehn 20 25 30
12 18 24 30 36
  • Bilden Sie einen Vektor der gleichen Länge wie Rmit 1an jeder Stelle, an der die entsprechende Zahl in Rder äußeren Produktmatrix ( , Mengeneinschluss oder Element von oder Epsilon- Operator) steht, dh0 0 1 0 1
  • Logischer Negieren ( nicht ) Werte in dem Vektor (ändern Nullen zu Einsen und Einsen zu Nullen) ( logischer nicht oder Tilde Operator), dh1 1 0 1 0
  • Wählen Sie die Elemente aus, in Rdenen das entsprechende Element ist 1( / Replikationsoperator ), dh2 3 5

(Beachten Sie , übernimmt dies die APL Ursprungs 1 ist, das heißt, Indizes beginnen mit 1. APL eingestellt werden kann 0 als Ursprung zu verwenden, so dass ι6ist 0 1 2 3 4 5, was für manche Berechnungen bequem ist.)

Sortierung

Der folgende Ausdruck sortiert eine in Matrix X gespeicherte Wortliste nach Wortlänge:

X[X+.' ';]

Spiel des Lebens

Die folgende Funktion "life", geschrieben in Dyalog APL, nimmt eine boolesche Matrix und berechnet die neue Generation nach Conways Game of Life . Es demonstriert die Leistungsfähigkeit von APL, einen komplexen Algorithmus in sehr wenig Code zu implementieren, aber es ist auch sehr schwer zu folgen, wenn man nicht über fortgeschrittene Kenntnisse von APL verfügt.

life{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

Entfernen von HTML-Tags

Im folgenden Beispiel, ebenfalls Dyalog, weist die erste Zeile einer Variablen etwas HTML-Code zu txtund verwendet dann einen APL-Ausdruck, um alle HTML-Tags zu entfernen ( Erklärung ):

      txt'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'
      { /⍨ ~{∨≠\}'<>'} txt
This is emphasized text.

Benennung

APL leitet seinen Namen von den Initialen von Iversons Buch A Programming Language ab , obwohl das Buch die mathematische Notation von Iverson und nicht die in diesem Artikel beschriebene implementierte Programmiersprache beschreibt. Der Name wird nur für tatsächliche Implementierungen verwendet, beginnend mit APL\360 .

Adin Falkoff prägte den Namen 1966 während der Implementierung von APL\360 bei IBM :

Als ich an dem Büro vorbeiging, das sich die drei Studenten teilten, konnte ich die Geräusche eines Streits hören. Ich steckte meinen Kopf in die Tür und Eric fragte mich: "Ist es nicht wahr, dass jeder weiß, dass die Notation, die wir verwenden, APL heißt?" Es tat mir leid, ihn enttäuschen zu müssen, indem ich gestand, dass ich noch nie gehört hatte, dass es so genannt wurde. Woher hatte er die Idee, dass es bekannt war? Und wer hatte beschlossen, es so zu nennen? Warum musste es überhaupt so heißen? "Eine ganze Weile später hörte ich, wie es benannt wurde. Als die Implementierungsarbeiten im Juni 1966 begannen, begannen auch die Dokumentationsarbeiten. Ich nehme an, als sie über "es" schreiben mussten, haben Falkoff und Iverson gemerkt, dass sie es tun mussten Geben Sie "it" einen Namen. Es gab damals wahrscheinlich viele Vorschläge, aber ich habe nur von zwei gehört. Eine Gruppe in SRA in Chicago, die Lehrmaterialien unter Verwendung der Notation entwickelte, sprach sich für den Namen "Mathlab" aus. Dies hat sich nicht durchgesetzt.Ein anderer Vorschlag war, es "Iversons Better Math" zu nennen und dann die Leute das entsprechende Akronym prägen zu lassen. Dies wurde als Scherz angesehen.

Dann kam eines Tages Adin Falkoff in Kens Büro und schrieb "A Programming Language" an die Tafel und darunter das Akronym "APL". So wurde es geboren. Ungefähr eine Woche später stellte mir Eric Iverson seine Frage, zu einer Zeit, als der Name den Weg über den Taconic Parkway von IBM Research zu IBM Mohansic noch nicht gefunden hatte.

APL wird gelegentlich als Array Programming Language oder Array Processing Language neu interpretiert , wodurch APL zu einem Backronym wird .

Konferenz-Laptoptasche der British APL Association (BAPLA).

Kooperationen zwischen APL-Händlern gab es schon immer, von 1969 bis 2010 fanden regelmäßig gemeinsame Konferenzen statt. Auf solchen Konferenzen wurden oft APL- Merchandise mit APL-Motiven oder einer Sammlung von Herstellerlogos verteilt. Häufig waren Äpfel (als Wortspiel mit der Ähnlichkeit in der Aussprache von Apfel und APL ) und das Code-Snippet, das die Symbole sind, die vom klassischen APL-Tastaturlayout erzeugt werden, wenn die APL- Modifikatortaste gedrückt und "APL" eingegeben wird . *

Trotz all dieser Bemühungen der Community entstand kein universelles, herstellerunabhängiges Logo für die Programmiersprache. Da populäre Programmiersprachen zunehmend wiedererkennbare Logos etabliert haben und Fortran im Jahr 2020 eines erhält, startete die British APL Association in der zweiten Hälfte des Jahres 2021 eine Kampagne, um ein solches Logo für APL zu etablieren.

Verwenden

APL wird für viele Zwecke verwendet, darunter Finanz- und Versicherungsanwendungen , künstliche Intelligenz , neuronale Netze und Robotik . Es wurde argumentiert, dass APL ein Berechnungswerkzeug und keine Programmiersprache ist; Sein symbolischer Charakter und seine Array-Fähigkeiten haben es bei Domänenexperten und Datenwissenschaftlern beliebt gemacht , die nicht die Fähigkeiten eines Computerprogrammierers haben oder benötigen .

APL ist gut geeignet für Bildmanipulation und Computeranimation , wo grafische Transformationen als Matrixmultiplikationen kodiert werden können. Eines der ersten kommerziellen Computergrafik-Häuser, Digital Effects , produzierte ein APL-Grafikprodukt namens Visions , das verwendet wurde, um Fernsehwerbespots und Animationen für den Film Tron von 1982 zu erstellen . Neuerdings wird die Sturmwind Boots simulator APL verwendet seine Kernlogik zu implementieren, dessen Anbindung an die Rendering - Pipeline - Middleware und ein Großteil seiner Physik - Engine .

Heute wird APL in einer Vielzahl von kommerziellen und wissenschaftlichen Anwendungen verwendet, beispielsweise in der Anlageverwaltung , im Vermögensmanagement , im Gesundheitswesen und bei der DNA-Profilerstellung sowie bei Hobbyisten.

Bemerkenswerte Implementierungen

APL\360

Die erste Implementierung von APL, die erkennbare APL-Symbole verwendet, war APL\360, das auf dem IBM System/360 lief und im November 1966 fertiggestellt wurde, obwohl es zu dieser Zeit nur innerhalb von IBM verwendet wurde. 1973 erhielten seine Implementierer, Larry Breed , Dick Lathwell und Roger Moore , den Grace Murray Hopper Award der Association for Computing Machinery (ACM). Er wurde "für ihre Arbeit beim Design und der Implementierung von APL\360 verliehen, die neue Maßstäbe in Bezug auf Einfachheit, Effizienz, Zuverlässigkeit und Reaktionszeit für interaktive Systeme setzt".

1975 bot der Mikrocomputer IBM 5100 APL\360 als eine von zwei integrierten ROM-basierten interpretierten Sprachen für den Computer an, komplett mit Tastatur und Display, die alle in der Sprache verwendeten Sonderzeichen unterstützten.

Zu den wesentlichen Entwicklungen von APL\360 gehörten CMS/APL, das die virtuellen Speicherfähigkeiten von CMS nutzte, und APLSV, das gemeinsame Variablen , Systemvariablen und Systemfunktionen einführte. Es wurde anschließend bis zu seiner endgültigen Veröffentlichung im Jahr 1983 auf die Plattformen IBM System/370 und VSPC portiert, danach wurde es durch APL2 ersetzt.

APL\1130

1968 wurde APL\1130 das erste öffentlich verfügbare APL-System, das von IBM für die IBM 1130 entwickelt wurde . Es wurde die beliebteste IBM Type-III-Bibliothekssoftware , die von IBM veröffentlicht wurde.

APL*Plus und Sharp APL

APL*Plus und Sharp APL sind Versionen von APL\360 mit zusätzlichen geschäftsorientierten Erweiterungen wie Datenformatierung und Möglichkeiten zum Speichern von APL-Arrays in externen Dateien. Sie wurden gemeinsam von zwei Unternehmen entwickelt, die verschiedene Mitglieder des ursprünglichen IBM APL\360-Entwicklungsteams beschäftigten.

Die beiden Unternehmen waren IP Sharp Associates (IPSA), ein 1964 von Ian Sharp, Roger Moore und anderen gegründetes APL\360-Dienstleistungsunternehmen, und STSC , ein 1969 von Lawrence Breed und anderen gegründetes Timesharing- und Beratungsunternehmen. Gemeinsam entwickelten die beiden APL*Plus und arbeiteten danach weiter zusammen, entwickelten APL jedoch getrennt als APL*Plus und Sharp APL. STSC portierte APL*Plus auf viele Plattformen mit Versionen für VAX 11, PC und UNIX, während IPSA bei der Einführung des Personal Computers einen anderen Ansatz verfolgte und Sharp APL auf dieser Plattform mit zusätzlicher PC-XT/360- Hardware verfügbar machte . 1993 wurde Soliton Incorporated gegründet, um Sharp APL zu unterstützen, und entwickelte Sharp APL zu SAX (Sharp APL für Unix). Ab 2018 wird APL*Plus als APL2000 APL+Win weitergeführt.

1985 erhielten Ian Sharp und Dan Dyer von STSC gemeinsam den Kenneth E. Iverson Award für herausragenden Beitrag zur APL .

APL2

APL2 war eine bedeutende Neuimplementierung von APL von IBM, die ab 1971 entwickelt und 1984 erstmals veröffentlicht wurde. Es bietet viele Ergänzungen der Sprache, von denen die bemerkenswerteste die Unterstützung verschachtelter (nicht rechteckiger) Arrays ist. Ab 2018 ist es für Mainframe-Computer mit z/OS oder z/VM und Workstations mit AIX , Linux , Sun Solaris und Microsoft Windows verfügbar .

Das gesamte APL2 Products and Services Team wurde 2007 mit dem Iverson Award ausgezeichnet.

APLGOL

1972 wurde APLGOL als experimentelle Version von APL veröffentlicht, die dem Sprachframework strukturierte Programmiersprachenkonstrukte hinzufügte. Es wurden neue Anweisungen für die Interstatement-Steuerung, die bedingte Anweisungsausführung und die Anweisungsstrukturierung sowie Anweisungen hinzugefügt, um die Absicht des Algorithmus zu verdeutlichen. Es wurde 1977 für Hewlett-Packard implementiert.

Dyalog APL

Dyalog APL wurde erstmals 1983 von der britischen Firma Dyalog Ltd. veröffentlicht und ist ab 2018 für AIX- , Linux- (auch auf dem Raspberry Pi ), macOS und Microsoft Windows- Plattformen verfügbar. Es basiert auf APL2, mit Erweiterungen zur Unterstützung der objektorientierten Programmierung und der funktionalen Programmierung . Die Lizenzen sind für den persönlichen/nicht-kommerziellen Gebrauch kostenlos.

1995 wurden zwei des Entwicklungsteams - John Scholes und Peter Donnelly - für ihre Arbeit am Interpreter mit dem Iverson Award ausgezeichnet. Gitte Christensen und Morten Kromberg wurden 2016 gemeinsam mit dem Iverson Award ausgezeichnet.

NARS2000

NARS2000 ist ein Open-Source-APL-Interpreter, der von Bob Smith geschrieben wurde, einem bekannten APL-Entwickler und -Implementierer von STSC in den 1970er und 1980er Jahren. NARS2000 enthält erweiterte Funktionen und neue Datentypen und läuft nativ auf Microsoft Windows und anderen Plattformen unter Wine .

APLX

APLX ist ein plattformübergreifender Dialekt von APL, basierend auf APL2 und mit mehreren Erweiterungen, der erstmals 2002 von der britischen Firma MicroAPL veröffentlicht wurde. Obwohl er nicht mehr in Entwicklung oder im Handel erhältlich ist, ist er jetzt kostenlos bei Dyalog erhältlich.

GNU-APL

GNU APL ist eine freie Implementierung von Extended APL nach ISO/IEC 13751:2001 und somit eine Implementierung von APL2. Es läuft unter Linux (einschließlich auf dem Raspberry Pi), macOS, mehreren BSD-Dialekten und unter Windows (entweder mit Cygwin für die volle Unterstützung aller Systemfunktionen oder als native 64-Bit-Windows-Binärdatei, bei der einige Systemfunktionen fehlen). . GNU APL verwendet intern Unicode und kann geskriptet werden. Es wurde von Jürgen Sauermann geschrieben.

Richard Stallman , Gründer des GNU-Projekts , war einer der ersten Anwender von APL und benutzte es im Sommer 1969 als Gymnasiast, um einen Texteditor zu schreiben.

Interpretation und Zusammenstellung von APL

APL ist traditionell eine interpretierte Sprache mit Sprachmerkmalen wie schwacher Variablentypisierung, die für die Kompilierung nicht gut geeignet sind . Mit Arrays als Kerndatenstruktur bietet es jedoch Möglichkeiten für Leistungssteigerungen durch Parallelität , paralleles Computing , massiv parallele Anwendungen und sehr große Integration (VLSI), und von Anfang an wurde APL als Hochleistungssprache angesehen - zum Beispiel wurde es für die Geschwindigkeit bekannt, mit der es komplizierte Matrixoperationen ausführen konnte, "weil es auf Arrays operiert und Operationen wie die Matrixinversion intern ausführt".

Trotzdem wird APL selten rein interpretiert und Kompilierungs- oder Teilkompilierungstechniken, die verwendet werden oder verwendet wurden, umfassen Folgendes:

Idiomerkennung

Die meisten APL-Interpreter unterstützen die Idiomerkennung und werten gängige Idiome als einzelne Operationen aus. Beispielsweise wird durch die Auswertung des Idioms BV/⍳⍴Aals eine einzelne Operation (wobei BVein Boolescher Vektor und Aein Array ist) die Erzeugung von zwei Zwischenarrays vermieden.

Optimierter Bytecode

Eine schwache Typisierung in APL bedeutet, dass ein Name auf ein Array (jeden Datentyps), eine Funktion oder einen Operator verweisen kann. Im Allgemeinen kann der Interpreter nicht im Voraus wissen, welche Form er haben wird und muss daher zur Laufzeit eine Analyse, Syntaxprüfung usw. durchführen. Unter bestimmten Umständen ist es jedoch möglich, im Voraus abzuleiten, auf welchen Typ ein Name referenzieren soll, und dann Bytecode zu generieren , der mit reduziertem Laufzeit-Overhead ausgeführt werden kann. Dieser Bytecode kann auch mit Kompilierungstechniken wie Constant Folding oder Common Subexpression Elimination optimiert werden . Der Interpreter führt den Bytecode aus, wenn er vorhanden ist und alle getroffenen Annahmen erfüllt sind. Dyalog APL bietet Unterstützung für optimierten Bytecode.

Zusammenstellung

Die Kompilierung von APL war Gegenstand von Forschung und Experimenten, seit die Sprache zum ersten Mal verfügbar war; als erster Compiler gilt der um 1971 erschienene Burroughs APL-700. Um APL kompilieren zu können, müssen Sprachbeschränkungen auferlegt werden. APEX ist ein Forschungs-APL-Compiler, der von Robert Bernecky geschrieben wurde und unter der GNU Public License verfügbar ist .

Der STSC APL Compiler ist eine Mischung aus einem Bytecode-Optimierer und einem Compiler - er ermöglicht die Kompilierung von Funktionen in Maschinencode, vorausgesetzt, seine Unterfunktionen und Globals sind deklariert , aber der Interpreter wird weiterhin als Laufzeitbibliothek und zum Ausführen von Funktionen verwendet, die dies tun die Kompilierungsanforderungen nicht erfüllen.

Normen

APL wurde von der Arbeitsgruppe X3J10 des American National Standards Institute (ANSI) , der International Organization for Standardization (ISO) und der International Electrotechnical Commission (IEC), dem ISO/IEC Joint Technical Committee 1 Subcommittee 22 Working Group 3 standardisiert in ISO 8485:1989 spezifiziert, und die Extended APL-Sprache ist in ISO/IEC 13751:2001 spezifiziert.

Verweise

Weiterlesen

Video

Externe Links

Internetquellen

Anbieter

Nutzergruppen und Gesellschaften