APL gegen A gegen J gegen K?


78

Die Landschaft in Array-Sprache ist zwar faszinierend, aber bis zum Ende verwirrend. Gibt es einen Grund, sich für J oder K oder APL oder A zu entscheiden? Keine dieser Optionen scheint Open-Source zu sein - gibt es Open-Source-Versionen? Ich würde es lieben, meinen Geist zu erweitern, aber ich bleibe verwirrt.

Antworten:


134

Die Unterschiede zwischen diesen Sprachen sind relativ subtil. APL "richtig" hat die Vor- und Nachteile der ursprünglichen symbolischen Notation. (Im Laufe der Jahre wurden geringfügige Änderungen am Symbolsatz vorgenommen, die jedoch alle der ursprünglichen Vision entsprechen.)

Die Sprache A + ist Open Source verfügbar. Es weicht erheblich von den "klassischen" APLs ab, ist aber wie sie darin, den größten Teil des Kernzeichensatzes beizubehalten. Meiner Meinung nach wurde es nicht über technologische Änderungen auf dem Laufenden gehalten. Es war ein Vorläufer von K.

Zu den Sprachen in der Array-Sprachfamilie, die vom charakteristischen APL-Zeichensatz abgewichen sind, gehören J, K und Nial. Nial verwendet englische Wörter anstelle von Symbolen und verfügt über einen Open-Source-Interpreter namens Q'Nial. K und J basieren hauptsächlich auf Symbolen, diese werden jedoch aus dem ASCII-Zeichensatz gezogen. Wörter können jedoch anstelle von Symbolen in diesen Sprachen verwendet werden, indem einfach Definitionen zugewiesen werden.

Die APL-Familie von Programmiersprachen ist seit dem ersten Erscheinen von APL als IBM-Produkt im Jahr 1964 in erster Linie proprietär. Proprietäre Array-Sprachen scheinen derzeit mehr Unterstützung und schnellere Entwicklung neuer Funktionen zu bieten als Open-Source-Alternativen. Ich bin mir nicht sicher, wie sich alle Konkurrenten gegeneinander behaupten, aber Dyalog APL hat sicherlich aktiv daran gearbeitet, die Implementierung der Sprache als aktuelle Technologie voranzutreiben. APL2000 bietet Produkte für Unix, Linux und Windows an, einschließlich VisualAPL für .Net (im Ruhestand). MicroAPL Ltd bietet APLX (im Ruhestand) an.

K ist eine Fachsprache, die nicht mehr eigenständig vermarktet wird. Kx Systems vermarktet stattdessen die Kdb + -Datenbank und ihre Q-Sprache (Abfrage), die beide in K geschrieben sind. Es handelt sich um ein leistungsstarkes Spezialwerkzeug, das für die Hochgeschwindigkeitsverarbeitung von Streaming-Daten entwickelt wurde. Es weicht erheblich vom ursprünglichen APL-Ansatz ab. Kx Systems-Produkte sind teuer und ihre Benutzer arbeiten hauptsächlich im Finanzbereich.

APL wurde von Ken Iverson entworfen und hauptsächlich entworfen. Nach einer vollen Karriere als Anwender und Verfeinerer von APL in kommerziellen Anwendungen wandte er sich der Aufgabe zu, eine "rationalisierte" Überarbeitung vorzunehmen, die die Aspekte der Sprache korrigierte, mit denen er im Laufe der Jahre unzufrieden war. Diese neue Version des Themas heißt J. Die Unterschiede zwischen J und APL werden in einem Artikel im J-Software-Wiki skizziert. Eine bemerkenswerte Änderung ist die Eliminierung der Array-Indizierungssyntax. Das größte Merkmal ist jedoch die stillschweigende Form, in der Programme geschrieben werden, indem Funktionen ohne Bezugnahme auf ihre Argumente erstellt werden. Tacit J ist eng mit dem "punktfreien" Stil verwandt, der in funktionalen Programmiersprachen zu finden ist, unterscheidet sich jedoch darin, dass diese Form für die J-Sprache von grundlegender Bedeutung ist.

Für eine Person, die eine Array-Sprache lernen möchte, ist mein Rat, zwischen Dyalog APL, APLX, J und Q'Nial zu wählen. Dyalog APL (insbesondere für Windows) oder APLX (insbesondere für Linux) eignen sich wahrscheinlich am besten für jemanden, der die für APL so charakteristische Kernsymbolik verwenden möchte und eine starke Verbindung zur gesamten APL-Community wünscht. J eignet sich am besten für diejenigen, die Webanwendungen erstellen oder sich auf Mathematik konzentrieren möchten (wie Project Euler), und insbesondere für diejenigen, die von dem stillschweigenden Stil fasziniert sind, den es hervorhebt. Q'Nial ist das, was ich auswählen würde, wenn meine Priorität Open Source wäre, aber nur, wenn diese Priorität nicht auch bedeutet, die Unterstützung einer aktiven Betriebssystemgemeinschaft zu erwarten.


UPDATE: J 7.01 wurde mit Open Source Code unter GPL 3 veröffentlicht. Zusätzlich gibt es Kona , eine Variante von K. Diese erweitern die Optionen für Open-Source-Array-Sprachen.

UPDATE von Tobia: GNU APL ist unter der GPL verfügbar. Es folgt genau dem neuesten veröffentlichten ISO-Standard für die Extended APL-Sprache. Es ist eine großartige Open-Source-APL-Implementierung und wird aktiv entwickelt und gewartet. Es gibt auch andere interessante Implementierungen, zum Beispiel ngn / APL , eine überraschend gut funktionierende und moderne Implementierung von APL, die in CoffeeScript (das zu JavaScript kompiliert wird) geschrieben wurde. Array-Sprachen sind 2015 lebendig und gut.

UPDATE von Adám: Roger Hui , einer der Hauptimplementierer und Designer von J, ist seitdem zu Dyalog gekommen. Unter seiner Anleitung hat Dyalog APL viele von J inspirierte Funktionen hinzugefügt. Dies beinhaltet einen stillschweigenden funktionalen Programmierstil und mehrere Operatoren und Funktionen, von denen viele im Prozess verbessert wurden. Dyalog APL ist jetzt kostenlos für nichtkommerzielle Zwecke. Darüber hinaus sind mehrere neue APL-Implementierungen erschienen. siehe aplwiki.com . Array-Sprachen sind im Jahr 2020 lebendig und gut.


1
Manchmal reicht eine +1 nicht aus: Danke, kaleidisch!
Blinry

1
Kürzlich hat Dyalog auch eine Mac OSX-Version veröffentlicht - dyalog.com/dyalog/mac-os.htm
feuert vom

1
Wenn Sie eine andere Open-Source-APL möchten, funktioniert ngn-apl ebenfalls. Es gibt jedoch keine Tradfns (die in eingeschlossenen ).
Zacharý

12

Um weitere Informationen hinzuzufügen ...

Es ist eine Open - Source - Version Kgenannt Kona https://github.com/kevinlawler/kona

Für q/kdb+gibt es eine Testversion. http://kx.com/download/

Die Hauptbeschränkungen sind 2 Stunden Timeout, 32-Bit-Speicher, 3 Monate Lizenzablauf und die Lizenz selbst. Diese sollten nicht zu lästig sein, wenn Sie nur herumspielen und etwas lernen möchten.

Persönlich fand ich es qam benutzerfreundlichsten, seit KX die monadischen Verben (mit einem Argument) Kin englische Wörter übersetzt hat und es eine gute Menge an Dokumentation unter http://code.kx.com gibt . Darüber hinaus ist das Datenbanksystem äußerst gut durchdacht und flexibel.


1
Vielleicht möchten Sie auch erwähnen , oK , NGN / k und Shakti K.
Adám

9

Zu berücksichtigen ist das Vokabular der Operatoren (Funktionen höherer Ordnung).

Die ursprüngliche APL hat nur eine Reduzierung der letzten und ersten Achse (Falte) ( f/, f⌿), eine kumulative Reduzierung der letzten und ersten Achse ( f\, f⍀) sowie ein inneres und äußeres Produkt ( f.g, ∘.g).

Die meisten erweiterten APLs (zB GNU APL , APLX , APL + Win , APL2 ) nur das Hinzufügen jedes -loop ( ) und Sachsen - Klammer - Spezifikation ( f[... ]).

J fügte eine Fülle hinzu (Adverbien und Konjunktionen genannt), entfernte jedoch Klammern (sowohl Achse als auch Indexierung), jeden Operator (zugunsten des allgemeineren Rangoperators) und die Reduktion der letzten Achse (kumulativ).

Die jetzt nicht mehr existierende Sharp APL (und später SAX ) behielt sowohl die traditionellen Operatoren der letzten Achse als auch die Klammerindizierung bei und fügte viele der neuen Operatoren von J hinzu.

Dyalog APL nähert sich allmählich dem Vokabular von Sharp APL, hat aber auch J-exklusive Operatoren aufgenommen, die es nie in Sharp APL geschafft haben.

In der folgenden Tabelle werden die Vokabulare für die Komposition von J, Sharp APL und Dyalog APL verglichen . Für Einträge mit ausgeblendetem Text sind zwei Symbole erforderlich. Die Einträge mit grauem Hintergrund werden vorgeschlagen. J-, Sharp APL- und Dyalog APL-Zusammensetzungen


3

J ist eine ausführbare mathematische Notation, die mit ASCII-Zeichen eingegeben und angezeigt wird.

Es ist auch eine vollwertige funktionale, objektorientierte Programmiersprache.

Die JSoftware-Implementierung von J (ich kenne keine anderen) ist nicht Open Source, kann aber kostenlos verwendet werden.

Obwohl die Engine nicht Open Source ist, gibt es eine aktive Benutzerbibliothek mit J-Code, zu der Personen beitragen können.

J verfügt über eine umfangreiche und präzise Dokumentation http://www.jsoftware.com/help.htm und die Mitglieder des Forums beantworten gerne und schnell alle Fragen oder Probleme und möchten neuen Benutzern helfen, sich zu orientieren und fortgeschrittenere Probleme zu lösen.

In Bezug auf das Open Source-Problem ist die Dokumentation (Spezifikation) für J übrigens umfangreich, und theoretisch könnte jeder ein Open Source-Projekt erstellen, um zu versuchen, J zu implementieren, wenn er möchte.



3

Während A + (leider) ein totes Projekt zu sein scheint, gibt es einen neuen Open-Source-APL-Interpreter: GNU APL .


3

ELI ist eine neu entwickelte, frei verfügbare, plattformübergreifende Array-Programmiersprache. Ähnlich wie bei J und k basiert es auf dem ASCII-Zeichensatz. Es implementiert einige der Funktionen, die (wie ich weiß) nur für k / q / kdb + verfügbar waren, z. B. den zeitlichen Datentyp und die integrierte SQL-Teilmenge.


0

Ich bleibe auch verwirrt (APL hat mich immer verwirrt - zum Glück ist es 20 oder mehr Jahre her, seit ich das letzte Mal etwas damit versucht habe), aber ein bisschen Suchen hat A + gefunden, eine Open-Source-Version von A:

Ich habe keine Ahnung, dass es Ihren (oder irgendjemandes) Bedürfnissen entspricht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.