APL | |
Data primei versiuni | 1966 |
---|---|
Paradigmă | matrice, funcțională , programare structurată , tacită |
Autor | Kenneth E. Iverson |
Dezvoltator | Larry Breed, Dick Lathwell, Roger Moore și colab. |
Ultima versiune | ISO / IEC 13751: 2001 (1 st luna februarie 2001 de) |
Tastare | dinamic |
Influențată de | Notatie (matematica) |
Influențat | Limba J , Matlab , A + |
Implementări | APL \ 360 APL \ 1130 APL * Plus Sharp APL APL2 Dyalog APL NARS2000 APLX GNU APL |
Sistem de operare | Cross-platform , Windows , GNU / Linux , Mac OS X |
Licență | proprietar, GPL |
Extensii de fișiere | .apl |
APL (inițial un limbaj de programare , informal Array-Language Processing ) este o informație descriere procesarea limbajului mai târziu a devenit limbaj de programare dezvoltat între 1957 și 1967 la Harvard de Kenneth Iverson pentru a descrie operațiunile globale în mod convenabil pe mese (boolean, numerice sau, într - o mai mică întindere, caractere). Iverson a descris gramatica limbajului său ca fiind similară cu cea a unui limbaj natural ( substantive , verbe , adverbe , conjuncții , copule și punctuație ) . Cu toate acestea, limba nu folosește cuvinte, ci multe semne, fiecare corespunzând unui concept specific.
Revoluționar în lansarea sa (utilizați mingea terminală sau ecranul în timp ce cardul perforat sau teletipul ASR33 (în) erau încă referința, orice declarație necesară, tastarea și dimensionarea variabilelor inutile, gestionarea dinamică a memoriei, interactivitate completă, concizie prin procesarea directă a tabelelor evitând scrierea buclelor, persistența ), a avut din ce în ce mai mult succes până la mijlocul anilor 1980, când foaia de calcul a concurat cu ea pentru slujbe mici și instrumente precum SAS , apoi R pentru lucrări pe volume de date mai mari decât foi de calcul din 1985.
În 2020, disponibilitatea unor procesoare foarte rapide care se adresează mai multor gigaocteți de memorie RAM și existența unor interpreți Open Source o pot face din nou interesantă pentru un public de entuziaști. Rob Pike , creatorul limbii Go , a vorbit despre asta în 2014 cu entuziasm și, în 2020, a lansat publicului codul sursă al limbii Ivy, o fundație APL în limba Go.
În versiunea sa GNU APL , poate fi folosit chiar și ca limbaj de scriptare .
Notă: Verificați dacă browserul dvs. acceptă Unicode ; în caz contrar, veți vedea dreptunghiuri albe sau semne de întrebare în loc de caractere APL. Această întrebare este detaliată pe web. Astăzi (2017) browserele PC-uri precum Mozilla Firefox sau Microsoft Edge nu au nicio problemă în afișarea caracterelor APL în Unicode. Unele probleme de afișare reziduale există încă pe tabletele Android .
Exemplele sunt date în duplicat: o formă de captură de ecran care va reda corect orice browser utilizați și una sub formă de text pe care o puteți copia / lipi de exemplu în NARS2000 (a se vedea mai jos) pentru a o executa, eventual cu unele variante. Redarea paginii va depinde de fontul implicit și de nivelul de zoom. Puteți să le schimbați, de exemplu pe un computer prin Ctrl + rotița mouse-ului, în funcție de rezoluția ecranului.
Un APL istoric englezesc este dat în PDF în IBM Systems Journal , volumul 30, n o 4 (1991)
APL s-a arătat deosebit de potrivit încă de la începuturi pentru calcule statistice , defalcări, consolidări, descrieri funcționale ale arhitecturilor precum IBM 360 , grafică interactivă ( GRAPHPAK ) și unele lucrări în combinatorică și teoria graficelor . A fost, de asemenea, utilizat pentru aplicații de prototipare și scrierea limbajelor simple de manipulare ca parte a unui centru de infocare prin mascarea simbolurilor corespunzătoare sub nume convenabile și semnificative, de exemplu, permițând scrierea simplă:
MEDIE X pentru (+ / X) ÷ ⍴X .
„(Suma elementelor lui X) împărțită la numărul de elemente ale lui X)”
NORMALIZAȚI X pentru X ÷ + / X
"Împărțiți fiecare element al lui X la suma tuturor elementelor lui X"
etc.
Dacă luăm în considerare tabele gigantice, noțiunea de MapReduce nu este departe și, de fapt, mai multe implementări APL utilizează, fără ca utilizatorul să trebuiască să codeze el însuși utilizarea, paralelismul hardware-ului (a se vedea mai jos).
Face posibilă gestionarea cu ușurință a matricilor de N dimensiuni (N variind de la 7 la 255 în funcție de implementarea luată în considerare, cu dimensiuni de la 0 la 65000 și mai mult pe fiecare dimensiune) într-un mod global . Operațiile puternice, calculele laminare ( laminare ) și reducerea operatorilor /, extinderea \ , produsul intern . și produsul exterior ∘. și operațiunile Compresie / evită adesea orice nevoie de indicii buclelor explicite - și, în plus, utilizarea buclelor în sine.
Iverson a insistat că APL este un limbaj de gândire , precum și un limbaj de programare. Este într-adevăr o notație matematică riguroasă și concisă.
Simbolurile APL care reprezintă operațiuni care pot fi utilizate în programare ca și în calculul imediat la consolă, de exemplu „domino” ⌹care inversează direct o matrice pătrată sau rezolvă un sistem supradimensionat de ecuații liniare în sensul celor mai mici pătrate dacă matricea este Dreptunghiular:
a←2 2⍴⍳4 ⌹a ¯2 1 1.5 ¯0.5S-a estimat în anii 1970-80 că o echipă de 5 dezvoltatori APL avea puterea de dezvoltare a unei echipe de 25 de programatori FORTRAN . Aplicația APL era mai lacomă în ceea ce privește resursele materiale, dar prețul acestora scădea constant. În 2013, adaptarea sa la programarea agilă i-a dat un interes reînnoit pentru toate aplicațiile care urmează să fie configurate sau care evoluează rapid, precum și pentru aplicațiile cu o durată de viață scurtă. A fost folosit, printre altele, de NASA , British Airways , Banque de France (studii economice fulgerătoare), Direcția Generală a Finanțelor Publice (impactul fiscal al noilor legi) etc.
După ce a experimentat fundul valului în 2009, interesul pentru acest limbaj a crescut semnificativ de atunci.
Tot din 2013, a fost oferit pentru producția de servleturi .
Interfața sa inițială (în două tonuri în modul de mașină de scris) a inspirat-o pe cea a unui software precum Maple .
APL a inovat la vremea sa prin mai multe aspecte ușor de utilizat:
Deci, să scrieți „Bună, Lumea! »În APL, lucrurile sunt după cum urmează:
"Bună lume!" ⍝ tastat de utilizatorSalut lume! ⍝ răspuns de la terminal
2 + 2 3 5 7 ⍝ dă4 5 7 9
La aceasta trebuie adăugată posibilitatea spectaculoasă de indexare a unui tablou cu un alt tablou . Asa de :
„CAT” [7 5 2 3 4 6 7] ⍝ dăPISICA
Vedea:
„CAT” [2 3 ⍴ 7 5 2 4 6 7] ⍝ dă
CAT
Nici o traducere automată aici nici în ambele cazuri: indexul a fost pur și simplu înlocuit cu ceea ce a fost indexat (astfel T este al șaptelea caracter), care este caracteristic operației de indexare. Ceea ce este indexat ia și forma indexului (deci, o matrice 2x3 în al doilea caz).
Datorită priorității sale de la dreapta la stânga, limba poate fi citită simplu, ca un limbaj natural: „1 plus suma inverselor factorialelor întregi de la 1 la 30” se va scrie:
1 ++ / ÷! ⍳30 ⍝ care dă2.718281828
Același rezultat (adică valoarea lui e ) poate fi obținut prin lovirea directă * 1
APL-ul original cunoștea doar scalarele și matricele (numerice sau alfanumerice). Acum gestionează matrici de matrici și, de asemenea, permite utilizatorului să-și definească proprii „operatori”.
De asemenea, funcționează automat în număr complex dacă necesitățile calculului o impun. Valoarea este scrisă și, în consecință, dă . NARS2000, la rândul său, recunoaște nu numai numere complexe, ci și cuaternionuri : dacă scrieți , sistemul îl tipărește - și îl interpretează - așa cum și, desigur, merită . De octonions sunt de asemenea suportate ( ). 0J10J1*2¯1J00+1J0i0j1k00i0j1k0*2¯1i0j0k01i2j3k4l5ij6jk7kl8
Personajul ⎕citește „quad”.
⎕ ← A ← 2 2⍴⍳4 ⍝ tipărește o matrice A de dimensiunea 2x2 formată din numerele de la 1 la 4același lucru pe cealaltă axă: coloane
concatenare prin crearea unei noi dimensiuni: matricea devine cub
A, [1,5] 0Această operație a creat o nouă dimensiune pe o altă axă.
Produsul extern alias cartezian , creează matrice de vectori, cum ar fi un tabel de multiplicare:
1 2∘.+10 20 30 11 21 31 12 22 32 ⎕←a←,1 2∘.+10 20 30 11 21 31 12 22 32 a[⍋a] 11 12 21 22 31 32Primitivul ⍋ , pe care îl numim grade-up , oferă permutația care clasează elementele unui vector în ordine crescătoare (și nu acest vector clasificat în sine). Cu alte cuvinte, un [⍋a] returnează întotdeauna un vector sortat, iar ⍋a întotdeauna un vector de permutare format din elementele permutate ale lui ⍳⍴a , care este un mod concis și ieftin de a crea și combina permutări. Astfel de permutări se obțin cu ușurință prin selecție exhaustivă: 52 ? 52 pentru extragerea a 52 de cărți din 52.
Simbolurile setate ( ∊, ∪, ∩, ⊆, ⊇, ⍦ ...) există în APL și fac obiectul unor extensii speciale care permit să funcționeze în seturi simple (din care fiecare element apare o singură dată) sau multiseturi unde fiecare element poate apărea de mai multe ori, util pentru combinațiile Bose-Einstein
Conform elementelor acestor grupuri, care au propria lor identitate sau, mai bine zis, nu (adică sunt indistincte), există douăsprezece modalități distincte (în) de procesare a seturilor.
La fel cum o funcție acționează asupra uneia sau mai multor variabile , un operator acționează asupra uneia sau mai multor funcții (sau operații). Pentru a face o comparație matematică, „sigma” și „pi” corespund operatorului de reducere APL („ / ”) aplicat operațiunilor „ + ” și „ × ”. Sigma (suma termenilor) se scrie + / , "pi" (multiplicarea între termeni) × / , "uniune" ( sau logică între termeni) ∨ / , "conjuncție" ("și" logică între termeni) ∧ / etc. . Se vorbește în alte limbi, închidere ( închidere ).
În prima versiune a APL, operatorii sunt definiți fix (reducere ( / ), scanare ( \ ), produs extern ( °. ), Compoziție ( . ) ...). În APL2, utilizatorul își poate crea propriile voințe și le poate da nume. Un operator poate acționa indiferent asupra operațiilor lingvistice de bază sau asupra funcțiilor definite de utilizator în spațiul său de lucru .
APL2 introduce, de asemenea, operatorul umlaut ( ¨ , denumit fiecare ), generalizând la nivelul fiecărei sub-matrice o operațiune în matrici de matrici .
⍳4 1 2 3 4 ⍳¨⍳4 1 1 2 1 2 3 1 2 3 4 ⍝ La fonction système ⎕fmt ("quad fmt") affiche cela plus clairement ⎕fmt ⍳¨⍳4 ┌4──────────────────────────┐ │┌1┐ ┌2──┐ ┌3────┐ ┌4──────┐│ ││1│ │1 2│ │1 2 3│ │1 2 3 4││ │└~┘ └~──┘ └~────┘ └~──────┘2 └∊──────────────────────────┘ ⊃⍳¨⍳5 1 0 0 0 0 1 2 0 0 0 1 2 3 0 0 1 2 3 4 0 1 2 3 4 5 ⎕fmt ⊃⍳¨⍳5 ┌5────────┐ 51 0 0 0 0│ │1 2 0 0 0│ │1 2 3 0 0│ │1 2 3 4 0│ │1 2 3 4 5│ └~────────┘ 6 2⍕⌹⊃⍳¨⍳5 1.00 ¯0.00 0.00 ¯0.00 0.00 ¯0.50 0.50 ¯0.00 0.00 ¯0.00 ¯0.00 ¯0.33 0.33 0.00 0.00 0.00 0.00 ¯0.25 0.25 ¯0.00 ¯0.00 ¯0.00 0.00 ¯0.20 0.20Vezi nota .
O operație numită enclose (⊂) permite încapsularea unui tablou care este apoi văzut ca un scalar. Prin urmare, este ușor să se reprezinte structuri complexe sub formă de tablouri având alte elemente ca elemente . Existența unei executa funcții (⍎) chiar și face posibilă includerea în aceste șiruri de matrice funcționează identificatorilor care pot fi executate la cerere, la fel ca în limbajul C . De asemenea, permite unui program să genereze singur cod pe care îl va executa apoi, ca în Lisp sau Haskell : funcțiile sunt apoi doar anumite tipuri de variabile. Vezi programare funcțională .
Numărul de indici al unui tablou este, prin convenție, numit rang (rang) în APL (nu trebuie confundat cu rangul unei matrice în algebră liniară ) și este întotdeauna returnat de ⍴⍴ . Numărul de niveluri dintr-o matrice de matrice este denumit adâncime și returnat de ≡ .
Utilizatorul lucrează într-un spațiu de lucru ( spațiu de lucru ) unde își stochează funcțiile și variabilele. El poate salva totul în orice moment (inclusiv în starea de execuție suspendată) și ulterior să-și reia lucrarea exact în condițiile în care a părăsit-o, inclusiv în statul în care ar fi întrerupt un program în desfășurare. Comenzi precum ) COPY și ) PCOPY și noțiunea de grup permit transferuri ușoare de funcții și variabile de la un spațiu de lucru la altul (un grup este un nume dat unui set de funcții și variabile care funcționează împreună, permițându-le să le importe pe toate în același timp timp fără a le detalia numele sau importul întregului spațiu de lucru).
APL-urile comerciale vin cu mai multe biblioteci de spații de lucru exemplare, atât executabile, cât și editabile. În APL2 IBM, aceste biblioteci sunt numerotate ) LIB 1 , ) LIB 2 etc. (vezi figura din stânga).
Fiecare obiect APL2 (variabilă, funcție sau operator) este marcat automat în spațiul de lucru , ceea ce facilitează gestionarea acestuia pe termen lung. Tipul și data obiectelor sunt returnate de funcția de sistem ⎕AT (= tribute AT ). Împreună cu operațiile de sortare ⍋ ( grade-up ) și ⍒ ( grade-down ), acest timestamp al obiectului facilitează foarte mult procesul de dezvoltare.
⎕NL (= N ame L ist) readuce lista elementelor zonei de lucru, ⎕NL 3 readuce lista singurelor sale funcții. După cum se poate vedea, concatenarea orizontală a tabelelor de altă natură doar printr-o virgulă face ca afișajele să fie ușoare.
În NARS2000, funcția de sistem ⎕vr listează suplimentar o funcție cu numerele sale de linie, ultima linie conținând marca de timp. Rezultatul este un vector simplu de caractere care conțin câteva caractere newline, colorarea standard a caracterelor fiind realizată de sistem.
APL idiomatice cele mai utile au fost colectate în universități cel puțin din 1977 și lista lor rămâne actualizată pe un wiki în Unicode .
Unele dintre aceste ture se referă la primul APL, care nu avea tablourile de tablouri; ele rămân valabile astăzi, deși APL2 permite simplificarea mai multor. IBM oferă o versiune adecvată pentru APL2, ale cărei exemple pot fi copiate / lipite într-un interpret, precum și spațiul de lucru IDIOMS în TRYAPL2 gratuit destinat pentru DOS sau orice DOSBox . Dyalog APL oferă propria listă. Consultarea lor este utilă pentru a vă familiariza cu modul de gândire specific APL și pentru a descoperi concret utilizarea primitivelor și operatorilor săi.
Stanley Jordan a prezentat ACM o lucrare privind utilizarea frazelor APL pentru a ajuta la compoziția muzicală
În cele din urmă, site-ul rosettacode oferă câteva exemple de mici probleme cu rezolvarea lor în APL, precum și (în general mai puțin concise) în alte limbi: https://rosettacode.org/wiki/Category:APL
Patru implementări majore open source ale APL pot fi descărcate gratuit:
Interpretorii APL au existat pentru IBM 7090 , IBM 360 to zSeries (sub TSO , VM / CMS și chiar CICS !), IBM 1130 , Xerox XDS Sigma 7 aka CII 10070 și CII Iris 80 , Bull DPS- 7 , Burroughs B5500, Bull SEMS T1600 (fosta Télémécanique Électrique T1600 ), seria Mitra etc.
În 1976, Sligos a scris un APL pentru Iris 80 (CII) pentru a oferi această limbă ca serviciu de procesare la distanță. Proiectul a fost abandonat la câteva luni după finalizarea sa din motive de performanță insuficientă în timpul amplificării. Spațiile de lucru destinate migrării de la 370 la Iris 80 au fost ușor modificate pentru a permite migrarea inversă.
APL a fost furnizat , de asemenea , direct ROM în calculatoarele personale de la începutul anilor 1970 (înainte de Apple, astfel încât) sub forma MCM-70 , care a avut un afișaj al unei linii, sau IBM 5110 Modelul A și C.
Versiunile de stații de lucru și computer personal au fost, de asemenea, lansate sau produse gratuit pentru AIX , Solaris , Linux , Windows , Mac OS , OS / 2 . Există chiar și unele pentru DOS (versiunea gratuită numită TRYAPL2, atât în versiunea engleză, cât și în cea franceză; franțizarea a fost realizată de AFAPL) ... precum și pentru Android !
Compania Microsoft a întreprins două implementări ale limbajului în 8080 și 6800 , potrivit unei scrisori de la Bill Gates adresată utilizatorilor Altair BASIC . Succesul DOS către Windows și în special foaia de calcul Multiplan și Excel a trebuit să abandoneze acest proiect, care avea un public potențial mult mai mic: foarte publicul cerea apoi aplicații la cheie (în exemplul VisiCalc de pe Apple II ) și nu limbi să-i programeze singuri.
Mecanismul de schimb cunoscut sub numele de procesoare auxiliare permite spațiilor de lucru APL să comunice cu lumea exterioară: fișiere, SQL / DB2 , TCP / IP , fereastră X , OpenGL , precum și alte spații de lucru APL și console de rețea active în același moment dacă dau permisiune. Astfel putem începe să dezvoltăm un calcul pe un computer, apoi odată ce acesta a fost dezvoltat, îl putem executa de la distanță pe un computer central echipat cu zeci de procesoare paralele din aceeași sesiune pe PC.
Procesoarele auxiliare permit chiar și sesiunilor stației de lucru să comunice eficient cu sau între sesiunile din aceeași limbă de pe mainframe . Din calculele matriciale foarte mari pot fi astfel distribuite în rețea.
Procesoarele auxiliare sunt cel mai adesea codificate în limbajul C .
Unele livrate cu IBM APL2 sunt AP124 (adresarea directă a ecranului, cum ar fi blestemele ), AP127 și AP227 (respectiv acces la bazele de date DB2 și ODBC ), AP144 și AP145 (resp. Adresarea X-Window și Windows ), AP200 (coordonarea sesiuni APL separate), AP207 (procesor grafic interactiv, utilizat de GRAPHPAK ).
' | ( | ) | + | , | - | . | / | : | ; | < | = | > | ? | [ | ] |
\ | _ | ¨ | ¯ | × | ÷ | ← | ↑ | → | ↓ | ∆ | ∇ | ∘ | ∣ | ∧ | ∨ |
∩ | ∪ | ∼ | ≠ | ≤ | ≥ | ≬ | ⊂ | ⊃ | ⌈ | ⌊ | ⊤ | ⊥ | ⋆ | ⌶ | ⌷ |
⌸ | ⌹ | ⌺ | ⌻ | ⌼ | ⌽ | ⌾ | ⌿ | ⍀ | ⍁ | ⍂ | ⍃ | ⍄ | ⍅ | ⍆ | ⍇ |
⍈ | ⍉ | ⍊ | ⍋ | ⍌ | ⍍ | ⍎ | ⍏ | ⍐ | ⍑ | ⍒ | ⍓ | ⍔ | ⍕ | ⍖ | ⍗ |
⍘ | ⍙ | ⍚ | ⍛ | ⍜ | ⍝ | ⍞ | ⍟ | ⍠ | ⍡ | ⍢ | ⍣ | ⍤ | ⍥ | ⍦ | ⍧ |
⍨ | ⍩ | ⍪ | ⍫ | ⍬ | ⍭ | ⍮ | ⍯ | ⍰ | ⍱ | ⍲ | ⍳ | ⍴ | ⍵ | ⍶ | ⍷ |
⍸ | ⍹ | ⍺ | ⎕ | ○ |
Nu toate caracterele APL sunt încă asociate cu o semnificație astăzi (2020). GNU APL, Dyalog APL și NARS2000 folosesc trei: ⍺ și ⍵ , care desemnează primul și ultimul argument al unei funcții și λ care desemnează rezultatul. Exemplu:
)FNS SUM ∇SUM[⎕]∇ [0] λ←⍺ SUM ⍵ [1] λ← ⍺ + ⍵Definiția acestei funcții ar fi realizată de SUM ← { ⍺ + ⍵ }. Acea medie ar fi făcută în același mod de moyenne←{(+/⍵)÷⍴⍵}. Este într-adevăr o programare funcțională .
⍝ Surface d'un polygone en Dyalog APL surface←{÷∘2⊢-/{+⌿×/⍵}¨(0 1)(1 0)⊖¨⊂⍵} ⍝ définit la fonction "surface" surface↑⌽(0 3)(3 0)(0 0) ⍝ applique cette fonction à un triangle donné 4.5⍺ și ⍵ reprezintă operanzii unei funcții de mai sus . De asemenea și prin convenție ⍺⍺ și fonctions reprezintă funcțiile la care un operator de aplică .
Unele implementări precum NARS2000 oferă utilizări matematice puternice ale altor simboluri.
În Mai 2010, principalele fonturi APL descărcabile de pe Internet sunt după cum urmează:
Caracterele Unicode APL2 sunt definite într-unul dintre planurile fontului Arial și, prin urmare, permit copierea / lipirea directă din APL dintr-o sesiune de calcul (sau chiar o pagină web) într-un procesor de text sau invers, ceea ce a fost convenabil imposibil înainte de Unicode.
Unicode APL, codificat în UTF-8 , vă permite să:
Browserele web au onorat afișarea caracterelor APL din 2010. Multe tablete sunt capabile de acest lucru în 2015.
Aspectul original al tastaturii APL pentru Statele Unite a fost ales , de exemplu, din considerente mnemonice ? asociat cu Q ( semn de întrebare ) ⍴ ( rho ) cu R etc. O întrebare era să știm dacă tastatura APL franceză trebuia să asocieze un caracter cu tasta însăși ( ? Ar fi asociată apoi cu A și nu mai cu Q ) sau cu semnificația acesteia (care ar fi avut ca efect combinarea specificităților franceze cu specificul APL.
Întrebarea este mai puțin banală decât s-ar părea: utilizarea APL necesită multă concentrare . Dacă în timpul tastării această concentrație este întreruptă de o interogare pe tastă pentru a tasta pe tastatură și / sau modificatorul de apăsat (Shift, Alt sau Ctrl), utilizarea acestui limbaj va deveni ineficientă indiferent de calitățile sale la plecare.
De asemenea, puteți crea un aspect de tastatură personalizat, fie în Windows, fie în X-Window ( setxkbmap -layout us,apl -variant ,dyalog -option grp:lswitchdeși în detrimentul interoperabilității dacă utilizați alte mașini decât ale dvs.
Acest document de 5 pagini detaliază o posibilă implementare a unei tastaturi APL sub Linux:
Aspectul foii de calcul , mai intuitiv și mai ușor de utilizat, a eliminat o parte din interesul limbii. Cu toate acestea, acest lucru nu aduce atingere puterii sale expresive și conciziei sale, iar mai mulți interpreți APL pot fi descărcați gratuit pe Internet , pentru computer (Linux sau Windows), ca și pentru Macintosh . Caracterele APL / APL2 sunt prezente în Unicode .
APL se ocupă de tabele în ansamblu, implementările sale profită cu ușurință de posibilitățile de calcul paralel sau de conducte ale procesoarelor moderne. Folosesc pe larg capacitățile vectoriale ale S / 390 (zSeries) , arhitectura PowerPC ( Optimized Pipeline of Similar Instructions ) și Instrucțiunile multimedia ( SSE ) ale arhitecturii Intel / AMD. În măsura în care APL procesează tabelele la nivel global fără a impune detaliile procesării, mai multe dintre primitivele și operatorii săi pot fi implementate în calcul paralel CUDA , sau chiar în calcul cuantic , local sau la distanță dacă devin disponibile circuite de calcul de acest tip.
Operatorul ∘ face posibilă exprimarea produsului cartezian între doi vectori de date, prin urmare toate combinațiile operanzilor lor (operație în N ^ 2) și apoi operatorul / să comprime rezultatul în conformitate cu o altă operație. Întregul exprimă calculul combinatoriu solicitat de la acest calculator, la fel cum o interogare SQL exprimă ceea ce este solicitat dintr-o bază de date, fără a fi nevoie să intrați în detaliile calculului.
Dyalog APL versiunea 17.0 (iulie 2018) folosește automat instrucțiuni vectoriale din arhitecturile x64, POWER și ARM.
Doi succesori ai APL sunt limbajul A + , și limbajul J , acesta din urmă fiind promovat de KE Iverson însuși și nu necesită utilizarea unor caractere speciale. Cu toate acestea, APL are o mai bună lizibilitate, cu condiția să aveți fontul adecvat. Furnizarea limbajului în sine nu ar fi fost posibilă încă din 1969 fără terminalele cu bilă IBM numite și Selectric (de exemplu 2741 ). Pe terminalele 2260 pur alfanumerice, a fost necesar să se utilizeze cuvinte cheie greu de citit. Cele 3270 terminale , începând cu 3277, ulterior a permis APL seturi de caractere precum și litere latine minuscule.
Pentru informații, calculele pe un Celeron 300 MHz din 2004 se fac în aproximativ o zecime din timpul de calcul pe care l-au luat în 1970 pe un IBM 360/91 . Nucleul interpretului se află în întregime în memoria cache a instrucțiunilor unui microprocesor contemporan (2020), oferind performanțe de execuție APL comparabile cu cele ale limbajelor compilate , ca în acest exemplu:
⎕cr 'test' test;s ⎕ts s←+/÷⍳1000000 ⎕ts test 2016 5 7 14 20 52 301 2016 5 7 14 20 52 350Vedem aici că calculul numărului armonic H 1000000 durează 49 ms (350 - 301) în ștampila de timp . Acest calcul a fost efectuat pe un Core i7 4500U, semn de trecere de aproximativ 3800. Este nevoie de 36 ms pe un Core i7 4790 cu un semn de trecere de 10.000 (comparați, pe această a doua mașină, cu 13 ms pentru același calcul în limbaj C și, curios, 13 ms, de asemenea, în Dyalog APL 64 biți versiunea 15).
Graphpak este unul dintre spațiile de lucru furnizate cu APL-ul IBM și poate fi combinat cu orice altă aplicație de utilizator pentru a-i oferi posibilități de intrare / ieșire grafică 2D și 3D. Structura apelurilor lingvistice (nu este nevoie de paranteze pentru apelurile de funcții și subrutine) face posibilă acordarea de ordine cu un aspect vag al limbajului natural. Elementele IBM și AP , furnizate cu acest spațiu de lucru, sunt pur și simplu matrici care conțin coordonate de puncte respectiv în 2D și 3D, prima coloană specificând o indicație de reprezentare a graficului (culoare și stil), celelalte coordonate în x , y și eventual z . Funcțiile permit, de asemenea, introducerea grafică cu mouse-ul sau trackpad - ul .
Cu excepția utilizării indicilor și buclelor prin multiplicarea operatorilor, APL permite scrierea rapidă și concisă a expresiilor sau programelor care ar fi mult mai lungi cu un limbaj clasic. Având în vedere compacitatea și puterea limbajului, unii puriști au considerat pentru un timp că este „elegant”, un program APL nu ar trebui să depășească o linie de cod. Aceste programe, numite one-liners în revizuirea ACM APL Quote-Quad au fost strămoșii celor vrednici de ceea ce va fi mai târziu Hebdogiciel .
Uneori au fost puse unele probleme de recreere. De exemplu „cum se realizează suma elementelor unui tablou A (în principiu + / A ) când tastele + și / nu funcționează? ". Un răspuns posibil a fost 1⊥A (evaluarea lui A ca număr exprimat în baza 1!). Un altul a fost „modul de a găsi cel mai concis calcula media unui vector V ( de obicei , notat (+ / V) ÷ ⍴V ) cu un raspuns la V⌹V = V .
Cu toate acestea, multiplicitatea glifelor, utilizarea lor unară sau binară, suprapunerile de caractere care ar trebui să le exprime în momentul terminalelor electromecanice au calificat acest limbaj ca fiind criptic . Absența mecanismelor condiționate a determinat, de asemenea, pe toată lumea să folosească diverse trucuri care erau în detrimentul lizibilității și întreținerii aplicațiilor, cu excepția introducerii funcțiilor în nume cât mai semnificative posibil.
⎕cr 'if' z←a if b z←b/a 'bonjour' if 1<0 'bonjour' if 1<3 bonjourUnele cazuri foarte speciale de semantică au împărțit diferiții editori. Astfel, dacă A, B și C sunt trei vectori de trei elemente, expresia ar trebui înțeleasă A B C[2]ca un vector de vectori având ca elemente vectorul A, vectorul B și scalarul C [2]? Aceasta este opțiunea de interpretare a NARS2000. Este, de asemenea, cea a GNU APL, la fel ca cea a IBM pentru APL2.
Dyalog, primul care a introdus matrici de matrici într-o APL comercială, a făcut apoi alegerea opusă și a considerat că expresia este echivalentă cu B. Deși este suficient să folosiți paranteze pentru a evita orice ambiguitate, acest editor care nu dorea să introducă probleme de portare a introdus o nouă variabilă de sistem, ⎕ML ( nivel de migrare ). Dacă această variabilă este la 0, se aplică interpretarea Dyalog. În caz contrar, este interpretarea generală. De asemenea, valoarea acestei variabile de sistem poate fi diferită în funcții diferite care îi conferă o valoare locală (într-un ecosistem de funcții, de exemplu), permițând interoperabilitatea flexibilă.
APL nu a cunoscut niciodată oficial tabele asociative , indexând o matrice cu altceva decât valori întregi, încorporate în alte limbi interpretate (Perl, Javascript, PHP ...). Prin urmare, nu putem scrie:
CAPITAL [⊂'FRANCE '] ← ⊂'PARIS'
sau, pentru a rămâne în vector,
CAPITAL ['FRANȚA' 'SPANIA' 'ITALIA'] ← 'PARIS' 'MADRID' 'ROMA'
care este obligatoriu, deoarece:
Nu este foarte ergonomic să ocolim acest decalaj cu prețul unor variabile suplimentare, de exemplu: FRANȚA ← 32 (deci, CAPITALE [FRANȚA] ← ⊂ „PARIS” . Dacă țara provine dintr-o confiscare, indicele poate fi găsit de „executați”: ⍎ „FRANȚA” care returnează 32, dar aplicația pierde din robustețe și tabelul de simboluri este aglomerat inutil (APL / X ocolește dificultatea cu spațiile de nume ).
O altă modalitate este de a defini un vector de nume de țări: PLĂȚI ← „BELGIQUE” „FRANȚA” , instrucțiunea devenind apoi: CAPITAL [PAYS⍳⊂'FRANCE ”] ← ⊂'PARIS '
Dar în acest caz, independent de lizibilitatea redusă, timpul de acces nu mai are cea mai mică relație cu un acces direct de tip „hash” în Perl sau PHP, mai ales dacă există sute de nume. Nu numai că lizibilitatea programelor nu câștigă nimic, dar ușurința lor de întreținere se prăbușește, având în vedere variabilele adăugate la program.
Această nevoie este luată în considerare în obiectivele proiectului NARS. Dyalog PLA îl înconjoară prin mecanismul său non-standard spații de nume ( namespaces ).
Dyalog oferă câteva spații de lucru și documentații PDF despre abordarea obiectelor în APL , precum și despre programarea funcțională . O expunere deosebit de clară a APL ca notație algebrică făcută mai coerentă decât în algebra clasică și care include elemente de programare funcțională și efectuată la Google de Morten Kromberg poate fi văzută aici .
Fără a fi nevoie să instalăm APL , îl putem încerca pe această pagină: http://tryapl.org/ pentru a introduce anumite expresii, a le executa și a examina rezultatul (ilustrația din stânga).
Pentru a include caracterele APL la alegere în linia de testare, faceți clic pe ele în partea stângă a ecranului (fila „Primer”). Variabila de sistem ⎕PP ( precizie de imprimare ) specifică numărul de zecimale de afișat. Alte variabile sunt ⎕IO ( indice de origine , 0 sau 1), ⎕TS ( ștampilă , timestamp) etc. Sugestii de expresie care trebuie executate sunt propuse atunci când indicatorul mouse-ului trece peste un anumit caracter, printre altele operatorii de sortare crescătoare și descendentă, ⍋ ( grad în sus și ⍒ ( grad în jos ). Linia de acces este executată când tasta Trimite (nou line) este apăsat, după care se afișează rezultatul execuției și se poate introduce o nouă expresie.
Această pagină TryAPL este oferită de o companie, Dyalog , care autorizează descărcarea gratuită a unei versiuni complete a interpretului său (versiunea pe 32 sau 64 de biți) pentru uz personal și necomercial. Fiecare versiune gratuită este „tatuată” de un număr de serie atribuit solicitantului pe bază personală. Pentru alte utilizări decât cele personale există și licențe comerciale.