The APL Programming Language Source Code

Software Gems: The Computer History Museum Historical Source Code Series

Ken Iverson at Harvard University

In de eerste 50 jaar van het computertijdperk zijn er duizenden programmeertalen uitgevonden. Velen van hen waren vergelijkbaar, en velen volgden een traditioneel, evolutionair pad van hun voorgangers.

Maar sommige revolutionaire talen hadden een inslag die hen onderscheidde van hun meer algemeen toepasbare broeders. LISP was voor lijstverwerking. SNOBOL was voor het manipuleren van strings. SIMSCRIPT was voor simulatie. En APL was voor wiskunde, met de nadruk op array verwerking.

Wat uiteindelijk APL werd, werd voor het eerst uitgevonden door Harvard professor Kenneth E. Iverson in 1957 als een wiskundige notatie, niet als een computer programmeertaal. Hoewel er andere matrix-georiënteerde symboolsystemen bestonden, waaronder de beknopte tensor notatie uitgevonden door Einstein, waren deze meer gericht op wiskundige analyse en minder op de synthese van algoritmen. Iverson, die een student was van Howard Aiken, leerde zijn Harvard studenten wat bekend werd als “Iverson Notation” om algoritmen uit te leggen.

Iverson werd in 1960 door IBM ingehuurd om met Adin Falkoff en anderen aan zijn notatie te werken. In zijn nu beroemde boek “A Programming Language” 1 uit 1962, zegt hij dat de notatie bedoeld is voor de beschrijving van “procedures…algoritmen of programma’s genaamd”, en dat het een taal is omdat het “een aanzienlijke syntactische structuur vertoont”. Maar op dat moment was het gewoon een notatie voor mensen om te lezen, niet een taal voor het programmeren van computers. Het boek geeft vele voorbeelden van het gebruik ervan, zowel als een beschrijvend instrument (zoals voor het documenteren van de definitie van computer instructiesets) als een middel om algemene algoritmen uit te drukken (zoals voor sorteren en zoeken). Vooruitlopend op weerstand tegen zoiets nieuws, zegt hij in het voorwoord: “Het is de centrale stelling van dit boek dat de beschrijvende en analytische kracht van een adequate programmeertaal ruimschoots de aanzienlijke inspanning vergoedt die nodig is om het onder de knie te krijgen.” Misschien waarschuwde hij dat het beheersen van de taal niet triviaal was. Misschien gaf hij ook aan dat, in zijn ogen, andere notatietalen minder dan “adequaat” waren.

Het team zag natuurlijk al snel in dat de notatie kon worden omgezet in een taal voor het programmeren van computers. Die taal, die vanaf 1966 APL werd genoemd, legde de nadruk op array-manipulatie en gebruikte onconventionele symbolen. Het was als geen andere computer programmeertaal die was uitgevonden.

APL werd populair toen IBM “APL360” introduceerde voor hun System/360 mainframe computer. In tegenstelling tot de meeste andere talen in die tijd, was APL360 ook een complete interactieve programmeeromgeving. De programmeur, zittend op een elektromechanische typemachine gekoppeld aan een timeshared computer, kon APL statements typen en een onmiddellijk antwoord krijgen. Programma’s konden worden gedefinieerd, gedebugd, uitgevoerd en opgeslagen op een computer die tegelijkertijd door tientallen andere mensen werd gebruikt.

Wordt volledig in 360 assembleertaal geschreven, deze versie van APL nam de controle over de hele machine over. Het implementeerde een compleet timesharing besturingssysteem naast een high-level taal.

Met toestemming van IBM is het Computer History Museum verheugd de broncode van de 1969-1972 “XM6” versie van APL voor het System/360 beschikbaar te stellen voor niet-commercieel gebruik.

Het tekstbestand bevat 37.567 regels, die code, macro’s en globale definities bevatten. De 90 individuele bestanden worden gescheiden door ‘./ ADD” commando’s. Om toegang te krijgen tot dit materiaal, moet u akkoord gaan met de voorwaarden van de licentie die hier wordt weergegeven, die alleen niet-commercieel gebruik toestaat en u niet het recht geeft om het aan derden in licentie te geven door kopieën elders op het web te plaatsen.

Download APL360 Bron Code

Jürgen Winkelmann aan de ETH Zürich heeft geweldig werk verricht door deze broncode in een uitvoerbaar systeem om te zetten. Voor meer informatie, zie MVT voor APL Versie 2.00.

Creatie van de APL Programmeertaal

Iverson’s boek “A Programming Language” 1 gebruikt een grafische notatie die moeilijk direct te gebruiken zou zijn geweest als een programmeertaal voor computers. Hij beschouwde het als een uitbreiding van de matrixalgebra, en gebruikte gebruikelijke wiskundige typografische conventies zoals subscripts, superscripts, en onderscheidingen op basis van het gewicht of lettertype van tekens. Hier is bijvoorbeeld een programma voor het sorteren van getallen:

Om de notatie te lineariseren voor gebruik als een computer programmeertaal getypt op een toetsenbord, moesten de APL implementeerders zeker het gebruik opgeven van gelabelde pijlen voor controle overdrachten. Maar een eigenschap die ze tot op zekere hoogte konden behouden was het gebruik van speciale symbolen voor primitieve functies, zoals geïllustreerd in dit programma dat Huffman codes maakt:

APL gebruikt symbolen die dichter bij standaard wiskunde staan dan bij programmeren. Het symbool voor delen is bijvoorbeeld ÷, niet /. Om de onconventionele symbolen te ondersteunen, gebruikte APL360 een speciaal ontworpen toetsenbord met speciale symbolen in hoofdletters.

APL360 gebruikte een speciaal ontworpen toetsenbord

Zelfs waren er meer speciale tekens dan op het toetsenbord pasten, dus werden sommige getypt door twee tekens te overschrijven. Bijvoorbeeld, het “grade up” karakter ⍋, een primitieve operator gebruikt voor sorteren, werd gecreëerd door het typen van ∆ (shift H), dan backspace, dan ∣ (shift M). Er was geen ruimte meer voor zowel hoofdletters als kleine letters, dus APL ondersteunde alleen hoofdletters.

Voor het afdrukken van programma’s kregen Iverson en Falkoff IBM zover om een speciale type bal te ontwerpen voor hun 1050 en 2741 terminals, die gebruik maakten van het IBM Selectric typemachine mechanisme.

Nu konden programma’s zowel worden ingetypt als afgedrukt. Hier is bijvoorbeeld de afgedrukte versie van een programma uit de APL Language manual 2 dat de wiskundige determinant van een matrix berekent:

A Taste of APL

APL is een beknopte programmeertaal op hoog niveau die in verschillende opzichten verschilt van de meeste andere die in de jaren zestig zijn ontwikkeld:

Order van evaluatie: Uitdrukkingen in APL worden van rechts naar links geëvalueerd, en er is geen hiërarchie van functievoorrang. Als u bijvoorbeeld de uitdrukking

2×4+3

intypt, typt de computer onmiddellijk de resulterende waarde

De waarde is niet, zoals in veel andere talen die operatorenvoorrang hebben, 11. Natuurlijk kunnen haakjes gebruikt worden om een subexpressie te groeperen en zo de evaluatievolgorde te veranderen. De algemene regel is dat het rechter argument van een functie de waarde is van de uitdrukking rechts ervan.

Automatische creatie van vectoren en arrays: Een hoger-dimensionale structuur wordt automatisch gecreëerd door een uitdrukking te evalueren die deze teruggeeft, en scalars kunnen vrijelijk worden gemengd.

A ← 2 + 1 2 3

maakt bijvoorbeeld de vector “1 2 3”, voegt er de scalar 2 aan toe en maakt de variabele A om de vector te bevatten waarvan de waarde

3 4 5

Variabelen worden nooit gedeclareerd; ze worden automatisch gemaakt en nemen de grootte en vorm aan van de uitdrukking die aan hen is toegewezen.

Een overvloed aan primitieven: APL heeft een rijke verzameling ingebouwde functies (en “operatoren” die op functies worden toegepast om verschillende functies te verkrijgen) die werken op scalairen, vectoren, arrays, zelfs hoger-dimensionale objecten, en combinaties daarvan. Bijvoorbeeld, de uitdrukking om de getallen in de hierboven gecreëerde vector “A” op te tellen is eenvoudigweg

+/A

waarbij / de “reductie”-operator is die ervoor zorgt dat de functie links achtereenvolgens wordt toegepast op alle elementen van de operand rechts. De uitdrukking om het gemiddelde van de getallen in A te berekenen gebruikt ook de primitieve functie ρ om te bepalen hoeveel elementen er in A zijn:

(+/A) ÷ ρA

Hier volgen enkele tabellen uit de “APL360 User’s Manual” 3 uit 1970 die een indruk geven van de kracht en verfijning van de ingebouwde APL-functies en operatoren. (Klik op de afbeeldingen voor grotere versies.)

APL moedigt u aan om anders te denken over programmeren, en om tijdelijke hoog-dimensionale datastructuren te gebruiken als tussenwaarden die vervolgens worden gereduceerd met behulp van de krachtige primitieven. Een beroemd voorbeeld is het volgende korte maar complete programma om alle priemgetallen tot en met R te berekenen.

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

Hier ziet u hoe deze uitdrukking wordt geëvalueerd:

subexpressie

betekenis

waarde als R 6 is

⍳R

Genereer een vector van getallen van 1 tot R.

1 2 3 4 5 6

T←1↓

Laat het eerste element van de vector vallen en wijs de rest toe aan de tijdelijke vector T.

2 3 4 5 6

T∘.×T

Maak het buitenproduct van de vermenigvuldiging: een tabel die het resultaat bevat van de vermenigvuldiging van elk element van T met elk element van T.

T∊

Gebruik de “set membership” operator om te vinden welke elementen van T in de tabel voorkomen.

0 0 1 0 1

~

Neg het resultaat om vast te stellen welke elementen van T niet in de tabel voorkomen. Dit zijn de gehele getallen die geen veelvouden in de tabel hebben.

1 1 0 1 0

( )/T

Selecteer de elementen van T die we hebben geïdentificeerd. Dit zijn alle priemgetallen kleiner dan R.

2 3 5

Merk op dat er geen lussen in dit programma zitten. De kracht van APL expressies betekent dat voorwaardelijke vertakkingen en lussen veel minder vaak nodig zijn dan in meer traditionele programmeertalen.

APL operatoren kunnen op eenvoudige manieren worden gebruikt voor allerlei berekeningen waarvoor gewoonlijk lussen nodig zouden zijn. Een uitdrukking die bijvoorbeeld het aantal elementen van de vector X berekent dat groter is dan 100 is

+/X>100

Het werkt omdat X>100 een bitvector van 0’s en 1’s oplevert die aangeeft welke elementen van X groter zijn dan 100, en +/ telt alle bits in die vector op.

Maar voorwaardelijke uitvoering en lussen zijn natuurlijk soms nodig. In het licht van latere ontwikkelingen in gestructureerd programmeren, is APL’s enige primitieve voor controle-overdracht, het “GO TO LINE x” statement →, bijzonder zwak. Hier is een voorbeeld van een functie die de grootste gemene deler van zijn twee argumenten berekent. Het laatste statement creëert een lus door naar het begin te vertakken. In regel 2 zorgt de voorwaardelijke overdracht van controle naar regel 0 ervoor dat de functie wordt beëindigd en de waarde teruggeeft die het laatst aan G is toegewezen.

Om meer te weten te komen over de APL taal uit de jaren 1960, zie de “APL Language” referentiehandleiding 2 en Paul Berry’s “APL360 Primer” 4 uit 1969.

De taal is natuurlijk in de loop der jaren geëvolueerd, en recentere versies bevatten controlestructuren zoals IF-THEN-ELSE.

Hoe APL werd geïmplementeerd

De eerste computer implementatie van APL notatie was een batch-georiënteerde taalinterpreter geschreven in FORTRAN in 1965 voor de IBM 7090 mainframe computer, door Larry Breed in het IBM Research Center in Yorktown Heights NY en Philip Abrams, toen een afgestudeerde student aan de Stanford University.

De eerste interactieve versie werd kort daarna geschreven voor de 7093 (een experimentele 7090 met virtueel geheugen) door Larry Breed en Roger Moore. Het draaide onder het TSM timesharing systeem en werd grillig “IVSYS” genoemd, wat rijmt op “IBSYS”, de naam voor het standaard 7090 besturingssysteem. In een e-mail uit 2012 zegt Breed,

IVSYS bood login, logout, onmiddellijke uitvoering en functiedefinitie; het bood werkruimten, zowel actief als opgeslagen. De implementatie hiervan was rudimentair; meestal gebruikten we wat het TSM project ons bood voor login/logout/opslaan van bestanden. We hadden slechts een paar weken om de 7093 te gebruiken voordat het buiten gebruik werd gesteld en Roger en ik begonnen met de planning voor een standalone systeem op System/360. In die weken zagen Ken en zijn groep voor het eerst wat uitvoerbare APL zou zijn.

Een andere implementatie van een subset van de taal werd gedaan in 1967 voor de IBM 1130 minicomputer.

De eerste implementatie van APL die wijdverbreid gebruik kreeg buiten IBM was voor het IBM System/360. Genaamd “APL360”, ging het eerst in gebruik binnen IBM in november 1966. (De notatie “APL360″, aangezien de backslash de APL “expansion” operator was, had ook een verborgen betekenis: “APL breidt de 360″).

Breed zegt over de tijd vlak daarvoor,

Deze periode, begin 1966, was de overgangstijd van Iverson Notation naar APL. (Inderdaad, Adin kwam met “APL” in de lente van ’66.) Verfijning en uitbreiding van de taal en de omgeving gingen vele jaren door. Er werd bijna geen code toegevoegd om een commerciële versie te maken, alleen papierwerk.

In augustus 1968 was APL360 beschikbaar voor IBM klanten als een niet-ondersteund (“Type III”) programma in IBM’s “Contributed Program Library” 5. De belangrijkste implementeerders waren Larry Breed, Dick Lathwell, en Roger Moore; anderen die hadden bijgedragen waren Adin Falkoff en Luther Woodrum.

Eerdere APL ontwikkelaars, van links naar rechts: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. De foto is genomen omstreeks 1983.

Omwille van het dynamische karakter van APL variabelen, werd APL360 geïmplementeerd als een interpreter, niet als een compiler die machine code genereerde. Programma’s werden opgeslagen in een interne vorm die een “codestring” werd genoemd en die rechtstreeks overeenkwam met wat de gebruiker had getypt. De interpreter onderzocht vervolgens de codestring tijdens de uitvoering van het programma en kende dynamisch variabelen toe en herconfigureerde deze naarmate expressies werden geëvalueerd.

De eerste versies van APL360 namen de controle over de gehele machine over. Het was dus een combinatie van besturingssysteem, bestandssysteem, timesharing monitor, commando-interpreter en programmeertaal. Gezien het beperkte hoofdgeheugen, werden de werkruimten van de gebruiker naar behoefte uitgewisseld op trommel of schijf. De prestaties waren indrukwekkend, wat Larry Breed in zijn heldere en beknopte beschrijving van de implementatie toeschrijft aan de mogelijkheid om het besturingssysteem af te stemmen op de eisen van de taal.

APL360 was een conversatietaal die een snelle respons en efficiënte uitvoering bood voor wel 50 gelijktijdige gebruikers. Elke gebruiker had een “actieve werkruimte” die programma’s, variabelen en de toestand van de opgeschorte programma-uitvoering bevatte. Systeemcommando’s zoals “)LOAD”, “)SAVE” en “)COPY” hielden de bibliotheek van opgeslagen werkruimten van de gebruiker bij. Andere systeemcommando’s regelden taaleigenschappen; met “)ORIGIN” kon de programmeur bijvoorbeeld bepalen of vectoren en arrays met 0 of met 1 werden genummerd.

APL was de eerste kennismaking met interactief timesharing voor velen in de generatie programmeurs die batch programmeren met ponskaarten hadden doorstaan.

Toepassingen van APL

Zelfs voordat het een computer programmeertaal was, was Iverson Notation nuttig als een taal voor het documenteren van algoritmen voor mensen. Het klassieke voorbeeld is de formele definitie van de instructie-set architectuur van de nieuwe IBM System/360 computer, die werd gepubliceerd in een artikel in het IBM Systems Journal door Adin Falkoff, Ken Iverson, en Ed Sussenguth in 1965 7.

De beschrijving, die eerder formeel dan verbaal is, wordt bereikt door een reeks programma’s, die op elkaar inwerken door middel van gemeenschappelijke variabelen, gebruikt in combinatie met hulptabellen… Hoewel de formele beschrijving volledig en op zichzelf staand is, wordt tekst geleverd als een hulpmiddel voor de eerste studie.

Maar de tekst in het document is veel meer dan dat. Het is een regel-voor-regel uitleg van de formele beschrijving, wat betekent dat het ook een demonstratie en uitleg is van de beschrijvende kracht van APL.

De notatie maakte gebruik van de grafische stijl voor control transfers die in Iverson’s boek stond. Hier, bijvoorbeeld, is de beschrijving van een geheugen toegang operatie. (Klik erop om te vergroten.)

Het was de overgang van APL van een notatie voor publicatie naar een interactieve computer programmeertaal die het tot bloei bracht. Toen de APL360-implementatie beschikbaar was, stimuleerden IBM en anderen het gebruik door diverse toepassingen te produceren, zoals deze:

  • Starmap: Een set APL functies om de posities van de sterren en planeten te berekenen en te plotten. 8 9 Het werd in 1973 geschreven door Paul Berry van IBM en John Thorstensen, toen een student astronomie aan Bryn Mawr college, nu hoogleraar natuurkunde en astronomie aan Dartmouth College. Het gebruikt klassieke oplossingen voor de vergelijkingen van Kepler voor een bepaalde datum en tijd en een reeks rotaties van coördinaten om te laten zien waar de planeten en de sterren zouden verschijnen in de kom van de hemel.
  • IBGS: Interactieve Business Game Simulatie: “Een algemene computer management simulatie waarbij besluitvorming en planning op de functionele gebieden van productie, marketing en financiën.”
  • Nullen en Integralen in APL: “Met behulp van zowel klassieke methoden zoals Newton’s en Muller’s en recent ontwikkelde methoden zoals Jenkins en Traub’s, het vindt realen nulpunten van een reële functie, reële en complexe nulpunten van een polynoom met reële of complexe coëfficiënten, en complexe nulpunten van een complexe functie.”
  • Graphpak – Interactive Graphics Package for APL360: “…mogelijkheden die variëren van grafische interface-ondersteuning op het laagste niveau tot diverse toepassingsgebieden op hogere niveaus…Een plotting component…lineair of logaritmisch…curve-fitting… Een beschrijvende geometrie component maakt definitie, schaling, vergroting, vertaling, rotatie, en geprojecteerde weergave van driedimensionale objecten mogelijk.”
  • Grafieken en Histogrammen in APL: “produceert curven en barchogrammen op een typemachine terminal”.
  • APL Coördinaten Geometrie Systeem: “lost problemen met coördinatengeometrie interactief op een terminal op…voor gebruik door landmeters, burgerlijke ingenieurs, stedenbouwkundigen…”
  • APL/PDTS – Programming Development Tracking System: “…om managers en planners te helpen de prestaties van programmeringsontwikkelingsprojecten te toetsen aan het plan.” MINIPERT: “Een Critical Path Method (CPM) systeem voor projectmanagement.”
  • APL Econometrische Planningstaal: “De praktiserende econoom, bedrijfsvoorspeller of leraar wordt voorzien van eenvoudig te gebruiken gereedschappen voor interactieve modelbouw en modeloplossing.”
  • APL Financieel Planningssysteem: “biedt de financieel analist en planner de mogelijkheid rapporten te ontwerpen, berekeningen te specificeren, gegevens in te voeren en te wijzigen, en afgedrukte rapporten te verkrijgen met een onmiddellijke doorlooptijd.”
  • APL Text Editor and Composer: “Dit programma is ontworpen om tekst interactief te verwerken op een terminal…Functies zijn opgenomen voor het invoeren, reviseren, samenstellen, afdrukken en opslaan van tekst…voor gebruik door secretaresses, wetenschappers, ingenieurs, administrateurs of anderen die papers, brieven, rapporten of specificaties produceren.”

Veel van deze toepassingen legden de nadruk op interactiviteit, hetgeen een enorme productiviteitsverhoging opleverde in vergelijking met de in die tijd meer gebruikelijke batch-taakverwerking. Bovendien konden toepassingen met APL veel sneller worden ontwikkeld. In een e-mail uit 2012 merkte Larry Breed op,

Op alle gebieden maakt de snelheid waarmee APL-programma’s kunnen worden geschreven het waardevol voor modellering en prototyping … Een voorbeeld: Rond 1973, had Continental Can een inventaris systeem nodig voor zijn 21 fabrieken. Hun team van FORTRAN-programmeurs had een jaar lang gewerkt, zonder succes in zicht. Een STSC-verkoper bouwde in één weekend een bruikbaar werkend model in APL Plus.

De gebieden waar APL de grootste penetratie had waren in wetenschappelijke, actuariële, statistische, en financiële toepassingen. Voor details over de progressie van APL in de eerste 25 jaar, zie de speciale 1991 uitgave van het IBM System Journal 10 met 12 artikelen en een essay over het onderwerp.

APL Lof en Kritiek APL was oorspronkelijk niet ontworpen als een programmeertaal. Zoals Iverson zei,

Het aanvankelijke motief voor het ontwikkelen van APL was het verschaffen van een gereedschap voor schrijven en lesgeven. Hoewel APL vooral is gebruikt voor commerciële programmering, blijf ik geloven dat het belangrijkste gebruik ervan nog moet worden benut: als een eenvoudige, precieze, uitvoerbare notatie voor het onderwijzen van een breed scala van onderwerpen.11

Met zoveel beknopte en ongebruikelijke symbolen hebben APL computerprogramma’s, net als de wiskundige notatie die er de inspiratie voor vormde, een beknoptheid en elegantie die velen aantrekkelijk vinden. APL trekt fanatieke aanhangers aan. Alan Perlis (de eerste ontvanger van de ACM’s Turing Award, in 1966) was er een:

De blik over een enkele zin kan een ingewikkeld, ingenieus en mooi samenspel van bediening en controle blootleggen dat in andere programmeertalen alleen in meerdere pagina’s tekst waarneembaar is. Men begint het ontstaan en de betekenis van stijl te waarderen. 12

Velen vinden de vrijheid van expressie in APL bevrijdend.

Ik beschreef het vroeger als een ‘fascistische programmeertaal’, omdat het dictatoriaal rigide is. …Als Pascal fascistisch is, is APL anarchistisch. 13

Maar APL programma’s zijn vaak cryptisch en moeilijk te ontcijferen. Sommigen hebben gegrapt dat het een “write-only language” is, omdat zelfs de auteur van een programma moeite kan hebben het later te begrijpen. Het inspireert tot programmeertrucs. De uitdaging om een APL “one-liner” te schrijven om een compleet complex algoritme te implementeren is moeilijk te weerstaan. Hier zijn bijvoorbeeld twee verschillende APL one-liners die versies van John Conway’s “Game of Life” implementeren:

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

Niet voor bangeriken, dat moge duidelijk zijn. De Nederlandse computerwetenschapper Edsger Dijkstra zei,

APL is een fout, doorgevoerd tot in perfectie. Het is de taal van de toekomst voor de programmeertechnieken van het verleden: het creëert een nieuwe generatie van codeer zwervers. 14

Maar fans van APL zouden zeggen dat cryptisch APL coderen een slechte programmeerstijl is die een kwaal kan zijn van elke taal. APL biedt een rijker palet voor het uitdrukken van algoritmen, zo luidt het argument, zodat je hardere problemen sneller kunt oplossen en met minder irrelevante syntactische rommel.

Wat je er ook van vindt, APL en de talen die het inspireerde, zoals APL2 en J, zijn nog steeds een actief onderdeel van het diverse programmeertaal universum.

Een korte biografie van Ken Iverson

Kenneth Eugene Iverson werd op 17 december 1920 geboren op een boerderij in de buurt van Camrose, Alberta, Canada. Hij ging van school omdat het op het hoogtepunt van de Depressie was en er werk was op de familieboerderij. Later zei hij dat het enige doel om verder te leren zou zijn geweest om onderwijzer te worden, en dat was een beroep dat hij beslist niet wilde. Tijdens de lange wintermaanden studeerde hij in zijn eentje calculus.

Hij werd in 1942 opgeroepen voor militaire dienst, en tijdens zijn diensttijd volgde hij voldoende correspondentiecursussen om de middelbare school bijna af te maken. Na de militaire dienst behaalde hij een B.A. in zowel wiskunde als natuurkunde aan de Queen’s University in Kingston Ontario, en vervolgens een M.A. in natuurkunde aan de Harvard University. In 1954 promoveerde hij bij computerpionier Howard Aiken, met een proefschrift getiteld “Machine Solutions of Linear Differential Equations: Applications to a Dynamic Economic Model”.

Na voltooiing van zijn doctoraat trad Iverson toe tot de Harvard faculteit om les te geven in Aiken’s nieuwe programma voor automatische gegevensverwerking. Hij was er een jaar als instructeur, en vijf jaar als assistent-professor. Hij raakte steeds meer gefrustreerd door de ontoereikendheid van de conventionele wiskundige notatie voor het uitdrukken van algoritmen, dus begon hij zijn eigen algoritmen uit te vinden.

In 1960 trad Iverson in dienst van het nieuwe IBM Research Center in Yorktown Heights, New York, op aanraden van Frederick Brooks, die een van zijn onderwijs fellows op Harvard was geweest en nu bij IBM werkte. De twee werkten samen aan de verdere ontwikkeling van de nieuwe notatie. In 1962 publiceerde Ken het nu klassieke boek “A Programming Language” 1, waarvan de titel de naam APL gaf aan de notatie die tot dan toe informeel “Iverson’s notation” was genoemd.

Iverson bleef werken aan de ontwikkeling van APL gedurende zijn gehele dienstverband bij IBM. In 1980 verliet hij IBM en keerde terug naar Canada om te werken voor I.P. Sharp Associates, die een op APL gebaseerde timesharing-dienst had opgezet.

In 1987 “trok hij zich terug uit loondienst” en richtte hij zijn aandacht volledig op de ontwikkeling van een moderner dialect van APL. APL werd met succes gebruikt voor commerciële doeleinden, maar Iverson wilde een nieuwe eenvoudige uitvoerbare notatie ontwikkelen die meer geschikt was voor het onderwijs en die tegen lage kosten beschikbaar zou zijn. De eerste implementatie van deze taal, J genaamd, werd aangekondigd op de APL90 Users’ Conference.

Iverson’s vermogen om dergelijke talen te creëren kwam voort uit zijn “pure plezier in taal en woorden,” herinnert zijn dochter Janet Cramer zich. “Hij las woordenboeken zoals mensen romans lezen.” Iverson vond het belangrijk dat taal, zowel Engels als wiskunde, duidelijk en beknopt communiceert.

Met medewerkers, onder wie zijn zoon Eric, bleef Iverson werken aan de ontwikkeling van J, en hij bleef productief publiceren. Op zaterdag 16 oktober 2004 kreeg hij een beroerte – terwijl hij werkte aan een J tutorial – en stierf drie dagen later op 19 oktober, op 83-jarige leeftijd.

Er zijn veel verhalen over Ken Iverson. Hier zijn er een paar:

Ken kreeg geen vaste aanstelling op Harvard. Hij deed zijn vijf jaar als assistent-professor en de faculteit besloot hem niet voor promotie voor te dragen. Ik vroeg hem wat er mis ging en hij zei: “Wel, de decaan riep me bij zich en zei, ‘het probleem is dat je nog niets gepubliceerd hebt behalve dat ene boekje'”. Dat ene boekje kreeg later de Turing Award. Ik denk dat dit eerder een commentaar is op de conventionele manier van denken over promotieprocedures dan een commentaar op Ken; het is een commentaar op de academische procedure en op Harvard.

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

In een vroege lezing was Ken de voordelen van tolerante vergelijking aan het uitleggen. Een lid van het publiek vroeg ongelovig: “Je bedoelt toch niet dat als A=B en B=C, A niet gelijk mag zijn aan C?” Zonder een blad voor de mond te nemen, antwoordde Ken: “Elke timmerman weet dat!” en ging verder met de volgende vraag.

– Paul Berry

In een sociaal gesprek met Ken, zei ik: “Weet je, Ken, jij bent mijn favoriete taalontwerper en Don Knuth is mijn favoriete programmeur.” En Ken zei meteen, “Wat is er mis met mijn programmering?”

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

In 1973 of 1974 gaven Ken en ik een lezing bij Kodak in Rochester voor een groep van 40 tot 50 programmeurs die in PL/I moesten werken. In het vragenuurtje zei een senior staflid: “Als ik begrijp wat jullie zeggen, suggereren jullie dat we een nieuwe manier van denken moeten aannemen.” En Ken sprong op uit zijn stoel en zei: “Ja! Dat is precies wat ik zeg!”

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

Acknowledgements

Met dank aan Michael Karasick, Yvonne Perkins, Steve Selbst, en Ken Edwards van IBM voor het beëindigen van mijn tien jaar durende odyssee om toestemming te krijgen om de APL broncode vrij te geven. Met dank aan Curtis Jones, Larry Breed, Paul Berry, en Roy Sykes voor hun commentaar op een vroege versie van dit artikel.

– Len Shustek

Bibliografie

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
  2. IBM, “APL Language,” March 1975.
  3. IBM, “APL360 User’s Manual,” maart 1970.
  4. IBM, Paul Berry, “APL360 Primer – Student Text,” 1969.
  5. L. M. Breed en R. H. Lathwell, “APL360,” 1968.
  6. L. M. Breed en R. H. Lathwell, “The Implementation of APL360,” in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
  7. A. D. Falkoff, K. E. Iverson and E. H. Sussenguth, “A Formal Description of SYSTEM/360,” IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
  8. P. C. Berry en J. R. Thorstensen, “Starmap,” 1978.
  9. P. C. Berry en J. R. Thorstensen, “Starmap,” IBM Systems Development Division, 1975.
  10. IBM Systems Journal, vol. 30, no. 4, 1991.
  11. K. E. Iverson, “A Personal View of APL,” IBM Systems Journal, vol. 30, no. 4, 1991.
  12. A. J. Perlis, “In Praise of APL: A Language for Lyrical Programming,” SIAM News, juni 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, no. 5, mei 1982.
  15. A. D. Falkoff en K. E. Iverson, “The Design of APL,” IBM Journal of Research and Development, vol. 17, no. 4, 1973.
  16. A. D. Falkoff en K. E. Iversion, “The Evolution of APL,” SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, augustus 1978.
  17. L. Breed, “How We Got to APL1130,” 10 mei 2004.
  18. ACM, “Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
  19. “The Origins of APL – 1974”; een prachtig interview met de oorspronkelijke ontwikkelaars van APL.

Historische broncode-uitgaven

  • MacPaint en QuickDraw broncode, 18 juli 2010
  • APL Programmeertaal broncode, 10 oktober 2012
  • Adobe Photoshop broncode, 13 februari 2013
  • Apple II DOS Broncode, 12 november 2013
  • Microsoft MS-DOS Early Broncode, 25 maart 2014
  • Microsoft Word voor Windows Versie 1.1a Broncode, 25 maart 2014
  • Vroege Digital Research CP/M Broncode, 1 oktober 2014
  • Xerox Alto Broncode, 21 oktober 2014
  • Electronic Arts DeluxePaint Vroege Broncode, 22 juli 2015

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.