Software Gems: The Computer History Museum Historical Source Code Series
Ken Iverson at Harvard University
Tusindvis af programmeringssprog blev opfundet i de første 50 år af computerens tidsalder. Mange af dem lignede hinanden, og mange fulgte en traditionel, evolutionær vej fra deres forgængere.
Men nogle revolutionerende sprog havde en skråning, der adskilte dem fra deres mere almene brødre. LISP var til listebehandling. SNOBOL var til strengmanipulation. SIMSCRIPT var til simulering. Og APL var til matematik med vægt på arraybehandling.
Det, der i sidste ende blev til APL, blev først opfundet af Harvard-professor Kenneth E. Iverson i 1957 som en matematisk notation, ikke som et computerprogrammeringssprog. Selv om der fandtes andre matrixorienterede symbolsystemer, herunder den kortfattede tensor-notation, der blev opfundet af Einstein, var de mere orienteret mod matematisk analyse og mindre mod syntese af algoritmer. Iverson, som var elev af Howard Aiken, underviste sine Harvard-studerende i det, der blev kendt som “Iverson-notationen” til at forklare algoritmer.
Iverson blev ansat af IBM i 1960 for at arbejde sammen med Adin Falkoff og andre på sin notation. I sin nu berømte bog “A Programming Language” 1 fra 1962 siger han, at notationen er til beskrivelse af “procedurer … kaldet algoritmer eller programmer”, og at det er et sprog, fordi det “udviser en betydelig syntaktisk struktur”. Men på det tidspunkt var det blot en notation, som folk kunne læse, og ikke et sprog til programmering af computere. Bogen giver mange eksempler på dets anvendelse både som et beskrivende værktøj (f.eks. til at dokumentere definitionen af computerinstruktionssæt) og som et middel til at udtrykke generelle algoritmer (f.eks. til sortering og søgning). Da han forudser modstand mod noget så nyt, siger han i forordet: “Det er den centrale tese i denne bog, at den beskrivende og analytiske kraft af et passende programmeringssprog rigeligt tilbagebetaler den betydelige indsats, der kræves for at beherske det.” Måske advarede han om, at det ikke var trivielt at beherske sproget. Måske signalerede han også, at andre notationssprog efter hans mening var mindre end “tilstrækkelige”.
Gruppen så naturligvis hurtigt, at notationen kunne omdannes til et sprog til programmering af computere. Dette sprog, som blev kaldt APL fra 1966, lagde vægt på array-manipulation og brugte ukonventionelle symboler. Det lignede intet andet computerprogramsprog, der var blevet opfundet.
APL blev populært, da IBM introducerede “APL360” til deres System/360 mainframe-computer. I modsætning til de fleste andre sprog på det tidspunkt var APL360 også et komplet interaktivt programmeringsmiljø. Programmøren, der sad ved en elektromekanisk skrivemaskine, der var forbundet med en timeshared computer, kunne skrive APL-udsagn og få et øjeblikkeligt svar. Programmer kunne defineres, fejlsøges, køres og gemmes på en computer, der samtidig blev brugt af snesevis af andre mennesker.
Denne version af APL var udelukkende skrevet i 360 assembler-sprog og tog kontrol over hele maskinen. Den implementerede et komplet timesharing-operativsystem ud over et højniveausprog.
Med tilladelse fra IBM er Computer History Museum glad for at kunne stille kildekoden til 1969-1972 “XM6”-versionen af APL til System/360 til ikke-kommerciel brug til rådighed.
Tekstfilen indeholder 37.567 linjer, som omfatter kode, makroer og globale definitioner. De 90 individuelle filer er adskilt af ‘./ ADD”-kommandoer. For at få adgang til dette materiale skal du acceptere betingelserne i den licens, der vises her, som kun tillader ikke-kommerciel brug og ikke giver dig ret til at give licens til tredjeparter ved at lægge kopier ud andre steder på nettet.
Download APL360-kildekode
Jürgen Winkelmann ved ETH Zürich har gjort et fantastisk stykke arbejde med at omdanne denne kildekode til et kørbart system. For yderligere oplysninger, se MVT for APL Version 2.00.
Skabelse af APL-programmeringssproget
Iversons bog “A Programming Language” 1 bruger en grafisk notation, som det ville have været vanskeligt at bruge direkte som programmeringssprog for computere. Han betragtede det som en udvidelse af matrixalgebra og anvendte almindelige matematiske typografiske konventioner som subscripts, superscripts og sondringer baseret på tegnenes vægt eller skrifttype. Her er f.eks. et program til sortering af tal:
For at linearisere notationen til brug som et computerprogrammeringssprog indtastet på et tastatur måtte APL-implementatorerne helt sikkert opgive brugen af mærkede pile til kontroloverførsler. Men en funktion, som de til en vis grad kunne bevare, var brugen af specielle symboler for primitive funktioner, som illustreret i dette program, der skaber Huffman-koder:
APL bruger symboler, der er tættere på standardmatematik end programmering. For eksempel er symbolet for division ÷, ikke /. For at understøtte de ukonventionelle symboler brugte APL360 et specialkonstrueret tastatur med specialsymboler med store bogstaver.
APL360 brugte et specialkonstrueret tastatur
Selvfølgelig var der flere specialtegn, end der kunne være plads til på tastaturet, så nogle blev indtastet ved at overstrege to tegn. F.eks. blev “grade up”-tegnet ⍋, en primitiv operatør, der bruges til sortering, oprettet ved at skrive ∆ (shift H), derefter backspace og derefter ∣ (shift M). Der var ikke plads til både store og små bogstaver, så APL understøttede kun store bogstaver.
For at udskrive programmer fik Iverson og Falkoff IBM til at designe en særlig typekugle til deres 1050- og 2741-terminaler, som brugte IBM Selectric-skrivemaskinemekanismen.
Nu kunne programmer både indtastes og udskrives. Her er f.eks. den trykte version et program fra APL Language manual 2, der beregner den matematiske determinant af en matrix:
En smagsprøve på APL
APL er et kortfattet programmeringssprog på højt niveau, der adskiller sig fra de fleste andre, der blev udviklet i 1960’erne, i flere henseender:
Evalueringsrækkefølge: I APL evalueres udtrykkene fra højre til venstre, og der er ikke noget hierarki i forhold til præcedens for funktioner. Hvis man f.eks. skriver udtrykket
2×4+3
, medfører det, at computeren straks skriver den resulterende værdi
Værdien er ikke, som i mange andre sprog, der har operatorpræcedens, 11. Parenteser kan naturligvis bruges til at gruppere et deludtryk for at ændre evalueringsrækkefølgen. Den generelle regel er, at det højre argument i en funktion er værdien af udtrykket til højre for den.
Automatisk oprettelse af vektorer og arrays: En højere dimensionel struktur oprettes automatisk ved at evaluere et udtryk, der returnerer den, og skalarer kan frit blandes. F.eks.
A ← 2 + 1 2 3
skaber vektoren “1 2 3”, tilføjer skalaren 2 til den og opretter variablen A til at indeholde den vektor, hvis værdi er
3 4 5
Variabler deklareres aldrig; de oprettes automatisk og antager størrelsen og formen af det udtryk, der er tildelt dem.
Et væld af primitiver: APL har et rigt sæt indbyggede funktioner (og “operatører”, der anvendes på funktioner for at give forskellige funktioner), der opererer på skalarer, vektorer, arrays, selv objekter i højere dimensioner og kombinationer af dem. F.eks. er udtrykket til at summere tallene i den ovenfor oprettede vektor “A” ganske enkelt
+/A
hvor / er “reduktions”-operatoren, der får funktionen til venstre til at blive anvendt successivt på alle elementerne i operanden til højre. Udtrykket til beregning af gennemsnittet af tallene i A bruger også den primitive funktion ρ til at bestemme, hvor mange elementer der er i A:
(+/A) ÷ ρA
Her er nogle tabeller fra “APL360 User’s Manual” 3 fra 1970, der giver en smag af de indbyggede APL-funktioners og -operatorers styrke og sofistikering. (Klik på billederne for at få større versioner.)
APL opfordrer dig til at tænke anderledes om programmering og til at bruge midlertidige højdimensionale datastrukturer som mellemliggende værdier, der derefter reduceres ved hjælp af de kraftfulde primitivfunktioner. Et berømt eksempel er følgende korte, men komplette program til beregning af alle primtal op til R.
(~T∊T∘.×T)/T←1←1↓⍳R
Her er, hvordan dette udtryk evalueres:
sugeudtryk |
betydning |
værdi hvis R er 6 |
|||||||||||||||||||||||||
⍳R |
Generér en vektor af tal fra 1 til R. |
1 2 3 4 4 5 6 |
|||||||||||||||||||||||||
T←1↓ |
Fald det første element i vektoren fra og tildel resten til den midlertidige vektor T. |
2 3 4 4 5 6 |
|||||||||||||||||||||||||
T∘.×T |
Opret det ydre multiplikationsprodukt: en tabel, der indeholder resultatet af multiplikation af hvert element i T med hvert element i T. |
|
|||||||||||||||||||||||||
T∊ |
Anvend operatoren “sætmedlemskab” for at finde ud af, hvilke elementer i T der er i tabellen. |
0 0 0 1 0 0 1 |
|||||||||||||||||||||||||
~ |
Negér resultatet for at finde ud af, hvilke elementer af T der ikke er i tabellen. Det er de hele tal, som ikke har nogen multipla i tabellen. |
1 1 0 1 1 0 |
|||||||||||||||||||||||||
( )/T |
Vælg de elementer i T, som vi har identificeret. Disse er alle primtal mindre end R. |
2 3 5 |
Bemærk, at der ikke er nogen sløjfer i dette program. Styrken i APL-udtryk betyder, at betingede forgreninger og sløjfer er langt sjældnere nødvendige end i mere traditionelle programmeringssprog.
APL-operatorer kan bruges på nemme måder til alle slags beregninger, som normalt ville kræve sløjfer. Et udtryk, der beregner antallet af elementer i vektoren X, der er større end 100, er f.eks.
+/X>100
Det virker, fordi X>100 returnerer en bitvektor af 0’er og 1’er, der viser, hvilke elementer i X der er større end 100, og +/ lægger alle bits i denne vektor sammen.
Men betinget udførelse og sløjfer er naturligvis sommetider nødvendige. I lyset af den senere udvikling inden for struktureret programmering er APL’s eneste primitiv til kontroloverførsel, “GO TO LINE x”-anvisningen →, særlig svag i forhold til den senere udvikling inden for struktureret programmering. Her er et eksempel på en funktion, der beregner den største fælles divisor af sine to argumenter. Den sidste anvisning skaber en løkke ved at forgrene sig til begyndelsen. I linje 2 bevirker betinget overførsel af kontrol til linje 0, at funktionen afsluttes og returnerer den værdi, der sidst blev tildelt G.
For at få mere at vide om APL-sproget fra 1960’erne, se “APL Language” reference manual 2 og Paul Berry’s 1969 “APL360 Primer” 4.
Sproget har naturligvis udviklet sig gennem årene, og nyere versioner indeholder kontrolstrukturer som IF-THEN-ELSE.
Hvordan APL blev implementeret
Den første computerimplementering af APL-notationen var en batch-orienteret sprogfortolker skrevet i FORTRAN i 1965 til IBM 7090 mainframe-computeren af Larry Breed på IBM Research Center i Yorktown Heights NY og Philip Abrams, der dengang var kandidatstuderende ved Stanford University.
Den første interaktive version blev skrevet kort efter til 7093 (en eksperimentel 7090 med virtuel hukommelse) af Larry Breed og Roger Moore. Den kørte under TSM timesharing-systemet og blev finurligt nok kaldt “IVSYS”, som rimer på “IBSYS”, navnet på standard 7090-operativsystemet. I en e-mail fra 2012 siger Breed,
IVSYS leverede login, logout, øjeblikkelig eksekvering og funktionsdefinition; det leverede arbejdsområder, både aktive og lagrede. Implementeringen af disse var rudimentær; for det meste brugte vi det, som TSM-projektet tilbød os til login/logout/opbevaring af filer. Vi havde kun få uger til at bruge 7093, før det blev taget ud af drift, og Roger og jeg begyndte at planlægge et selvstændigt system på System/360. I disse uger så Ken og hans gruppe for første gang, hvordan eksekverbar APL ville være.
En anden implementering af en delmængde af sproget blev udført i 1967 til IBM 1130 minicomputeren.
Den første implementering af APL, der fik udbredt anvendelse uden for IBM, var til IBM System/360. Den blev kaldt “APL360” og blev først taget i brug inden for IBM i november 1966. (Notationen “APL360″, da backslash var APL’s “ekspansions”-operator, havde også en skjult betydning: “APL expanderer 360″).
Breed siger om tiden lige før,
Denne periode, begyndelsen af 1966, var overgangstiden fra Iverson Notation til APL. (Adin fandt faktisk på “APL” i foråret 1966.) Forfining og udvidelse af sproget og miljøet fortsatte i mange år. Der blev stort set ikke tilføjet kode for at lave en kommerciel version, kun papirarbejde.
I august 1968 var APL360 tilgængelig for IBM’s kunder som et ikke-understøttet (“Type III”) program i IBM’s “Contributed Program Library” 5. De vigtigste implementatorer var Larry Breed, Dick Lathwell og Roger Moore; andre, der havde bidraget, var Adin Falkoff og Luther Woodrum.
Første APL-udviklere, fra venstre mod højre: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. Fotoet blev taget omkring 1983.
På grund af APL-variablernes dynamiske karakter blev APL360 implementeret som en fortolker og ikke som en compiler, der genererede maskinkode. Programmer blev gemt i en intern form kaldet en “codestring”, der direkte svarede til det, brugeren havde indtastet. Fortolkeren undersøgte derefter kodestrengen, mens programmet blev udført, og allokerede og omkonfigurerede variabler dynamisk, efterhånden som udtrykkene blev evalueret.
De første versioner af APL360 tog kontrol over hele maskinen. Det var således en kombination af styresystem, filsystem, timesharing-monitor, kommandotolk og programmeringssprog. På grund af den begrænsede hovedhukommelse blev brugernes arbejdsområder efter behov flyttet ud på tromle eller disk. Ydelsen var imponerende, hvilket Larry Breed i sin klare og kortfattede beskrivelse af implementeringen 6 tilskriver evnen til at skræddersy operativsystemet til sprogets krav.
APL360 var et konversationssprog, der gav hurtig respons og effektiv udførelse for op til 50 samtidige brugere. Hver bruger havde et “aktivt arbejdsområde”, der indeholdt programmer, variabler og tilstanden af suspenderet programudførelse. Systemkommandoer som “)LOAD”, “)SAVE” og “)COPY” vedligeholdt brugerens bibliotek af lagrede arbejdsområder. Andre systemkommandoer styrede sprogfunktioner; f.eks. kunne programmøren med “)ORIGIN” styre, om vektorer og arrays skulle nummereres fra 0 eller 1.
APL var den første introduktion til interaktiv timesharing for mange i den generation af programmører, der havde lidt under batchprogrammering med hulkort.
Anvendelser af APL
Selv før det blev et computerprogrammeringssprog, var Iverson Notation nyttigt som et sprog til at dokumentere algoritmer for mennesker. Det klassiske eksempel er den formelle definition af instruktionsarkitekturen i den nye IBM System/360-computer, som blev offentliggjort i en artikel i IBM Systems Journal af Adin Falkoff, Ken Iverson og Ed Sussenguth i 1965 7.
Beskrivelsen, som er formel snarere end verbal, opnås ved hjælp af et sæt programmer, der interagerer via fælles variabler, der anvendes sammen med hjælpetabeller… Selv om den formelle beskrivelse er fuldstændig og selvstændig, er der tekst med som hjælp til det indledende studium.
Men den tekst, der leveres i papiret, er meget mere end det. Det er en forklaring linje for linje af den formelle beskrivelse, hvilket betyder, at det også er en demonstration og forklaring af APL’s beskrivende kraft.
I notationen blev der anvendt den grafiske stil for kontroloverførsler, som var i Iversons bog. Her er f.eks. beskrivelsen af en hukommelsesadgangsoperation. (Klik på den for at forstørre den.)
Det var overgangen af APL fra en notation til publikation til et interaktivt computerprogrammeringssprog, der fik det til at blomstre. Da implementeringen af APL360 var tilgængelig, stimulerede IBM og andre brugen ved at producere forskellige applikationer som disse:
- Starmap: Et sæt APL-funktioner til beregning og plotning af stjerners og planeters positioner. 8 9 Det blev skrevet i 1973 af Paul Berry fra IBM og John Thorstensen, dengang astronomistuderende på Bryn Mawr College, nu professor i fysik og astronomi på Dartmouth College. Det bruger klassiske løsninger på Keplers ligninger for en bestemt dato og et bestemt tidspunkt og en række rotationer af koordinater til at vise, hvor planeterne og stjernerne ville optræde i himmelskålen.
- IBGS: Interactive Business Game Simulation: “En generel computersimulering af ledelse, der omfatter beslutningstagning og planlægning inden for funktionelle områder som produktion, markedsføring og økonomi.”
- Nuller og integraler i APL: “Ved hjælp af både klassiske metoder som Newtons og Mullers og nyligt udviklede metoder som Jenkins og Traubs finder det reelle nuller af en reel funktion, reelle og komplekse nuller af et polynomium med reelle eller komplekse koefficienter og komplekse nuller af en kompleks funktion.”
- Graphpak – Interactive Graphics Package for APL360: “…capabilities which range from graphics interface support at the lowest level to several application areas at higher levels…A plotting component…linear or logarithmic…curve-fitting… A descriptive geometry component allows definition, scaling, magnification, translation, rotation, and projected display of three-dimensional objects.”
- Grafer og histogrammer i APL: “producerer kurver og søjlediagrammer på en skrivemaskineterminal”.
- APL-koordinatgeometrisystem: “løser koordinatgeometriproblemer interaktivt på en terminal … til brug for landmålingsteknikere, civilingeniører, byplanlæggere …”
- APL/PDTS – Programming Development Tracking System: “…til at hjælpe ledere og planlæggere med at overvåge resultaterne i forhold til planen i forbindelse med programmeringsudviklingsprojekter.” MINIPERT: “A Critical Path Method (CPM) system for Project Management”
- APL Econometric Planning Language: “Den praktiserende økonom, virksomhedsprognostiker eller lærer får let anvendelige værktøjer til interaktiv modelopbygning og modelopløsning.”
- APL Financial Planning System: “giver den finansielle analytiker og planlægger mulighed for at designe rapporter, specificere beregninger, indtaste og ændre data og få udskrevne rapporter med øjeblikkelig levering.”
- APL Text Editor and Composer: “Dette program er designet til at behandle tekst interaktivt på en terminal … Der er inkluderet funktioner til indtastning, revision, sammensætning, udskrivning og lagring af tekst … til brug for sekretærer, videnskabsfolk, ingeniører, administratorer eller andre, der producerer papirer, breve, rapporter eller specifikationer.”
Mange af disse programmer lagde vægt på interaktivitet, hvilket gav en enorm produktivitetsforøgelse sammenlignet med den batch-jobbehandling, der var mere typisk på den tid. Desuden gjorde APL det muligt at udvikle applikationer meget hurtigere. I en e-mail fra 2012 bemærkede Larry Breed,
På tværs af alle områder gør den hastighed, hvormed APL-programmer kan skrives, det værdifuldt til modellering og prototyping . … Et eksempel: Omkring 1973 havde Continental Can brug for et lagerstyringssystem til sine 21 produktionsanlæg. Deres team af FORTRAN-programmører havde arbejdet i et år uden nogen succes i sigte. En STSC-sælger byggede i løbet af en weekend en brugbar arbejdsmodel i APL Plus.
De områder, hvor APL havde den største udbredelse, var inden for videnskabelige, aktuarmæssige, statistiske og finansielle applikationer. For nærmere oplysninger om udviklingen af APL i de første 25 år henvises til det særlige nummer fra 1991 af IBM System Journal 10 med 12 artikler og et essay om emnet.
APL ros og kritik APL blev oprindeligt ikke designet som et programmeringssprog. Som Iverson sagde,
Det oprindelige motiv for at udvikle APL var at levere et værktøj til skrivning og undervisning. Selv om APL er blevet udnyttet mest i kommerciel programmering, mener jeg fortsat, at dets vigtigste anvendelse stadig mangler at blive udnyttet: som en enkel, præcis, eksekverbar notation til undervisning i en lang række emner.11
Med så mange korte og usædvanlige symboler har APL-computerprogrammer, ligesom den matematiske notation, der inspirerede det, en kortfattethed og elegance, som mange finder tiltalende. APL tiltrækker fanatiske tilhængere. Alan Perlis (den første modtager af ACM’s Turing Award i 1966) var en af dem:
Øjeblikket over en enkelt sætning kan afsløre et indviklet, genialt og smukt samspil mellem operation og kontrol, som i andre programmeringssprog kun kan observeres i flere siders tekst. Man begynder at sætte pris på stilens opståen og betydning. 12
Mange finder udtryksfriheden i APL befriende.
Jeg plejede at beskrive det som et “fascistisk programmeringssprog”, fordi det er diktatorisk stift. …Hvis Pascal er fascistisk, er APL anarkistisk. 13
Men APL-programmer er ofte kryptiske og svære at afkode. Nogle har spøgt med, at det er et “skrive-kun-sprog”, fordi selv forfatteren af et program kan have problemer med at forstå det senere. Det inspirerer til programmeringstricks. Det er svært at modstå udfordringen med at skrive en APL-“one-liner” til at implementere en komplet kompleks algoritme. Her er f.eks. to forskellige APL one-liners, der implementerer versioner af John Conways “Game of Life”:
life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}
ikke for sarte sjæle, helt klart. Den hollandske datalog Edsger Dijkstra sagde,
APL er en fejltagelse, gennemført til perfektion. Det er fremtidens sprog for fortidens programmeringsteknikker: det skaber en ny generation af kodningsbums. 14
Men fans af APL vil sige, at kryptisk APL-kodning er en dårlig programmeringsstil, som kan være en lidelse for ethvert sprog. APL giver en rigere palet til at udtrykke algoritmer, lyder argumentet, så man kan løse sværere problemer hurtigere og med mindre irrelevant syntaktisk rod.
Uanset hvad man mener, er APL og de sprog, som det inspirerede, såsom APL2 og J, stadig en aktiv del af det mangfoldige programmeringssprogunivers.
En kort biografi om Ken Iverson
Kenneth Eugene Iverson blev født den 17. december 1920 på en gård nær Camrose, Alberta, Canada. Han blev undervist i en enrumsskole på landet indtil slutningen af 9. klasse, hvor han droppede ud af skolen, fordi det var depressionens højdepunkt, og der var arbejde at gøre på familiens gård. Han sagde senere, at det eneste formål med at fortsætte sin skolegang ville have været at blive skolelærer, og det var et erhverv, som han bestemt ikke ønskede. I de lange vintermåneder studerede han regning på egen hånd.
Han blev indkaldt i 1942, og under sin tjenestetid tog han nok korrespondancekurser til næsten at afslutte gymnasiet. Efter militærtjenesten fik han en B.A. i både matematik og fysik fra Queen’s University i Kingston, Ontario, og derefter en M.A. i fysik fra Harvard University. I 1954 afsluttede han en ph.d.-grad under computerpioneren Howard Aiken med en afhandling med titlen “Machine Solutions of Linear Differential Equations: Applications to a Dynamic Economic Model”.
Når han havde afsluttet sin doktorgrad, blev Iverson ansat på Harvard-fakultetet for at undervise i Aikens nye automatiske databehandlingsprogram. Han var der i et år som instruktør og i fem år som assisterende professor. Han blev i stigende grad frustreret over den konventionelle matematiske notations utilstrækkelighed til at udtrykke algoritmer, så han begyndte at opfinde sine egne.
I 1960 blev Iverson ansat på det nye IBM Research Center i Yorktown Heights, New York, på råd fra Frederick Brooks, som havde været en af hans undervisningsstipendiater på Harvard og nu var hos IBM. De to samarbejdede om den fortsatte udvikling af den nye notation. I 1962 udgav Ken den nu klassiske bog “A Programming Language” 1, hvis titel gav navnet APL til den notation, som indtil da uformelt var blevet kaldt “Iversons notation”.
Iverson fortsatte med at arbejde på udviklingen af APL i hele sin tid hos IBM. I 1980 forlod han IBM og vendte tilbage til Canada for at arbejde for I.P. Sharp Associates, som havde etableret en APL-baseret timesharing-tjeneste.
I 1987 “trak han sig tilbage fra lønnet arbejde” og vendte sin fulde opmærksomhed mod udviklingen af en mere moderne dialekt af APL. APL blev med succes brugt til kommercielle formål, men Iverson ønskede at udvikle en ny simpel eksekverbar notation, der var mere egnet til undervisning, og som ville være tilgængelig til en lav pris. Den første implementering af dette sprog, kaldet J, blev annonceret på APL90-brugerkonferencen.
Iversons evne til at skabe sådanne sprog kom fra hans “rene glæde ved sprog og ord”, husker hans datter Janet Cramer. “Han læste ordbøger som folk læser romaner.” Iverson mente, at det var vigtigt, at sprog, både engelsk og matematik, kommunikerer klart og koncist.
Med samarbejdspartnere, der omfattede hans søn Eric, fortsatte Iverson med at arbejde på udviklingen af J, og han fortsatte med at udgive produktivt. Lørdag den 16. oktober 2004 fik han et slagtilfælde – mens han arbejdede på en J-tutorial – og døde tre dage senere, den 19. oktober, i en alder af 83 år.
Der findes mange historier om Ken Iverson. Her er et par stykker:
Ken fik ikke fastansættelse på Harvard. Han gjorde sine fem år som assisterende professor, og fakultetet besluttede ikke at indstille ham til forfremmelse. Jeg spurgte ham, hvad der gik galt, og han svarede: “Nå, men dekanen kaldte mig ind og sagde: ‘Problemet er, at du ikke har udgivet andet end den ene lille bog'”. Den ene lille bog fik senere Turing-prisen. Jeg tror, at det er en kommentar til den konventionelle tankegang i forbindelse med forfremmelsesprocedurer snarere end en kommentar til Ken; det er en kommentar til akademiske procedurer og til Harvard.
– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30
I et tidligt foredrag forklarede Ken fordelene ved tolerant sammenligning. Et medlem af publikum spurgte vantro: “Du mener vel ikke, at når A=B og B=C, så er A måske ikke lig med C?” Uden at springe et sekund over, svarede Ken: “Det ved enhver tømrer!” og gik videre til det næste spørgsmål.
– Paul Berry
Under en social samtale med Ken sagde jeg: “Ved du hvad, Ken, du er min foretrukne sprogdesigner, og Don Knuth er min foretrukne programmør.” Og Ken sagde straks: “Hvad er der galt med min programmering?”
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
I 1973 eller 1974 holdt Ken og jeg et foredrag hos Kodak i Rochester for en gruppe på 40-50 programmører, som skulle arbejde i PL/I. I spørgeperioden sagde en ledende medarbejder: “Hvis jeg forstår, hvad I siger, foreslår I, at vi skal indføre en ny måde at tænke på”. Ken sprang op af sin stol og sagde: “Ja, det er præcis det, jeg siger!”
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
Acknowledgements
Tak til Michael Karasick, Yvonne Perkins, Steve Selbst og Ken Edwards fra IBM for at have afsluttet min tiårige odyssé for at få tilladelse til at frigive APL-kildekoden. Tak til Curtis Jones, Larry Breed, Paul Berry og Roy Sykes for deres kommentarer til et tidligt udkast af denne artikel.
– Len Shustek
Bibliografi
- K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
- IBM, “APL Language,” marts 1975.
- IBM, “APL360 User’s Manual,” marts 1970.
- IBM, Paul Berry, “APL360 Primer – Student Text,” 1969.
- L. M. Breed og R. H. Lathwell, “APL360,” 1968.
- L. M. Breed og R. H. Lathwell, “The Implementation of APL360,” in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
- A. D. Falkoff, K. E. Iverson og E. H. Sussenguth, “A Formal Description of SYSTEM/360,” IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
- P. C. Berry og J. R. Thorstensen, “Starmap,” 1978.
- P. C. Berry og J. R. Thorstensen, “Starmap,” IBM Systems Development Division, 1975.
- IBM Systems Journal, vol. 30, no. 4, 1991.
- K. E. Iverson, “A Personal View of APL,” IBM Systems Journal, vol. 30, no. 4, 1991.
- A. J. Perlis, “In Praise of APL: A Language for Lyrical Programming,” SIAM News, juni 1977.
- B. McCormick, “A Programming Language,” 2000,2002.
- E. W. Dijkstra, “How Do We Tell Truths That Might Hurt?”,” SIGPLAN Notices, vol. 17, no. 5, maj 1982.
- A. D. Falkoff og K. E. Iverson, “The Design of APL,” IBM Journal of Research and Development, vol. 17, no. 4, 1973.
- A. D. Falkoff og K. E. Iversion, “The Evolution of APL,” SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, august 1978.
- L. Breed, “How We Got to APL1130,” 10. maj 2004.
- ACM, “Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
- “The Origins of APL – 1974”; et vidunderligt interview med de oprindelige udviklere af APL.
Historiske kildekodeudgivelser
- Kildekode til MacPaint og QuickDraw, 18. juli 2010
- Kildekode til APL-programmeringssproget, 10. oktober 2012
- Kildekode til Adobe Photoshop, 13. februar 2013
- Apple II DOS Source Code, 12. november 2013
- Microsoft MS-DOS Early Source Code, 25. marts 2014
- Microsoft Word for Windows Version 1.1a Kildekode, 25. marts 2014
- Tidlig Digital Research CP/M Kildekode, 1. oktober 2014
- Xerox Alto Kildekode, 21. oktober 2014
- Electronic Arts DeluxePaint Tidlig Kildekode, 22. juli 2015