2010-10-08 21 views
63

Il panorama del linguaggio array, sebbene affascinante, confonde senza fine. C'è un motivo per scegliere uno tra J o K o APL o A? Nessuna di queste opzioni sembra essere open source: ci sono versioni open source? Mi piacerebbe espandere la mia mente, ma rimango confuso.APL contro A contro J contro K?

risposta

104

Le differenze tra queste lingue sono relativamente sottili. APL "proper" ha i vantaggi e gli svantaggi della notazione simbolica originale. (Ci sono piccole modifiche apportate al set di simboli nel corso degli anni, ma sono tutte abbastanza vere per la visione originale.)

La lingua A + è disponibile open source. Si discosta in modo significativo dagli APL "classici", ma è come se mantenessero la maggior parte del set di caratteri di base. La mia sensazione è che non sia stato tenuto aggiornato con i cambiamenti tecnologici. Era un precursore di K.

Le lingue della famiglia di linguaggi di matrice che sono partite dal set di caratteri APL distintivo includono J, K e Nial. Nial usa parole inglesi invece di simboli e ha un interprete open source chiamato Q'Nial. K e J si basano principalmente sui simboli, ma questi sono tratti dal set di caratteri ASCII. Le parole possono essere usate al posto dei simboli in queste lingue, tuttavia, semplicemente assegnando definizioni.

La famiglia di linguaggi di programmazione APL è stata principalmente proprietaria dall'aspetto iniziale di APL come prodotto IBM nel 1964. I linguaggi proprietari di array sembrano avere più supporto e un'evoluzione rapida di nuove funzionalità rispetto alle alternative open source in questo momento. Non sono sicuro di come tutti i concorrenti si accatastano l'uno contro l'altro, ma Dyalog APL ha certamente lavorato attivamente per promuovere la loro implementazione del linguaggio come tecnologia corrente. APL2000 offre prodotti per Unix, Linux e Windows, incluso VisualAPL per .Net. MicroAPL Ltd offre APLX.

K è un linguaggio specializzato che non è più commercializzato da solo. Kx Systems sta invece commercializzando il database Kdb + e il suo linguaggio Q (query), entrambi scritti in K. È un potente strumento specializzato, progettato per l'elaborazione ad alta velocità dei dati di streaming. Si discosta in modo significativo dall'approccio APL originale. I prodotti Kx Systems sono costosi e i loro utenti lavorano principalmente in finanza.

APL è stato progettato e progettato principalmente da Ken Iverson. Dopo una lunga carriera di applicazione e perfezionamento dell'APL in applicazioni commerciali, si è rivolto al compito di fare una revisione "razionalizzata", una che correggesse gli aspetti della lingua con la quale si era trovato insoddisfatto nel corso degli anni. Questa nuova versione del tema si chiama J. Le differenze tra J e APL sono descritte in un documento sul wiki del software J. Un cambiamento evidente è l'eliminazione della sintassi di indicizzazione degli array. La più grande caratteristica, tuttavia, è la forma tacita, in cui i programmi sono scritti componendo funzioni senza riferimento ai loro argomenti. Tacit J è strettamente correlato allo stile "point-free" trovato nei linguaggi di programmazione funzionale, ma differisce dal fatto che questa forma è fondamentale per il linguaggio J. I simboli basati su ASCII usati in J potrebbero essere più difficili da leggere rispetto ai più caratteristici caratteri APL.

Per un individuo che desidera imparare un linguaggio di array, il mio consiglio è di selezionare tra Dyalog APL, APLX, J e Q'Nial. Dyalog APL (specialmente per Windows) o APLX (esp.per Linux) sono probabilmente le migliori per qualcuno che vuole utilizzare il simbolismo centrale che è così distintivo per APL e che desidera una forte connessione con la comunità APL nel suo complesso. J potrebbe essere la soluzione migliore per coloro che desiderano creare applicazioni Web o concentrarsi sulla matematica (come Project Euler) e in particolare su coloro che sono affascinati dallo stile tacito che enfatizza. Q'Nial è ciò che selezionerei se la mia priorità era su open source, ma solo se quella priorità non significava anche prevedere il supporto di una comunità di OS attiva.

AGGIORNAMENTO: J 7.01 è stato released with open source code in GPL 3. Inoltre c'è Kona, una variante su K. Aumentano le opzioni per i linguaggi di matrice open source.

UPDATE da Tobia: GNU APL è disponibile con licenza GPL. Segue da vicino l'ultimo standard ISO pubblicato sul linguaggio APL esteso. È una grande implementazione APL open source e viene attivamente sviluppata e mantenuta. Esistono anche altre implementazioni interessanti, ad esempio ngn APL, un'implementazione sorprendentemente moderna e completa dell'APL scritta in Coffeescript (che compila in Javascript). Le lingue degli array sono vivi e bene nel 2015.

+0

+1 Panoramica molto bella. –

+0

A volte un +1 non è abbastanza: Grazie, caleidico! – blinry

+0

Recentemente Dyalog ha lanciato anche una versione per Mac OSX: http://www.dyalog.com/dyalog/mac-os.htm – firesofmay

0

Ho anche rimango confuso (APL mi ha sempre confuso - per fortuna è stato più di 20 anni dall'ultima volta che ho tentato qualsiasi cosa con esso), ma un po 'di ricerca ha trovato A +, una versione open-source di A:

ho idea che si riunirà il vostro (o chiunque) ha bisogno.

3

J è una notazione matematica eseguibile che viene inserito e visualizzato usando caratteri ascii.

È anche un vero e proprio Linguaggio di programmazione funzionale, orientato agli oggetti.

L'implementazione JSoftware di J (non ne conosco altri) non è open source, ma è gratuita.

Sebbene il motore non sia open source, esiste una libreria utente attiva di codice J a cui le persone possono contribuire.

J ha una documentazione ampia e concisa http://www.jsoftware.com/help.htm ei membri del forum rispondono alle domande e ai problemi con piacere e rapidamente e sono desiderosi di aiutare i nuovi utenti a orientarsi e con problemi più avanzati.

Sul problema dell'Open Source a proposito, la documentazione (specifica) per J è ampia e chiunque potrebbe in teoria creare un progetto open source per provare a implementare J se lo volessero.

+5

Il codice sorgente J è anche lì ora [collegamento] (http://jsoftware.com/source.htm) –

+1

Solo per dire che la sorgente J è stata rilasciata sotto la licenza GPL3 dall'ultima versione http: //www.jsoftware .com/Source.htm – jpjacobs

10

Per aggiungere qualche informazione in più ...

Esiste una versione open source di K chiamato Konahttps://github.com/kevinlawler/kona

Per q/kdb+, v'è una versione di prova. http://kx.com/download/

I limiti principali sono il timeout di 2 ore, la memoria a 32 bit, la scadenza della licenza di 3 mesi e la licenza stessa. Questi non dovrebbero essere troppo fastidiosi se vuoi solo giocare e imparare qualcosa.

Personalmente, ho trovato q di essere il più facile da usare in quanto KX tradotto i verbi (singolo argomento) monadici da K in parole in inglese e c'è una buona quantità di documentazione @http://code.kx.com. Inoltre, il sistema di database è estremamente ben congegnato e flessibile.

1

Mentre A + sembra (purtroppo) un progetto morto, c'è un nuovo interprete APL open-source: GNU APL.

2

ELI è un linguaggio di programmazione di array di nuova concezione, liberamente disponibile e multipiattaforma. Simile a J e k si basa sul set di caratteri ASCII.Implementa alcune delle funzionalità che (come so) erano uniche per k/q/kdb + come datatype temporale e sottoinsieme SQL integrato.

3

Qualcosa da considerare è il vocabolario degli operatori (funzioni di ordine superiore).

originale APL solo ha riduzione ultimo e primo asse (f/, f⌿), ultimo e primo asse riduzione cumulativa (f\, f⍀), più prodotto interno ed esterno (f.g, ∘.g).

APL

più lunghi (per esempio GNU APL, APLX, APL + Win, APL2) soltanto aggiungere il ciascun anello (), e l'asse specifica staffa (f[ ... ]).

J, aggiunto un plethora (chiamato avverbi e congiunzioni), ma parentesi rimosse (sia l'asse e l'indicizzazione), l'ogni operatore (a favore dell'operatore di classifica più generale), e riduzione dell'ultimo asse (cumulativo).

L'ormai defunto Sharp APL (SAX) ha mantenuto sia gli operatori tradizionali dell'ultimo asse che l'indicizzazione delle staffe, aggiungendo molti dei nuovi operatori di J.

Dyalog APL si sta gradualmente avvicinando al vocabolario di Sharp APL, ma ha anche incorporato operatori J-exclusive che non sono mai stati inseriti in Sharp APL.

La tabella seguente confronta i vocabolari di composizione J, Sharp APL e Dyalog APL. Le voci in grigio sono sotto proposta. J, Sharp APL, and Dyalog APL compositions