APL (limbă)

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 .

Istoric

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

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

Prezentare

APL a inovat la vremea sa prin mai multe aspecte ușor de utilizat:

Exemple

Deci, să scrieți „Bună, Lumea! »În APL, lucrurile sunt după cum urmează:

"Bună lume!" ⍝ tastat de utilizator

Salut 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

Operații de masă

Personajul ⎕citește „quad”.

⎕ ← A ← 2 2⍴⍳4 ⍝ tipărește o matrice A de dimensiunea 2x2 formată din numerele de la 1 la 4
1 2
3 4 A = 2 ⍝ dă o matrice booleană care indică elementele lui A egale cu 2
0 1
0 0 A, A ⍝ concatenează orizontal matricea A cu ea însăși, formând o matrice 2x4
1 2 1 2
3 4 3 4 A, 5 ⍝ concatenează scalarul 5 la matricea A
1 2 5
3 4 5 A, + / A ⍝ concatenează vertical (⍪) la A un vector „suma lui A pe coloane” (+ / A)
1 2 3
3 4 7 A⍪ + ⌿A ⍝ dă
1 2
3 4
4 6

același lucru pe cealaltă axă: coloane

A, [.5] 0 ⍝ dă
1 2
3 4

0 0
0 0

concatenare prin crearea unei noi dimensiuni: matricea devine cub

A, [1,5] 0
1 2
0 0

3 4
0 0

Această 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 32

Primitivul ⍋ , 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.

Operații pe platouri

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.

Operatori

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

Vezi nota .

Matrice de matrice și funcția ⍎

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

Spațiu de lucru

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

Marcaj de timp automat

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.

Elemente istorice

Deci, 7 5 6 - 4 3 2 produce 3 2 4, dar 7 5 6 ¯4 3 2 produce ... 7 5 6 ¯4 3 2

Idiomuri APL

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

Implementări

Gratuit

Patru implementări majore open source ale APL pot fi descărcate gratuit:

Nars2000, implementare Open Source a APL sub Windows, utilizată aici de la Wine sub sistemul de operare Ubuntu Cererea de calcule cu o precizie nelimitată se face făcând constanțele să urmeze cu un sufix x care este apoi propagat automat în toate calculele în care apar. Variabilele ⎕pp(precizia afișajului) și ⎕fpc(precizia flotantelor) fac posibilă limitarea dimensiunii afișajelor și precizia flotoarelor extinse la ceea ce este considerat strict necesar.În 2020, versiunea alfa a NARS2000 permite tipul de „interval” variabil indicat de sufixul ±, care se propagă la toate calculele și oferă astfel precizia rezultatului.În 2020, versiunea alfa a NARS2000 permite tipul de „interval” variabil indicat de sufixul ±, care se propagă la toate calculele și oferă astfel precizia rezultatului. Orientat spre cercetare, NARS2000 este echipat în ramura sa alfa (2020) cu aritmetică de interval întreg și extinderea sa la calcule matriciale cu hipercomplexe în virgulă mobilă de precizie numerică arbitrară care permite să dea rezultate ± ceva de îndată ce acest sufix însoțește una dintre constantele calcul. Fiecare rezultat este apoi însoțit de gama sa de semnificație, luând în considerare deficiențele reprezentării în virgulă mobilă și propagate în orice calcul: (√2±)*2 2v±2.4E¯38v ⎕fpc←200 (√2±)*2 2v±5E¯60v ⌹2 2⍴⍳4± ¯2v±6.6E¯60v 1v±3.7E¯60v 1.5v±4E¯60v ¯0.5v±1.7E¯60v a⌹a←2 2⍴⍳4± 1v±3.3E¯60v 0v±5E¯60v 9.334522963E¯61v±1.4E¯60v 1v±3.7E¯60v

Comercial cu intrare gratuită

Variat

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.

Medii IT

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

Glifele

' ( ) + , - . / : ; < = > ? [ ]
\ _ ¨ ¯ × ÷

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.

Fonturi APL existente

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

Tastatură

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:

În jurul limbii

Situația actuală

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 350

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

Câteva păreri

„  APL este o greșeală, dusă la perfecțiune. Este limbajul viitorului pentru tehnicile de programare din trecut: creează o nouă generație de codificatori  ” .„APL este o greșeală, împinsă la perfecțiune. Este limbajul viitorului pentru tehnicile de programare din trecut: creează o nouă generație de slăbiciuni de codare ” . „  APL este un limbaj numai pentru scriere. Pot scrie programe în APL, dar nu pot citi niciunul dintre ele  ” .
„APL este un limbaj numai pentru scriere. Pot scrie programe în APL, dar nu pot citi niciunul dintre ele. " „  APL este ca un diamant. Are o structură cristalină frumoasă; toate părțile sale sunt legate într-un mod uniform și elegant. Dar dacă încercați să extindeți această structură în vreun fel - chiar și prin adăugarea unui alt diamant - veți obține un urât urât  » .„APL este ca un diamant. Are o structură cristalină superbă; toate părțile sale corespund într-un mod uniform și elegant. Dar dacă încercați să extindeți structura în vreun fel - chiar și adăugând un alt diamant - veți obține o clocotire hidoasă . (Aluzie la schimbarea de la APL la APL2).„Nu aș recomanda să puneți APL în mâinile elevilor rapid”.
Profesorul Arsac a insistat în 1978 asupra faptului că în niciun caz nu a pus în discuție interesul limbii în sine)

Lizibilitate

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 bonjour

Probleme semantice

Unele 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ă.

Adresare asociativă

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:

  1. o astfel de extensie ar necesita foarte puține modificări de sintaxă și nu ar necesita niciun program existent;
  2. limbajele moderne permit indexarea după șiruri de caractere (fie indexarea matricelor ca în PHP care autorizează să scrie $ capital ['France'] = 'Paris'; sau prin intermediul obiectelor învecinate, cum ar fi matricile asociative în Perl );
  3. rare sunt aplicațiile în care nu este necesară gestionarea acceselor prin simboluri, mai degrabă decât prin numere. Dacă APL nu o permite imediat, utilizatorul apelează în mod firesc la alte limbi care îi satisfac mai bine nevoile.

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

Abordarea obiectelor și programarea funcțională

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 .

Încercați APL

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.

Documentație

PDF, descărcabil

limba franceza Engleză

Videoclipuri

Cărți

Utilizarea limbajului
  • S. Pommier, Introducere în APL , Dunod,1978( ISBN  2-04-010402-X )(Numele colectiv al unei echipe de la École nationale supérieure des mines de Saint-Étienne  : Jean-Jacques Girardot , Serge Guibout-Ribaut, Bertrand Jullien, François Mireaux și Michel Nakache)
  • Bernard Robinet, Limbajul APL , edițiile TECHNIP,1979
  • Robert Caillibot, Marcel Dupras și Claire Girard, Programare în limbaj APL , Les Presses de l'Université Laval,nouăsprezece optzeci și unu
  • (ro) Sandra Pakin și James A. Brown, APL 2 pe scurt , Prentice-Hall,1988( ISBN  978-0-13-038670-0 )
Fundamentele limbajului
  • (ro) Federico Biancuzzi și Shane Warden, Masterminds of Programming, Conversations with the Creators of Major Programming Languages , O'Reilly, 2009. [capitolul trei: interviu cu Adin Falkoff]
  • (ro) Kenneth Iverson, Un limbaj de programare , John Wiley și Sons , (1962), de asemenea , online .
Managementul obiectelor interne Bibliografie

Articole similare

linkuri externe

Note și referințe

  1. De asemenea, engleză  : Limbaj de programare Array
  2. Kenneth Iverson despre APL
  3. Tastatură APL: făcând clic pe un simbol indică semnificația acestuia
  4. „Puterea reală a APL constă în capacitatea sa de a exprima pur și simplu o idee simplă” (Dyalog)
  5. APL mai trăiește?
  6. Un entuziast descrie Dyalog APL cu entuziasm
  7. „  Implementing a bignum calculator - Rob Pike - golang-syd November 2014  ” [video] , pe YouTube (accesat la 4 august 2020 ) .
  8. „  Robpike / iederă  ” , pe GitHub (accesat pe 9 iunie 2020 ) .
  9. http://www.sudleyplace.com/APL/AplInUnicode.ahtml
  10. (în) [PDF] Istoria APL de Adin Falkoff (IBM)
  11. Ecosistemul Hadoop diapozitivul 5 și următoarele
  12. Iverson și-a numit inițial limba IBM ( Iverson's Better Maths )
  13. TECHNIP: Descrierea echipei IT
  14. OFERTA APL
  15. caută APL pe Google . În 2017, vedem pe harta furnizată de Google că Iranul și Indonezia par să aibă un interes deosebit în această limbă /
  16. APL: tehnologie
  17. Acest exemplu a fost prezentat de Claude Hans într-o broșură internă a centrului științific IBM din Grenoble. A fost preluată de Bernard Robinet în lucrarea sa despre limbă.
  18. La fel cum un primitiv acționează asupra operanzilor , un operator acționează asupra primitivilor. Astfel operatorul (( reducerea ) compune primitivul care îl precede pe totalitatea unui vector. De exemplu + / X ia suma tuturor elementelor lui X, x / X produsul lor etc., care corespunde în algebră semnelor sigma și pi .
  19. (în) [PDF] Numere APL hipercomplex
  20. (ro) Quaternions în APL
  21. Bonusuri
  22. Exemplu: expresia puternică((ρL)ρ⍋⍋LιL,R)ι(ρR)ρ⍋⍋LιR,L
  23. Operator combinator pe seturi
  24. Comanda de sistem )box onpermite în NARS2000 să efectueze o operație ⎕fmtautomată ori de câte ori este necesar, care facilitează învățarea APL (Casetele sunt afișate corect cu fontul SimPL , utilizabil în LibreOffice, dar încă nu în Wikipedia ).
  25. Uneori numit necitată , deoarece inversul funcției de formatare citat (⍕)
  26. Această noțiune a fost apoi preluată în alte limbi ( FORTH , Smalltalk , C ++ ) sub numele de persistență .
  27. Lista APL idiomatică, Yale, 1977
  28. Biblioteca FinnAPL Idiom
  29. Biblioteca de expresii APL2 , IBM Endicott
  30. DyalogAPL: foaie de trișare a expresiilor
  31. Către un lexicon de fraze muzicale APL2 , Stanley Jordan, 1991
  32. http://c2.com/cgi/wiki?AplusLanguage
  33. http://www.aplusdev.org/About/index.html
  34. Exemplu de sesiune în A +
  35. https://www.gnu.org/software/apl/
  36. http://wotho.ethz.ch/mvt4apl-2.00/
  37. http://www.rogerbowler.fr/hercules.htm
  38. http://wiki.nars2000.org/
  39. http://www.nars2000.org/download/Download-body.php
  40. http://wiki.nars2000.org/index.php?title=Platforms
  41. Wine nu acceptă încă oficial 64 de biți în 2014 .
  42. Istoricul detaliat al APL
  43. Joris van der Hoeven, „  Ball arithmetic  ” , la researchgate.net , necunoscut ,8 iunie 2010(accesat la 4 august 2020 ) .
  44. http://wiki.nars2000.org/index.php/Ball_Arithmetic
  45. OpenAPL pe SourceForge
  46. Începând cu 30 iunie 2016, gratuit pentru utilizare strict personală și necomercială se extinde chiar și la versiunea pe 64 de biți, cu excepția Raspberry Pi care rămâne pe 32 de biți.
  47. Morten Kromberg, CTO, Dyalog Ltd. vorbește la Google
  48. APLX gratuit sub Linux pentru uz personal
  49. APLX , de MicroAPL.
  50. Toate versiunile APLX pot fi acum descărcate gratuit .
  51. MCM-70 . Rețineți cele două unități casete integrate, care erau opționale.
  52. http://www.afapl.asso.fr/
  53. TryAPL2 pentru Android , cu o tastatură virtuală tactilă în Magazin Play https://play.google.com/store/apps/details?id=gemesys.keybrd
  54. O scrisoare deschisă către hobbyiști
  55. APL2 versiunea 2
  56. http://wiki.nars2000.org/index.php/Language_Features
  57. http://aplwiki.com/AplCharacters#The_.22APL385_Unicode.22_Font
  58. Acesta este un font de vânătoare fix. De asemenea, este furnizat un font cu lățime proporțională APL333 .
  59. Caracterele subliniate nu sunt totuși reprezentate ca atare
  60. Reatribuiți tastele unei tastaturi Windows , Microsoft
  61. Simbolurile 2336 - 237A.
  62. De exemplu, metafora lui Thierry Breton privind licitația instantanee din secțiunea citată descrie exact primitivul de compresie APL " / ".
  63. Specificații tehnice ale versiunii 17.0 Dyalog APL
  64. Întregul interpret ocupă aproximativ 8 MiB, care este dimensiunea cache-ului unui singur Intel 8565U
  65. / Funcția de sistem ⎕ts returnează timpul ca vector care conține an, lună, zi, oră, minut, secundă și milisecunde. Funcția de sistem ⎕t returnează doar câteva secunde cu zecimale, evaluate la acuratețea ceasului intern al computerului
  66. 45 ms cu versiunea 0.4.14.28 din mai 2016
  67. Interviu, 01 săptămânal
  68. Jacques Arsac pe APL
  69. „Deulignes” din Hebdogiciel .
  70. Pe un terminal cu bile Selectric ca IBM 2741, caracterele ⍟⌹⍱⍲⍋⍒⌿⍞⍕⍝ , pentru a numi doar câteva, trebuiau scrise prin suprapunerea ○ * ⎕∨ ~ ∧∆∣∇ / - ⎕'⊤∘ ⊥∩ , care a fost plictisitor și ucigaș de concentrare. Chiar și ! a necesitat o suprapunere a 'și a .  !
  71. $ capital {'France'} = 'Paris';
  72. http://wiki.nars2000.org/index.php/Associative_indexing
  73. Spații de nume în Dyalog APL
  74. Annales des mines, editura franceză, 1980)