Codul sursă al limbajului de programare APL

Software Gems: The Computer History Museum Historical Source Code Series

Ken Iverson la Universitatea Harvard

Mii de limbaje de programare au fost inventate în primii 50 de ani ai erei informaticii. Multe dintre ele erau similare și multe dintre ele au urmat o cale tradițională, evolutivă față de predecesorii lor.

Dar unele limbaje revoluționare au avut o înclinație care le-a diferențiat de confrații lor mai generaliști. LISP era pentru procesarea listelor. SNOBOL era pentru manipularea șirurilor de caractere. SIMSCRIPT era pentru simulare. Iar APL era pentru matematică, cu accent pe procesarea matricelor.

Ceea ce a devenit în cele din urmă APL a fost inventat pentru prima dată de profesorul de la Harvard Kenneth E. Iverson în 1957 ca o notație matematică, nu ca un limbaj de programare pentru calculatoare. Deși au existat și alte sisteme de simboluri orientate spre matrice, inclusiv notația concisă a tensorilor inventată de Einstein, acestea erau orientate mai mult spre analiza matematică și mai puțin spre sinteza de algoritmi. Iverson, care a fost student al lui Howard Aiken, a predat ceea ce a devenit cunoscut sub numele de „Iverson Notation” studenților săi de la Harvard pentru a explica algoritmii.

Iverson a fost angajat de IBM în 1960 pentru a lucra cu Adin Falkoff și alții la notația sa. În cartea sa, devenită celebră în 1962, „Un limbaj de programare” 1, el spune că notația este destinată descrierii „procedurilor… numite algoritmi sau programe” și că este un limbaj deoarece „prezintă o structură sintactică considerabilă”. Dar, la acel moment, era doar o notație pe care oamenii o puteau citi, nu un limbaj pentru programarea calculatoarelor. Cartea oferă numeroase exemple de utilizare a acestuia atât ca instrument descriptiv (cum ar fi documentarea definiției seturilor de instrucțiuni pentru calculatoare), cât și ca mijloc de exprimare a algoritmilor generali (cum ar fi sortarea și căutarea). Anticipând rezistența față de ceva atât de nou, el spune în prefață: „Teza centrală a acestei cărți este că puterea descriptivă și analitică a unui limbaj de programare adecvat răsplătește cu prisosință efortul considerabil necesar pentru stăpânirea acestuia.” Poate că a avertizat că stăpânirea limbajului nu este banală. Poate că semnala, de asemenea, că, în opinia sa, alte limbaje de notație erau mai puțin decât „adecvate”.

Echipa, desigur, a văzut în curând că notația putea fi transformată într-un limbaj pentru programarea calculatoarelor. Acel limbaj, care a fost numit APL începând din 1966, punea accentul pe manipularea array-urilor și folosea simboluri neconvenționale. Nu semăna cu niciun alt limbaj de programare pentru calculatoare care fusese inventat.

APL a devenit popular atunci când IBM a introdus „APL360” pentru computerul lor mainframe System/360. Spre deosebire de majoritatea celorlalte limbaje de la acea vreme, APL360 era, de asemenea, un mediu de programare interactiv complet. Programatorul, așezat la o mașină de scris electromecanică conectată la un calculator cu partajare de timp, putea tasta instrucțiuni APL și obținea un răspuns imediat. Programele puteau fi definite, depanate, rulate și salvate pe un calculator care era folosit simultan de zeci de alte persoane.

Scrisă în întregime în limbaj de asamblare 360, această versiune de APL prelua controlul întregii mașini. Ea a implementat un sistem complet de operare în timp partajat, pe lângă un limbaj de nivel înalt.

Cu permisiunea IBM, Muzeul de Istorie a Calculatoarelor are plăcerea de a pune la dispoziție codul sursă al versiunii „XM6” din 1969-1972 a APL pentru System/360 pentru uz necomercial.

Filierul text conține 37.567 de linii, care include cod, macro-uri și definiții globale. Cele 90 de fișiere individuale sunt separate prin comenzile ‘./ ADD”. Pentru a avea acces la acest material, trebuie să fiți de acord cu termenii licenței afișate aici, care permite doar utilizarea necomercială și nu vă dă dreptul de a o licenția unor terțe părți prin postarea de copii în altă parte pe web.

Descărcați codul sursă APL360

Jürgen Winkelmann de la ETH Zürich a făcut o treabă extraordinară transformând acest cod sursă într-un sistem executabil. Pentru mai multe informații, consultați MVT pentru APL versiunea 2.00.

Crearea limbajului de programare APL

Cartea lui Iverson „A Programming Language” 1 folosește o notație grafică care ar fi fost dificil de utilizat direct ca limbaj de programare pentru calculatoare. El a considerat-o o extensie a algebrei matriciale și a folosit convenții tipografice matematice obișnuite, cum ar fi subscripte, superscripte și distincții bazate pe greutatea sau fontul caracterelor. Iată, de exemplu, un program de sortare a numerelor:

Pentru a liniariza notația în vederea utilizării ca limbaj de programare pentru calculatoare tastat la o tastatură, implementatorii APL au trebuit cu siguranță să renunțe la utilizarea săgeților etichetate pentru transferurile de control. Dar o caracteristică pe care au reușit să o păstreze, într-o oarecare măsură, a fost utilizarea de simboluri speciale pentru funcțiile primitive, așa cum este ilustrat în acest program care creează coduri Huffman:

APL folosește simboluri care sunt mai apropiate de matematica standard decât de programare. De exemplu, simbolul pentru diviziune este ÷, nu /. Pentru a suporta simbolurile neconvenționale, APL360 a folosit o tastatură concepută special, cu simboluri speciale în majuscule.

APL360 a folosit o tastatură concepută special

Chiar și așa, existau mai multe caractere speciale decât încăpeau pe tastatură, așa că unele au fost tastate prin suprapunerea a două caractere. De exemplu, caracterul „grade up” ⍋, un operator primitiv utilizat pentru sortare, a fost creat prin tastarea ∆ (shift H), apoi backspace, apoi ∣ (shift M). Nu mai era loc atât pentru majuscule, cât și pentru minuscule, așa că APL nu suporta decât majuscule.

Pentru tipărirea programelor, Iverson și Falkoff au obținut de la IBM să proiecteze o bilă tipografică specială pentru terminalele lor 1050 și 2741, care foloseau mecanismul mașinii de scris IBM Selectric.

Acum programele puteau fi atât bătute la mașină, cât și tipărite. Iată, de exemplu, versiunea tipărită a unui program din manualul 2 al limbajului APL care calculează determinantul matematic al unei matrice:

A Taste of APL

APL este un limbaj de programare concis de nivel înalt care diferă de majoritatea celorlalte dezvoltate în anii 1960 în mai multe privințe:

Ordinea de evaluare: Expresiile în APL sunt evaluate de la dreapta la stânga și nu există o ierarhie a precedenței funcțiilor. De exemplu, tastarea expresiei

2×4+3

determină calculatorul să tasteze imediat valoarea rezultată

Valoarea nu este, ca în multe alte limbaje care au precedența operatorilor, 11, așa cum se întâmplă în multe alte limbaje care au precedența operatorilor. Desigur, parantezele pot fi folosite pentru a grupa o subexpresie pentru a schimba ordinea de evaluare. Regula generală este că argumentul drept al oricărei funcții este valoarea expresiei din dreapta sa.

Crearea automată a vectorilor și a matricelor: O structură cu dimensiuni superioare este creată automat prin evaluarea unei expresii care o returnează, iar scalarii pot fi amestecați liber. De exemplu,

A ← 2 + 1 2 3

creează vectorul „1 2 3”, îi adaugă scalarul 2 și creează variabila A pentru a păstra vectorul a cărui valoare este

3 4 5

Variabilele nu sunt niciodată declarate; ele sunt create automat și își asumă dimensiunea și forma oricărei expresii care le este atribuită.

O pletoră de primitive: APL are un set bogat de funcții încorporate (și „operatori” care se aplică funcțiilor pentru a obține funcții diferite) care operează cu scalari, vectori, matrice, chiar și obiecte cu dimensiuni mai mari și combinații ale acestora. De exemplu, expresia de însumare a numerelor din vectorul „A” creat mai sus este pur și simplu

+/A

unde / este operatorul de „reducere” care face ca funcția din stânga să fie aplicată succesiv la toate elementele operandului din dreapta. Expresia pentru a calcula media numerelor din A folosește, de asemenea, funcția primitivă ρ pentru a determina câte elemente există în A:

(+/A) ÷ ρA

Iată câteva tabele din „APL360 User’s Manual” 3 din 1970, care dau o idee despre puterea și sofisticarea funcțiilor și operatorilor APL încorporați. (Faceți clic pe imagini pentru versiuni mai mari.)

APL vă încurajează să vă gândiți diferit la programare și să folosiți structuri temporare de date cu dimensiuni mari ca valori intermediare care sunt apoi reduse folosind primitivele puternice. Un exemplu celebru este următorul program scurt, dar complet, pentru a calcula toate numerele prime până la R.

(~T∊T∘.×T)/T←1↓⍳R

Iată cum se evaluează această expresie:

subexpresia

semnificația

valoarea dacă R este 6

⍳R

Generați un vector de numere de la 1 la R.

1 2 3 4 5 6

T←1↓

Îndepărtați primul element al vectorului și atribuiți restul vectorului temporar T.

2 3 4 5 6

T∘.×T

Creați produsul exterior al înmulțirii: un tabel care conține rezultatul înmulțirii fiecărui element din T cu fiecare element din T.

T∊

Utilizați operatorul „apartenență la set” pentru a afla ce elemente din T se află în tabel.

0 0 0 1 0 0 1

~

Negalizați rezultatul pentru a identifica ce elemente din T nu se află în tabel. Acestea sunt numerele întregi care nu au multipli în tabel.

1 1 1 0 1 0

( )/T

Selectați elementele lui T pe care le-am identificat. Acestea sunt toate numerele prime mai mici decât R.

2 3 5

Rețineți că nu există bucle în acest program. Puterea expresiilor APL înseamnă că ramurile condiționate și buclele sunt necesare mult mai rar decât în limbajele de programare mai tradiționale.

Operatorii APL pot fi utilizați în moduri simple pentru tot felul de calcule care ar necesita de obicei bucle. De exemplu, o expresie care calculează numărul de elemente ale vectorului X care sunt mai mari decât 100 este

+/X>100

Funcționează pentru că X>100 returnează un vector de biți de 0 și 1 care arată ce elemente din X sunt mai mari decât 100, iar +/ însumează toți biții din acel vector.

Dar execuția condiționată și buclele sunt, desigur, uneori necesare. În lumina dezvoltărilor ulterioare în programarea structurată, singura primitivă a APL pentru transferul de control, instrucțiunea „GO TO LINE x” →, este deosebit de slabă. Iată un exemplu de funcție care calculează cel mai mare divizor comun al celor două argumente ale sale. Ultimul enunț creează o buclă prin branșarea la început. În linia 2, transferul condiționat al controlului la linia 0 face ca funcția să iasă și să returneze ultima valoare atribuită lui G.

Pentru a afla mai multe despre limbajul APL din anii 1960, consultați manualul de referință „APL Language” 2 și „APL360 Primer” 4 al lui Paul Berry din 1969.

Limbajul a evoluat, desigur, de-a lungul anilor, iar versiunile mai recente includ structuri de control precum IF-THEN-ELSE.

Cum a fost implementat APL

Prima implementare pe calculator a notației APL a fost un interpretor de limbaj orientat pe loturi, scris în FORTRAN în 1965 pentru calculatorul mainframe IBM 7090, de către Larry Breed de la IBM Research Center din Yorktown Heights NY și Philip Abrams, pe atunci student absolvent la Universitatea Stanford.

Prima versiune interactivă a fost scrisă la scurt timp după aceea pentru 7093 (un 7090 experimental cu memorie virtuală) de către Larry Breed și Roger Moore. Acesta a rulat sub sistemul de partajare a timpului TSM și a fost numit în mod capricios „IVSYS”, care rimează cu „IBSYS”, numele pentru sistemul de operare standard 7090. Într-un e-mail din 2012, Breed spune,

IVSYS oferea logare, deconectare, execuție imediată și definirea funcțiilor; oferea spații de lucru, atât active, cât și stocate. Implementarea acestora a fost rudimentară; în cea mai mare parte am folosit ceea ce ne oferea proiectul TSM pentru logare/logout/salvare fișiere. Am avut la dispoziție doar câteva săptămâni pentru a utiliza 7093 înainte ca acesta să fie scos din uz, iar Roger și cu mine am început să planificăm un sistem autonom pe System/360. În acele săptămâni, Ken și grupul său au văzut pentru prima dată cum ar fi APL executabil.

O altă implementare a unui subansamblu al limbajului a fost realizată în 1967 pentru minicalculatorul IBM 1130.

Prima implementare a APL care a obținut o utilizare pe scară largă în afara IBM a fost pentru IBM System/360. Denumită „APL360”, aceasta a intrat în funcțiune mai întâi în cadrul IBM în noiembrie 1966. (Notația „APL360″, deoarece backslash-ul era operatorul de „expansiune” APL, avea și o semnificație ascunsă: „APL extinde 360″).

Breed spune despre perioada imediat anterioară,

Această perioadă, începutul anului 1966, a fost perioada de tranziție de la Iverson Notation la APL. (Într-adevăr, Adin a venit cu „APL” în primăvara lui ’66.) Perfecționarea și extinderea limbajului și a mediului au continuat timp de mulți ani. Nu s-a adăugat aproape deloc cod pentru a face o versiune comercială, ci doar birocrație.

Până în august 1968 APL360 era disponibil clienților IBM ca program nesusținut („Type III”) în „Contributed Program Library” 5 a IBM. Principalii implementatori au fost Larry Breed, Dick Lathwell și Roger Moore; alții care au contribuit au fost Adin Falkoff și Luther Woodrum.

Primarii dezvoltatori APL, de la stânga la dreapta: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. Fotografia a fost făcută în jurul anului 1983.

Din cauza naturii dinamice a variabilelor APL, APL360 a fost implementat ca un interpretor, nu ca un compilator care să genereze cod mașină. Programele erau stocate într-o formă internă numită „codestring” care corespundea direct cu ceea ce a tastat utilizatorul. Interpretul examina apoi codestringul pe măsură ce programul se executa și aloca și reconfigura dinamic variabilele pe măsură ce expresiile erau evaluate.

Primele versiuni ale APL360 au preluat controlul întregii mașini. Acesta a fost astfel o combinație de sistem de operare, sistem de fișiere, monitor de partajare a timpului, interpretor de comenzi și limbaj de programare. Având în vedere că memoria principală era limitată, spațiile de lucru ale utilizatorului erau schimbate pe tambur sau pe disc în funcție de necesități. Performanța a fost impresionantă, pe care Larry Breed o atribuie, în descrierea sa clară și succintă a implementării 6, capacității de a adapta sistemul de operare la cerințele limbajului.

APL360 a fost un limbaj conversațional care a oferit un răspuns rapid și o execuție eficientă pentru până la 50 de utilizatori simultani. Fiecare utilizator avea un „spațiu de lucru activ” care conținea programe, variabile și starea de execuție a programului suspendat. Comenzile de sistem precum „)LOAD”, „)SAVE” și „)COPY” mențineau biblioteca de spații de lucru stocate a utilizatorului. Alte comenzi de sistem controlau caracteristicile limbajului; de exemplu, cu „)ORIGIN” programatorul putea controla dacă vectorii și array-urile sunt numerotate începând cu 0 sau 1.

APL a fost prima introducere în timesharing-ul interactiv pentru mulți din generația de programatori care au suferit prin programarea pe loturi cu cartele perforate.

Aplicații ale APL

Înainte de a fi un limbaj de programare pentru calculatoare, Iverson Notation a fost util ca limbaj de documentare a algoritmilor pentru oameni. Exemplul clasic este definiția formală a arhitecturii setului de instrucțiuni a noului calculator IBM System/360, care a fost publicată într-un articol în IBM Systems Journal de Adin Falkoff, Ken Iverson și Ed Sussenguth în 1965 7.

Descrierea, care este mai degrabă formală decât verbală, este realizată printr-un set de programe, care interacționează prin variabile comune, utilizate împreună cu tabele auxiliare… Deși descrierea formală este completă și de sine stătătoare, textul este furnizat ca un ajutor pentru studiul inițial.

Dar textul furnizat în lucrare este mult mai mult decât atât. Este o explicație linie cu linie a descrierii formale, ceea ce înseamnă că este, de asemenea, o demonstrație și o explicație a puterii descriptive a APL.

Notația a folosit stilul grafic pentru transferurile de control care era în cartea lui Iverson. Iată, de exemplu, descrierea unei operații de acces la memorie. (Faceți clic pe ea pentru a o mări.)

A fost tranziția APL de la o notație pentru publicare la un limbaj interactiv de programare pe calculator care l-a făcut să înflorească. Când a fost disponibilă implementarea APL360, IBM și alții au stimulat utilizarea prin producerea de aplicații diverse, cum ar fi acestea:

  • Starmap: Un set de funcții APL pentru a calcula și trasa pozițiile stelelor și planetelor. 8 9 A fost scris în 1973 de Paul Berry de la IBM și John Thorstensen, pe atunci student la astronomie la colegiul Bryn Mawr, în prezent profesor de fizică și astronomie la Dartmouth College. Folosește soluții clasice ale ecuațiilor lui Kepler pentru o anumită dată și oră și o serie de rotații de coordonate pentru a arăta unde ar apărea planetele și stelele în bolta cerească.
  • IBGS: Joc interactiv de simulare a jocurilor de afaceri: „O simulare generală de management pe calculator care implică luarea deciziilor și planificarea în domeniile funcționale ale producției, marketingului și finanțelor.”
  • Zerouri și integrale în APL: „Utilizând atât metode clasice, cum ar fi cele ale lui Newton și Muller, cât și metode dezvoltate recent, cum ar fi cele ale lui Jenkins și Traub, se găsesc zerouri reale ale unei funcții reale, zerouri reale și complexe ale unui polinom cu coeficienți reali sau complecși și zerouri complexe ale unei funcții complexe.”
  • Graphpak – Interactive Graphics Package for APL360: „…capabilități care variază de la suportul interfeței grafice la nivelul cel mai de jos până la mai multe domenii de aplicații la niveluri superioare…O componentă de trasare…liniară sau logaritmică…ajustare a curbelor…O componentă de geometrie descriptivă permite definirea, scalarea, mărirea, translatarea, rotația și afișarea proiectată a obiectelor tridimensionale.”
  • Grafice și histograme în APL: „produce curbe și diagrame de bare la un terminal de mașină de scris”.”
  • APL Coordinate Geometry System: „rezolvă probleme de geometrie în coordonate în mod interactiv la un terminal… pentru a fi folosit de topografi, ingineri civili, urbaniști…”
  • APL/PDTS – Programming Development Tracking System: „…pentru a asista managerii și planificatorii în monitorizarea performanțelor în raport cu planul privind proiectele de dezvoltare a programării.” MINIPERT: „A Critical Path Method (CPM) system for Project Management”
  • APL Econometric Planning Language: „Economistului practicant, previzionistului de afaceri sau profesorului i se pun la dispoziție instrumente ușor de utilizat pentru construirea și rezolvarea interactivă a modelelor.”
  • APL Financial Planning System: „permite analistului și planificatorului financiar să proiecteze rapoarte, să specifice declarații de calcul, să introducă și să modifice date și să obțină rapoarte tipărite cu livrare imediată.”
  • APL Text Editor and Composer: „Acest program este conceput pentru procesarea interactivă a textului la un terminal… Sunt incluse funcții pentru introducerea, revizuirea, compunerea, imprimarea și stocarea textului… pentru utilizare de către secretare, oameni de știință, ingineri, administratori sau orice alte persoane care produc documente, scrisori, rapoarte sau specificații.”

Multe dintre aceste aplicații au pus accentul pe interactivitate, ceea ce a oferit o creștere uriașă a productivității în comparație cu procesarea pe loturi mai tipică la acea vreme. În plus, APL a permis ca aplicațiile să fie dezvoltate mult mai rapid. Într-un e-mail din 2012, Larry Breed nota,

În toate domeniile, viteza cu care pot fi scrise programele APL îl face valoros pentru modelare și prototipuri … Un exemplu: În jurul anului 1973, Continental Can avea nevoie de un sistem de inventariere pentru cele 21 de fabrici ale sale. Echipa lor de programatori FORTRAN a lucrat timp de un an, fără niciun succes la vedere. Un agent de vânzări STSC a construit, într-un weekend, un model funcțional utilizabil în APL Plus.

Domeniile în care APL a avut cea mai mare penetrare au fost în aplicațiile științifice, actuariale, statistice și financiare. Pentru detalii despre evoluția APL în primii 25 de ani, vezi numărul special din 1991 al revistei IBM System Journal 10 cu 12 articole și un eseu pe această temă.

Elogii și critici la adresa APL APL nu a fost conceput inițial ca un limbaj de programare. După cum spunea Iverson,

Motivul inițial pentru dezvoltarea APL a fost acela de a oferi un instrument pentru scriere și predare. Deși APL a fost exploatat mai ales în programarea comercială, eu continui să cred că cea mai importantă utilizare a sa rămâne de exploatat: ca o notație simplă, precisă și executabilă pentru predarea unei game largi de subiecte.11

Cu atât de multe simboluri laconice și neobișnuite, programele de calculator APL, ca și notația matematică care l-a inspirat, au o concizie și o eleganță pe care mulți le găsesc atrăgătoare. APL atrage adepți fanatici. Alan Perlis (primul laureat al Premiului Turing al ACM, în 1966) a fost unul dintre ei:

Trecerea ochiului peste o singură propoziție poate expune o interacțiune complexă, ingenioasă și frumoasă de operare și control care, în alte limbaje de programare, este observabilă doar în câteva pagini de text. Se începe să se aprecieze apariția și semnificația stilului. 12

Multora li se pare eliberatoare libertatea de exprimare din APL.

Obișnuiam să îl descriu ca fiind un „limbaj de programare fascist”, deoarece este rigid din punct de vedere dictatorial. …Dacă Pascal este fascist, APL este anarhist. 13

Dar programele APL sunt adesea criptice și greu de decodificat. Unii au glumit spunând că este un „limbaj numai pentru scriere”, deoarece chiar și autorul unui program ar putea avea probleme în a-l înțelege ulterior. Acesta inspiră trucuri de programare. Provocarea de a scrie un „one-liner” APL pentru a implementa un algoritm complex complet este greu de rezistat. Iată, de exemplu, două „one-liners” APL diferite care implementează versiuni ale „Game of Life” al lui John Conway:

life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}

Nu pentru cei slabi de inimă, în mod clar. Informaticianul olandez Edsger Dijkstra a spus,

APL este o greșeală, dusă până la perfecțiune. Este limbajul viitorului pentru tehnicile de programare ale trecutului: creează o nouă generație de vagabonzi programatori. 14

Dar fanii APL ar spune că codificarea criptografică APL este un stil de programare prost care poate fi o afecțiune a oricărui limbaj. APL oferă o paletă mai bogată pentru exprimarea algoritmilor, spune argumentul, astfel încât puteți rezolva probleme mai dificile mai repede și cu mai puțină dezordine sintactică irelevantă.

Cu orice părere aveți, APL și limbajele pe care le-a inspirat, cum ar fi APL2 și J, sunt încă o parte activă a universului divers de limbaje de programare.

O scurtă biografie a lui Ken Iverson

Kenneth Eugene Iverson s-a născut la 17 decembrie 1920 la o fermă din apropierea Camrose, Alberta, Canada. A fost educat în școlile rurale cu o singură cameră până la sfârșitul clasei a 9-a, când a abandonat școala pentru că era în plină criză economică și avea de lucru la ferma familiei. Mai târziu a declarat că singurul scop al continuării școlii ar fi fost acela de a deveni învățător, iar aceasta era o profesie pe care cu siguranță nu și-o dorea. În timpul lunilor lungi de iarnă a studiat calculul pe cont propriu.

A fost înrolat în 1942, iar în timpul serviciului militar a urmat suficiente cursuri prin corespondență pentru a termina aproape complet liceul. După serviciul militar a obținut o diplomă de licență atât în matematică, cât și în fizică la Universitatea Queen’s din Kingston, Ontario, și apoi un masterat în fizică la Universitatea Harvard. În 1954 a obținut un doctorat sub îndrumarea pionierului în domeniul calculatoarelor, Howard Aiken, cu o teză intitulată „Machine Solutions of Linear Differential Equations: Applications to a Dynamic Economic Model”.

După terminarea doctoratului, Iverson s-a alăturat facultății de la Harvard pentru a preda în noul program de prelucrare automată a datelor al lui Aiken. A stat acolo timp de un an ca instructor și timp de cinci ani ca profesor asistent. A devenit din ce în ce mai frustrat de inadecvarea notațiilor matematice convenționale pentru exprimarea algoritmilor, așa că a început să își inventeze propriile noțiuni.

În 1960, Iverson s-a alăturat noului centru de cercetare IBM din Yorktown Heights, New York, la sfatul lui Frederick Brooks, care fusese unul dintre bursierii săi de predare la Harvard și care acum era la IBM. Cei doi au colaborat la dezvoltarea continuă a noii notații. În 1962, Ken a publicat cartea devenită clasică „A Programming Language” 1, al cărei titlu a dat numele APL notației care până atunci fusese numită neoficial „notația lui Iverson”.

Iverson a continuat să lucreze la dezvoltarea APL pe toată durata mandatului său la IBM. În 1980 a părăsit IBM și s-a întors în Canada pentru a lucra pentru I.P. Sharp Associates, care înființase un serviciu de timesharing bazat pe APL.

În 1987 s-a „retras din activitatea salariată” și și-a îndreptat întreaga atenție către dezvoltarea unui dialect mai modern al APL. APL era folosit cu succes în scopuri comerciale, dar Iverson dorea să dezvolte o nouă notație executabilă simplă, mai potrivită pentru predare, care să fie disponibilă la un cost redus. Prima implementare a acestui limbaj, numită J, a fost anunțată la Conferința utilizatorilor APL90.

Capacitatea lui Iverson de a crea astfel de limbaje venea din „simpla sa plăcere pentru limbaj și cuvinte”, își amintește fiica sa Janet Cramer. „El citea dicționarele așa cum oamenii citesc romane”. Iverson credea că era important ca limbajul, atât cel englezesc cât și cel matematic, să comunice clar și concis.

Cu colaboratori printre care se număra și fiul său Eric, Iverson a continuat să lucreze la dezvoltarea lui J și a continuat să publice prolific. Sâmbătă, 16 octombrie 2004, a suferit un atac cerebral – în timp ce lucra la un tutorial J – și a murit trei zile mai târziu, pe 19 octombrie, la vârsta de 83 de ani.

Există multe povești despre Ken Iverson. Iată câteva:

Ken nu a fost titularizat la Harvard. Și-a făcut cei cinci ani ca profesor asistent, iar facultatea a decis să nu-l pună la promoție. L-am întrebat ce nu a mers bine și mi-a spus: „Ei bine, decanul m-a chemat și mi-a spus: „problema este că nu ai publicat nimic în afară de o singură cărticică””. Acea cărticică a primit mai târziu Premiul Turing. Cred că acesta este mai degrabă un comentariu despre mentalitatea convențională a procedurilor de promovare decât un comentariu despre Ken; este un comentariu despre procedura academică și despre Harvard.

– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30

Într-un discurs timpuriu, Ken explica avantajele comparației tolerante. Un membru al audienței a întrebat neîncrezător: „Cu siguranță nu vreți să spuneți că atunci când A=B și B=C, este posibil ca A să nu fie egal cu C?”. Fără să sară o secundă, Ken a răspuns: „Orice tâmplar știe asta!” și a trecut la următoarea întrebare.

– Paul Berry

Într-o conversație socială cu Ken, i-am spus: „Știi, Ken, tu ești designerul meu preferat de limbaje, iar Don Knuth este programatorul meu preferat”. Iar Ken a spus imediat: „Ce e în neregulă cu programarea mea?”.

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

În 1973 sau 1974, Ken și cu mine am ținut o conferință la Kodak în Rochester pentru un grup de 40-50 de programatori care trebuiau să lucreze în PL/I. În timpul perioadei de întrebări, un membru senior al personalului a spus: „Dacă înțeleg ce spuneți voi, sugerați că ar trebui să adoptăm un nou mod de gândire”. Iar Ken a sărit de pe scaun și a spus: „Da, exact asta spun!”.

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

Recunoștințe

Mulțumesc lui Michael Karasick, Yvonne Perkins, Steve Selbst și Ken Edwards de la IBM pentru că au pus capăt odiseei mele de zece ani de a obține permisiunea de a publica codul sursă APL. Mulțumiri lui Curtis Jones, Larry Breed, Paul Berry și Roy Sykes pentru comentariile lor la o primă versiune a acestui articol.

– Len Shustek

Bibliografie

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
  2. IBM, „APL Language”, martie 1975.
  3. IBM, „APL360 User’s Manual”, martie 1970.
  4. IBM, Paul Berry, „APL360 Primer – Student Text”, 1969.
  5. L. M. Breed și R. H. Lathwell, „APL360”, 1968.
  6. L. M. Breed și R. H. Lathwell, „The Implementation of APL360”, în ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
  7. A. D. Falkoff, K. E. Iverson și E. H. Sussenguth, „A Formal Description of SYSTEM/360”, IBM Systems Journal, vol. 3, nr. 3, pp. 198-261, 1964.
  8. P. C. Berry și J. R. Thorstensen, „Starmap,” 1978.
  9. P. C. Berry și J. R. Thorstensen, „Starmap,” IBM Systems Development Division, 1975.
  10. IBM Systems Journal, vol. 30, nr. 4, 1991.
  11. K. E. Iverson, „A Personal View of APL”, IBM Systems Journal, vol. 30, nr. 4, 1991.
  12. A. J. Perlis, „In Praise of APL: A Language for Lyrical Programming,” SIAM News, iunie 1977.
  13. B. McCormick, „A Programming Language,” 2000,2002.
  14. E. W. Dijkstra, „How Do We Tell Truths That Might Hurt?”,” SIGPLAN Notices, vol. 17, nr. 5, mai 1982.
  15. A. D. Falkoff și K. E. Iverson, „The Design of APL,” IBM Journal of Research and Development, vol. 17, nr. 4, 1973.
  16. A. D. Falkoff și K. E. Iversion, „The Evolution of APL”, SIGPLAN Notices, vol. 13, nr. 8, pp. 45-57, august 1978.
  17. L. Breed, „How We Got to APL1130”, 10 mai 2004.
  18. ACM, „Proceedings of the APL’69 Conference on APL”, SUNY Binghamton, NY, 1969.
  19. „The Origins of APL – 1974”; un interviu minunat cu dezvoltatorii originali ai APL.

Historical Source Code Releases

  • MacPaint and QuickDraw Source Code, July 18, 2010
  • APL Programming Language Source Code, October 10, 2012
  • Adobe Photoshop Source Code, February 13, 2013
  • Apple II DOS Source Code, November 12, 2013
  • Microsoft MS-DOS Early Source Code, March 25, 2014
  • Microsoft Word for Windows Version 1.1a Source Code, 25 martie 2014
  • Early Digital Research CP/M Source Code, 1 octombrie 2014
  • Xerox Alto Source Code, 21 octombrie 2014
  • Electronic Arts DeluxePaint Early Source Code, 22 iulie 2015

Lasă un răspuns

Adresa ta de email nu va fi publicată.