Peter Naur Algol 60 DIKU Kollokvium 1972-03-10
Indledning
Det følgende er en transkribering af et lydbånd fra Peter Naurs efterladenskaber:
Peter Naur Hvorledes Algol 60 blev til 10. marts 1972 Kollokvium på Datalogisk Institut
Det digitaliserede lydbånd kan findes i BitStore.
Kollokviet består af ca. 50 minutters præsentation og - efter en pause, hvor båndoptageren har været slukket - ca. 40 minutter med spørgsmål og svar. Transkriberingen er suppleret med overskrifter og dertil noter med uddybende forklaringer.
Præsentation
Indledning
[Naur:] Indtil den 31. januar 1959 var jeg astronom og som sådan var jeg naturligvis særdeles velbekendt med Algol og det er jo som bekendt den berømte stjerne Beta Persei, den berømte stjerne fordi det er en formørkelsesvariabel med en periode på omtrent 5 dage.
Men den 1. februar 1959 tiltrådte jeg på Regnecentralen og opdagede da meget hurtigt, at jeg måtte revidere mine opfattelser af Algol. På det tidspunkt var jo bevægelsen for at etablere Algol allerede fuld gang (sikke de kommer og larmer [Latter]) det var i fuld sving. Jeg kom på hovedet ned i en udvikling, som jeg derfor ikke kan gøre rede for i sin fulde og hele omfang. Det jeg skal fortælle om i dag handler ganske nøje om et år og en måned fra den første februar 1959 til den første marts 1960 og altså et udsnit af det, der foregik, idet der foregik både før og efter en hel masse. Det der forgik før vil jeg her ganske kort resumere. Det, der foregik efter, vil jeg ikke sige meget om.
[Omrokering] (Sluk bare det.)
Som sagt, jeg vil snakke om perioden dér fra første februar '59 til første marts 1960 idet jeg lige vil nævne kort hvad der forgik før 1959.
Zürich maj-juni 1958 og Algol 58
I løbet af omkring 1956-57 opstod ideen om at lave et fælles programmeringssprog, et algoritmisk sprog, i første omgang i en organisation, der hedder GAMM, Gesellschaft für Angewandte Mathematik und Mechanik, i Tyskland. Det var jo ikke noget på den måde epokegørende, idet jo Fortran udviklingen allerede var i, for så vidt, fuld sving og fungerede. Og Fortran var jo heller ikke det første, der havde været adskillige andre udviklinger, mere eller mindre eksperimenterende, helt tilbage til begyndelsen af '50-erne.
Men man fostrede altså den ide at lave et fælles sprog til mange maskiner ud fra mere principielle synspunker og man fik det gode indfald at henvende sig til ACM i Amerika og foreslå et samarbejde og det gik udmærket og man fik så etableret et møde i Zürich i maj-juni 1958 og det førte til det kendte dokument som nu betegnes som Algol 58, en rapport om et sprog, udkast til et sprog, som jo blev forgængeren og oplægget til Algol 60.
[Dette dokument - Zürich-rapporten eller Algol 58 rapporten - er: John Backus m.fl. (edited by A. J. Perlis and K. Samelson). "Preliminary report - international algebraic language". Comm. ACM. 1 (12), 1958, 8–22. Også: John Backus m.fl. (edited by A. J. Perlis and K. Samelson). "Report on the algorithmic language ALGOL", Num. Math. 1(1959), pp. 41-60.]
Andre ting, der er værd at nævne op til dette tidspunkt, er et møde i Mainz i november 1958. I Mainz i Tyskland sad på det tidspunkt professor Bauer og professor Samelson, begge meget aktive i dette her. Senere genkender vi dem i München, frem og tilbage lidt som de nu skifter med deres ansættelser. Der var Villy Heise fra Regnecentralen også til stede og han blev meget interesseret i dette her. Formentlig har også Niels Ivar Bech været bekendt med det og har skubbet bagpå, og man besluttede at invitere til et møde i København på Regnecentralen i februar [1959].
Regnecentralen februar 1959
Så da jeg kom til Regnecentralen den første februar, så stod man allerede med en plan og invitationer til et hav af mennesker, der så kom op til mødet her. Det var et bredt besøgt møde med folk langt udenfor den snævreste kreds. Jeg kan ikke huske det nøjagtige antal, der har nok været et halvt hundrede mennesker. Der var dels sprog-interesse, foruden, hvad det er værd at nævne, ALCOR, som var en tysk gruppe til at forsøge at lave en fælles implementation på grundlag af fælles principper og de to ting blev altså mere eller mindre flettet sammen ved dette møde: Der var nogle af deltagerne, der var ivrige ALCOR-medlemmer og tilhængere og som var interesserede i simpelthen detaljer og "komme ned til business". Andre deltagere var mere interesserede i det principielle i det: Det galdt ikke mindst deltagerene fra Holland, Wijngaarden og Dijkstra, som på mange måder stillede sig noget skeptisk over for det, der foregik.
Jeg selv deltog jo i det der med en nysgerrighed og undren og det, der frem for alt slog mig med denne sammenkomst, det var hvor totalt uegnet dette mødemedium var, overfor det, der var brug for. Vi havde jo gransket på Regnecentralen, i den tid der, det foreliggende dokument, og havde noteret os en hel masse uklarheder, ting som vi mente var enten selvmodsigende eller slet ikke kunne forstås. Og det kunne vi bringe frem og for så vidt kunne vi få visse antydninger af nogle svar på dem. Men det var alt sammen så udpræget denne mundtlige form, hvor det meget hurtigt udviklede sig til meningsdannelser. Og i stedet for ligesom omhyggeligt at argumentere sin sag, så blev det til en polemisk affære. Og min konklusion var, at man måtte finde på et andet medium, man måtte have noget skriftlig diskussion ind i det.
Algol Bulletin'en
Og jeg foreslog så, at vi skulle lave et skriftligt debat-medium og det blev til det, der hedder Algol Bulletin'en. Det var med støtte fra Bech på Regnecentralen, at vi påtog os, på Regnecentralen, at lave dette her og det skulle altså være en meget hurtigt cirkulerende diskussions-journal med indlæg for og imod og forklaringer og spørgsmål om Algol på ganske knap form, sådan at man med en overkommelig mængde papir kunne komme igennem de væsentlige ting, uden ustandselig at måtte ligesom udvikle det hele fra grunden.
[Algol Bulletin'en findes flere steder, umiddelbart
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/
]
Og det blev et ganske vigtigt organ dette her. Det foreligger, jeg har selvfølgelig stadig et par eksemplarer af dem, hvis der er nogen, der har lyst, så er det muligt at få det at se. Jeg vil her fortælle lidt om, hvordan det udviklede sig med det.
Algol Bulletin 1: Diskussionsregler
Den 16. marts, altså nogle få uger senere, fik vi lavet første Algol Bulletin, nr. 1 på 6 sider.
[Den første bulletin kan findes på disse sider:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A1/P6.HTM
]
På det tidspunkt var der 13 aktive og 16 passive medlemmer. Det var i første omgang egentlig et organ for ALCOR, idet den skepsis som hollænderne havde vist overfor hele sagen følte vi var ligesom nedslående og unødvendig på det tidspunkt. Vi ønskede snarere at prøve at klare problemerne som man nu kunne og komme i gang med at få lavet nogle oversættere. Så her var der især i dette første nummer nogle diskussionsregler, nogle regler for, hvordan folk kunne fremsætte forslag og hvordan man kunne få afgjort, hvad der skulle besluttes i ALCOR gruppen. Som jo altså var en mindre, ikke verdensomspændende, historie.
Algol Bulletin 2: Arrays
Tiden gik lidt, maj 5. får vi den anden Algol Bulletin på 8 sider, med forskellige spørgsmål, især af mere triviel art, sådan ganske simple ting om tegnsæt og sådan noget, jeg vil ikke spekulere meget på det.
[Se
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P6.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P7.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A2/P8.HTM
hvor dog side 8 ser ud til at mangle indhold.]
Men der var begyndt at komme også mere pricipielle problemer frem om disse arrays: De optrådte i den gamle version af sproget på en temmelig tvivlsom måde: På den ene side så lignede man jo Fortran i ALgol 58 med at man havde en konstant størrelse i sine arrays. På den anden side kunne man læse noget om, at man i hovedet på procedurer, som man jo fuldt ud havde i dette sprog, kunne skrive udtryk som grænser for array indeks. Og det var noget uklart hvad man egentlig skulle forstå ved det der. Det er en diskussion, som fortsatte i lang tid.
Algol Bulletin 3: Procedure parametre
Der kommer et nyt indlæg, her har vi juni 8, Algol Bulletin nr. 3 på 6 sider.
[Se:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A3/P6.HTM
]
Hvor igen arrays som formelle parametre kommer frem. Og så kommer der et andet hovedproblem frem på dette tidspunkt: Spørgsmålet om input/output parametre til procedurer. I det gamle sprog skelnede man syntaktisk mellem visse parametre, som man kaldte input- og andre, som man kaldte outputparametre. Men der var altså nogle af os der på dette tidspunkt begyndte at se, at dette var tvivlsomt, hvad man egentlig skulle forstå ved det: Kunne man have den samme ting som ind og ud og hvad ville der så ske i forskellige, konkrete, lidt mere specielle tilfælde, måske, men ting, som viste, at definitionen og begrebet egentlig ikke var alt for klar.
UNESCO konference i Paris, juni 1959
Så kom juni, da fandt der en stor UNESCO konference sted, i Paris. Man kan næsten opfatte denne konference som forgængeren for IFIPs konferencer, masser af mennesker fra hele verden kom til stede. Og der var en masse diskussion om Algol. Det kom sig ikke mindst, ganske pudsigt, der blev iscenesat nogle diskussioner og der var selvfølgelig nogen til stede. Men det, der for alvor satte fut i tingene, det var da Christopher Strachey på et tidspunkt stillede sig op og fortalte og sagde, at dette Algol-væsen, det var en abomination, det var simpelthen rædselsfuldt, det var jo en spændetrøje som var ved at blive smidt ned om os allesammen, det var det værste, han havde hørt om. Og det sagde han så veltalende og pragtfuldt, at alle folk spidsede ører og sagde "det var da interessant, det må vi høre noget mere om" [Latter]. Så på den måde har han sikkert i virkeligheden - ja om det var tilsigtet eller ej, det skal jeg ikke kunne sige, jeg har spurgt ham om det, uden at få et svar - men i alle tilfælde, det havde en forunderlig, stimulerende virkning.
Så blev der i øvrigt, mere konkret, holdt mindre møder blandt de særligt interesserede og der blev lagt en tidsplan. Der skulle være en diskussion af forslag indtil den første november '59, igennem diskussionsmedier, Communications of the ACM og den etablerede Algol Bulletin, som på denne måde altså fik en ny status som et officielt organ, hvor alle kunne ytre sig.
Så blev der lavet en underkomité med medlemmer Dijkstra, Heise, Perlis og Samelson. Og jeg vil her ganske kort lige nævne de ting, som man snakkede om. Man snakkede noget om input/output, man snakkede lidt om konstanterklæringer, så vidt jeg husker, man snakkede om man skulle kunne skrive ikke alene procedure-, men også en function-erklæring. Man snakkede noget om funktioner som parametre til procedurer: Det lod til at være en ... det var ikke i det gamle sprog officielt og dette problem, hvordan skulle det tages med var genstand for adskillig spekulation. Deriblandt også noget om ækvivalens for funktioner. Der var nogen der sagde, at man må kunne kalde en funktion udenfor noget andet, når man bruger den inde i proceduren.
Der var detaljer, bittesmå ting om for-sætninger, der var lidt om præcedencen for boolske operatorer. Og så var der et andet spørgsmål, som løber meget igennem dette her, om man skulle tillade de enkelte implementatorer at give ekstra information, hjælpeinformation, til oversætteren sådan lidt udenfor det officielle sprog.
[00:13:00]
Sådan i retrospekt synes jeg man må sige at det karakteristiske ved dette her det er nærmest hvor trivielt og ubetydelige de spørgsmål egentlig er. Man kan måske sige, IO, det er måske det eneste virkelig væsentlige. I betragtning af, hvad der senere skete, er dette her småting.
Backus' syntaksbeskrivelse
Så kom der selvfølgelig yderligere et indslag som er vigtigt: Backus forelagde sin afhandling om "the syntax and semantics of" det internationale sprog, hvori han foreslog at beskrive det ved hjælp af den nu kendte syntaksbeskrivelse. Det kom her som et særtryk ved den konference og på den måde sivede det videre ud.
[Og det er jo:
John Backus, "The syntax and semantics of the proposed international algebraic language of the Zürich ACM-GAMM conference," Proc. International Conf. on Information Processing, Paris, June 1959, pp. 125-132, UNESCO.
Blandt Peter Naurs dokumenter findes det omtalte særtryk af Backus' afhandling med Naurs håndskrevne notater.
]
Algol Bulletin 4: Rapport fra Paris juni 1959 og tomme parentes-strukturer
Sommeren gik, Algol Bulletin nr. 4 indeholder denne rapport fra Paris-mødet fra denne underkomité og så forskellige andre indslag.
[Se:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P6.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A4/P7.HTM
]
Der kom her et indslag som også på en måde blev vigtigt: Identificerer en identifikator fuldt ud eller skal den efterfølges af et slæb af parentes-struktur? Jeg kan lige, det kan være bekvemt måske ...
[Uro i maskineriet, uhørlige bemærkninger]
Jeg kan lige vise med et eksempel, hvad det er det drejer sig om her. Det gamle sprog, Algol 58, havde en hel del muligheder for at snakke om strukturer ved hjælp af tomme parentes-strukturer: Man kunne tale om et array og så kunne man tale om det, skrive a, knækparentes, komma, knækparentes [a[,]] uden noget de steder her. Og det var jo i og for sig i sin tankegang en overordentlig fleksibel og magtfuld mekanik og man kunne gøre det samme med procedurer, hvor man kunne tænkes at have åbne parentes-strukturer.
Man kunne også forestille sig, at man ville fylde nogle af dem ud: Man kunne have her P, venstreparentes, komma, så måske Q, med igen komma, tom plads, komma tom plads [P(,Q,,)]. På den måde kunne man jo egentlig få, så at sige, rent strukturmæssigt, få defineret en ny funktion eller procedure med tre parametre, idet den fjerde, altså nummer to her, er fyldt ud. Og tanken var altså, at man på den måde generelt skulle kunne kommunikere og fylde nogle pladser ud, man kan også udmærket i sin array reference fylde den ene plads ud og så på den måde ville man kunne pille en enkelt vektor fra en to-dimensional matrix.
Og det gik videre, derhen at man ved specifikationer, det man nu kalder specifikationer i procedurehovedet, der sagde man noget om, at sådan nogle ting skulle man måske levere, sådan at man kunne fortælle for hver parameter, hvad for en struktur, den formodes at have.
Og når det spørgsmål er rejst, så kommer jo det yderligere spørgsmål, når man nu har på den måde at kunne skelne forskellen ved hjælp af tomme strukturer, vedhæng, tomme parentes-strukturer, så kunne man jo i princippet bruge P, for eksempel, stort P her, til at betegne flere forskellige ting. Og det er sådan et generelt spørgsmål, kunne man det, var det tilladt, eller skal man have et separat navn pr. anvendelse. Og det er en ting, som bliver bragt frem her på dette tidspunkt og som jo altså på en eller anden måde jo er meget afhængigt af, hvorvidt disse strukturer kan leveres med eller om de ikke kan.
[Uro i maskineriet]
Et andet problem, som jo er velkendt, har vi automatisk afrunding når vi har lavet et udtryk af reel type og putter det over i en heltalstype. Der var også forslag om at indføre bit-manipulationsmuligheder i sproget, det var jo en ting som jo senere blev glemt igen, sørgeligt nok, måske. Men der kom altså vidt forskellige ting frem her.
Algol Bulletin 5: Hjælpeinformation til oversætteren og procedurebegrebet
September 28, Algol Bulletin nr. 5 på 9 sider, kom med en ny og forlænget diskussion af hjælpeinformation til oversætteren og et fortsat bidrag til hele dette procedurebegreb.
[Se:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P6.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P7.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P8.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A5/P9.HTM
]
[00:18:44]
[Tilhører:] Har du nogle eksempler på den hjælpeinformation, der er tænkt på?
[Naur:] Ja, den kunne for eksempel hjælpe til at lave lagrings ... allokering, f.eks. på, for eksempel, skelne mellem tromle og ikke-tromle, kunne man forestille sig. Vi brugte det jo til dels i gamle DASK Algol, hvor vi brugte kommentarer af visse typer, som jo sprogligt set er tomme, men man kunne jo bare bruge dem til noget og putte dem ind og på den måde dirigere lagring på tromle af visse dele af programmet. Så det var i og for sig inspireret af disse ideer her.
[00:19:25]
Procedurer erklæret i procedurer, som vi jo nutildags ikke synes er særlig problematisk, det var ting som man den gang ikke overhovedet rigtig var klar over hvad man skulle med eller ikke skulle med.
Algol Bulletin 6: Invitation til møde i Paris
Og så kom vi videre i tid til den 17. oktober til Algol Bulletin nr. 6, som var en invitation til et møde i Paris.
[Bare en enkelt side:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A6/P1.HTM
]
Algol Bulletin 7: Et mylder af forslag
Vi nærmer os jo sluttiden 1. november for nye forslag til sproget. De myldrede ind omkring den 1. november og den 3. november udkommer så med alle disse forslag Algol Bulletin nr. 7 med 21 sider.
[Se
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P6.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P7.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P8.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P9.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P10.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P11.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P12.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P13.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P14.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P15.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P16.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P17.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P18.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P19.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P20.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P21.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A7/P22.HTM
med lidt rod i regnskabet omkring side 10-11 og en tom side 22.]
Der var jo hurtig ekspedition på denne her manøvre. Og lad os se lidt om, hvad der står i den sag, hvad det er for noget, der er ligesom lagt vægt på.
Der er en hel del om procedurer, specielt om disse dynamiske arrays, men stadigvæk uklart, hvordan man skulle gøre det. Dette funktionsækvivalensproblem er også fremme i høj grad.
Så er der noget om tom for-løkke, som jo er temmelig trivielt.
Et forslag om fuldt dynamiske array-erklæringer.
Og så kommer ting som vel egentlig først her rigtig kommer op: Lokal erklæring eller old- eller new-sætninger. Det var fra Holland og det er altså det som endte med at blive blokstrukturbegrebet. De kommer her som en lidt uklar ..., forslag om at man på en eller anden måde skal kunne om-bruge, ny-bruge ethvert navn ved at sige new k, så vil det sige, så får vi indtil videre en ny anvendelse af vores k, mens det gamle puttes i en stak, eller, det siger man ikke på den måde, men det står på venteliste. Og så kan man, når man har lyst til det, sige old k og så popper man jo, som man nutildags ville sige, så kommer man tilbage til den hidtidige betydning for den pågældende. Det var slet ikke knyttet her til nogen sprogstruktur, det er ting som stadigvæk ligger helt åbent på dette stadium.
Der var også forskelligt om dummy-navne, altså navne af den art, bundne variable, logikkens bundne variable, som jo til dels findes i form af de formelle navne nutildags.
Der var et eksplicit forslag om, at vi skulle have mange flere typer, man skulle kunne regne med komplekse, med matricer, med lister og så videre. Men ting som jo også blev glemt ret hurtigt, som bekendt.
Paris november 1959
Konferencen i Paris fandt sted her den 12. til 14. november og det var stadigvæk en åben konference med deltagelse fra hvem der havde lyst, inviteret af Compagnie de Machine Bull, som beværtede forsamlingen med de mest ypperlige frokoster hver dag. 49 deltagere fra 9 lande.
Der kørte så en heftig aktivitet med underkomitéer, der afgav en masse mere eller mindre kryptiske rapporter. De er ret svære at læse for den der ikke, måske, har været med, eller, selvom man har været med, kan det godt være mærkeligt hvad der foregår.
[00:22:51]
De handler f.eks. om problemer om identifikation, som vi her har antydet noget om. Og markeringernes [?] karakter, som altså er et spørgsmål, er de noget dynamisk og i så fald, hvordan dynamiske? Der er jo, væsentligt, to muligheder, man kan gøre det dynamisk med hensyn til en struktur i programmet eller man kan gøre det dynamisk, sådan at det først er under selve forløbet, at det afslører sig. Ikke sandt, hvis man gør det som vi nu gør det med blok-begynd og -slut, så ligger det i strukturen, vil man gøre det med old- og new-sætninger, så vil det være noget fuldstændig dynamisk, hvor man ikke på oversættelsestidspunktet vil kunne vide præcis hvordan tingene ville hænge sammen.
Der var en del om skjulte parametre til procedurer, det er det vi som nutildags ville tale om globale parametre, altså muligheden for at liste noget ind i en procedure uden at den er nævnt i listen over formelle.
New og old, det er stort set det samme som vi har heroppe.
For og if trivialiteter kommer der også lidt iblandt, om præcis hvordan de skal opfattes, forsøg på at definere disse ting mere stift, mere klart end det hidtil var.
[Tilhører:] Den der styrende variabel i for-sætningen, dens udefinérbarhed [?] er det noget man diskuterede dengang?
[Naur:] Den udefinition af den [styrende variabel]? Det er en sen og ulyksaglig tilføjelse, så vidt jeg husker. Det er en meget sen tilføjelse, idet man altså på det stadium her, provokeret af tidligere diskussion, forsøger at vise en ækvivalent programstruktur, som skulle gøre det samme. Men hvis man virkelig gør det, som det også er gjort i Algol 60 rapporten, så kan man jo ikke udefinere noget, som bekendt, uden at man siger, man gør det og så har man jo modsagt sig selv. Og det gør man altså også. [Latter.]
[00:24:51]
Procedurer som parametre: Der var forskellige ækvivalentproblemer og om man skulle i procedurehovedet have en særlig klausul, hvor man nævnte det, man forudsatte udefra: Required, var der noget, der hed, sådan at man kunne minde oversætteren om ..., det er selvfølgelig også med henblik på eventuel oversættelse af en procedure isoleret, sådan at man kunne forberede den på, hvad den skulle få i sidste øjeblik udefra.
Og så var der nogle betragtninger, provokeret af den tidligere diskussion om forskellen, betydningen af input/output parametre til procedurer. Og det er nogle ejendommelige betragtninger her, der sådan meget, meget kort siger, at, ja, en procedure den gør jo forhåbentlig hvad man har ønsket, at den skal gøre. Og man kan ikke, selvfølgelig, være sikker på, om programmørens intention virkelig er afspejlet i den, men der er ikke andet at sige om det, man vil altså ikke rigtig tage stilling til det. Og var jo en lidt ejendommelig konklusion af en sådan bestræbelse.
Så vidt de mere, sådan, åbne diskussioner.
[00:26:13]
Algol Bulletin 8: Rapport fra Paris november 1959
Nu nærmer vi os jo så den ... slutrunden og der får vi nu Algol Bulletin 8, som resumerer alle disse ting, på 15 sider. Det er Paris rapporten.
[Se:
https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P1.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P2.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P3.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P4.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P5.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P6.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P7.HTM https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A8/P8.HTM
Disse 8 referencer leder til delvist overlappende udgaver af i alt 11 (altså ikke 15) sider.]
Mainz december 1959
Og derefter snævrer man sig ind ved mødet i Paris. Der var man på den europæiske side blevet enige om, hvem der burde indgå i det endelige arbejde og de mødtes så i Mainz på universitet der, hos Bauer og Samelson. Og arbejdede så kraftigt [uhørligt] hele den der problematik igennem.
Og jeg tror man kan sige, at det var det [den] afgørende udvikling med hensyn til hele blokstruktur- deklarationsbegrebet. Man sloges meget heftigt frem og tilbage om det og ... Men i virkeligheden tror jeg man kan sige, at den europæiske gruppe ved denne lejlighed blev overbevist, for sit eget vedkommende, om, at den der blokstruktur med de dynamiske arrays og hele ny/gammel eller, hvad skal man sige, lokal/ikke lokal sagen, at det var den rigtige vej at gå og man lavede altså et dokument om det, som man selvfølgelig sendte til sine amerikanske venner. Det var 4 siders rapport den 19. december [utvivlsomt document 2 fra Algol 60 konferencen i Paris].
Og heraf fremgår det, at erklæringer er fundamentalt noget, der er lokaliseret til en blokstruktur ... Man taler ikke om blokke på dette tidspunkt. Det var nok i virkeligheden en heldig ting, at man ikke indførte selve betegnelsen, for så var der også noget for amerikanerne at komme med [Latter].
Procedurer har globale parametre. Det er altså problemet med disse skjulte parametre, det var helt åbent her: Hvis en ting ikke er enten lokal eller formel, ja, så er den global.
Men hvad angår procedureparametre i øvrigt, der var man ikke meget langt. Hele parameterproblemet var egentlig stadigvæk fuldt ud åbent.
Naurs skriverier
Se nu nærmer det sig jo stærkt, der var faktisk lagt, der i næste måned, der skulle være den endelige konference. Jeg selv havde jo nu arbejdet mig meget ind i dette her og følte mig på dette tidspunkt helt klar på, hvad det egentlige problem var: Det var nemlig ikke, at på en eller anden måde få folk sammen til at måske blive enige om noget, men det egentlige problem var, at få dem til at rapportere, hvad de var enige om.
For det viser sig gang på gang med disse her diskussioner: Man kunne godt arbejde sig igennem til en vis enighed. Men når man virkelig skulle ned til at få det skrevet, så var det forfærdelig besværligt: Så havde man jo ikke, mens man diskuterede det, rigtig kommet til bunds med at se alle hjørnerne og alle de mærkelige specialtilfælde, som alligevel må besvares.
Så jeg følte mig helt overbevist om, at dette projekts succes hang ret kritisk på, om der var nogen, der påtog sig at skrive det [?]. Og jeg så også meget klart, at sandsynligvis var den eneste løsning, at jeg selv prøvede at gøre det.
Og det besluttede jeg mig så for på dette tidspunkt, stort set, at man måtte hellere forberede det der skriveri, så godt som muligt. Og det gik jeg så i gang med.
Så der tog jeg for det første det, man var blevet enige om her, og der lavede jeg så i julen et notat på 7 sider, hvor jeg så vidt muligt beskriver det, man var blevet enige om her oppe.
[00:30:19]
Jeg gav mig til at benytte Backus-notationen, som jeg jo havde fået fra hans rapport fra sidste sommer. Og det forekom mig allerede på det tidspunkt helt klart, at den var et såre nyttigt instrument. Jeg tror også, at man så småt havde antydet brugen af det, måske i .. her .. jeg kan ikke huske det helt nøje [se punkt 15 i document 4A fra Algol 60 konferencen i Paris, et dokument, som indeholder en liste af justeringer til Zürich rapporten].
Men en anden ting, som jeg følte meget kraftigt, det var dette procedureproblem. Man havde her stadigvæk veget udenom dette problem med input/output parametre: Man blev ved med at, sådan, lade som om, at det måtte man klare.
Og så besluttede jeg, at det måtte klares. Så så gav jeg mig til at beskrive det. Og gennemgik såvidt systematisk jeg nu kunne alle de parameterkombinationer, der kunne komme på tale, og prøvede at give en beskrivelse for hvert enkelt af dem, hvordan den skulle fungere. Det er jo især alt dette med et navn, der svarer til et udtryk, eller et navn, der svarer til en indiceret variabel. Og så kan der være type-problemer.
Og det viste sig jo, at det svulmede op til, ja, adskillige sider, sådan, det ene tilfælde efter det andet: Sådan ret kedsommeligt, trivielt, men det kunne ikke gøres mindre. Og det fremlagde jeg så her, i et dokument [document 3 fra Algol 60 konferencen i Paris].
[00:31:50]
Og så gik jeg videre med resten af sproget og fik lavet en skitserapport, her, i løbet af en uges tid åbenbart, på 18 sider, med forsøg på at få hele sprogets struktur nogenlunde rundet af, også rent syntaktisk [document 5 fra Algol 60 konferencen i Paris].
Og så kom jo i øvrigt fra Amerika resultatet af de amerikanske bestræbelser. Der havde jo været en tilsvarende aktivitet, som jeg ikke kan gøre rede for i detaljer på nogen måde. Men det forelå her på et vist tidspunkt, i et ejendommeligt lille dokument, uden identifikation. Og det var meget uklart, egentlig, hvad det gik ud på, meget kortfattet. Det mest interessante, måske, var, at man havde en ganske lakonisk meddelelse om, at man kan sige foran en procedureerklæring, "recursive procedure". Det var ikke mere end 3-4 linier, værs'go. [Spredt latter] [Se document 6 fra Algol 60 konferencen i Paris, hvor muligheden for rekursive procedurer/funktioner omtales flere steder.]
Så var der gjort opmærksom på, at der manglede visse ting, som nogle af de amerikanske deltagere var kolossalt interesserede i: For-statement. Det var ikke rigtig færdigt på dette tidspunkt og det forberedte man os på, at det ville man komme frem med en masse forklaringer af. Og det kom så altså ved selve mødet.
Paris januar 1960
Og derefter, så var vi lagt op til det endelige møde i Paris, som jo fandt sted i en uge der, en bitterlig kold uge i Paris, fra den 11. til den 16. januar.
Dette møde fik jo en, selvfølgelig, meget ... spændende forløb. Man startede selvfølgelig med at føle hinanden lidt på tænderne. Men meget hurtigt, så var det ganske tydeligt hvor, sådan, hovedproblemerne var henne: Der var først og fremmest dette struktur ... programstrukturproblem: Det, som på den europæiske front så at sige havde slåsset sig igennem og hvor man stod meget enigt og stejlt: Man ville have denne blokstruktur, man troede på den, man ville have de dynamiske arrays. Men det var meget, meget fjernt fra hvad man havde forestillet sig på amerikansk side: Man troede, det var en spøgefuldhed. Så der blev altså et arbejde der med at overbevise de amerikanske deltagere om, at det skulle foregå. Det blev der så nedsat en fire-mands undergruppe til at klare. Og den havde for så vidt held som, da den kom tilbage fra sit slagsmål, så var de ... amerikanerne blevet blødgjort: De kaldte det blokke og så var de lykkelige. [Latter] Det gik forholdsvis ... det tog formentlig sådan cirka fra mandag til onsdag, sammen med visse andre ting.
Den anden ting var selvfølgelig procedureproblemet. Der havde jeg jo sådan halvvejs provokatorisk beskrevet, hvad jeg troede måtte være den korrekte, endelige forståelse af de eksisterende overenskomster. Det var denne detailbeskrivelse, som gav alle disse forfærdelige undertilfælde.
Da de forskellige deltagere, ikke mindst Bauer og de andre tyskere, så dette her, så kastede de hænderne mod himlen og sagde, at det var umuligt, det var umuligt, at det skulle være så indviklet, det måtte de kunne lave meget, meget nemmere og klarere og simplere. Så blev der lavet en underkommmité, der gjorde det.
Og den kom selvfølgelig så tilbage på et tidspunkt med et dokument. Nu havde jeg jo læst på lektien, selvfølgelig, på den måde, så jeg kunne jo ret hurtigt sige, jamen hvad med det tilfælde og hvad med det tilfælde og hvad med det tilfælde. Og det viste sig altså, at det var ikke gøreligt at komme igennem med den der tankegang om ind- og ud. Den tankegang blev altså undergravet, kan man godt sige, simpelthen ved at blive overbeskrevet: Det var en måde at myrde den på, gradvis. Men det var nu en lang og sej affære.
[00:36:31]
Så det tredie hovedpunkt var, kan man nok sige, selve beskrivelsesproblemet. Og der forelå altså oprindelig dokumentet fra Zürich og så en række dokumenter, som efterhånden blev nummereret op, dokument nummer op til ca. 20 eller sådan noget lignende. Og der lykkedes det ret hurtigt forsamlingen at blive enige om, at man ville smide Zürich-rapporten ud og i stedet for tage min skitse, som jeg havde lavet af det nye sprog, som sin basis for det videre arbejde. Og det var jo for så vidt en fra mit synspunkt overordentlig tilfredsstillende udvikling.
Jeg påtog mig så altså at lave den endelige beskrivelse og en masse af arbejdet bestod så simpelthen i at læse denne skitse. Igen fik jeg mulighed så for at gøre på den måde, jeg syntes var det rimeligste, nemlig at undgå for meget snak: Man tog simpelthen nogle læseperioder, hvor man tog et enkelt afsnit i fællig, så kunne jeg lige diktere sidste minuts rettelser, hvad der var af kendte ting, som burde rettes. Og så læste man lidt på det og de der så havde indvendinger registrerede sig så hos Mike Woodger og påtog sig så senere, ikke på stedet, ikke i det øjeblik, men påtog sig så at lave simpelthen alternative formuleringer, skriftligt, en linie eller to eller ti eller hvor meget de nu havde lyst til at sige: Der vil jeg gerne have ændret det og det.
Disse skriftlige ting samlede jeg så sammen. Der skulle være nummer på, så sektionerne passede. Så sorterede jeg dem efter sektioner og så blev de maskinskrevet hos nogle af sekretricerne. Det var IBMs mandskab, det foregik under IBMs World Trade, hedder det vist dernede, som stillede mandskab til rådighed og de lavede så maskinskrevne eksemplarer af det der.
Og de gik så senere ud igen til forsamlingen og så tog man dem, stump for stump. Ofte ville der for et enkelt afsnit være adskillige alternative forslag. Og dem tog man et efter et og blev enige om dem. Afstemning, hvis det var nødvendigt. Og på den måde fik man faktisk ... så kunne man slå streg over nogle og nogle af dem, sagde man, den der, den var okay. Og det var det egentlige materiale, der blev lavet til den endelige opskrivning af rapporten.
Det kom til at dreje sig om, jeg tror op imod 200 sådanne enkeltpunkter, nummereret op. Vi kom altså derop mod 200.
[00:39:10]
Jeg kan huske, et af de sidste, det var nu en forfærdelig sag: For der havde været en anden underkomité om dette spørgsmål med typer. Der havde man jo ... Det jeg kan huske, jeg selv var med og Perlis var også med. Og vi prøvede at diskutere hele det problem. Alternativerne, man kunne gøre sådan, man kunne gøre sådan, man kunne gøre sådan. Og prøvede at beskrive i alle detaljer. Man kunne helt udelukke automatisk konvertering af typer imellem hinanden eller man kunne have noget med operatorer, formentlig, eller man kunne gøre det automatisk, sådan og sådan. Og det blev så forelagt og så blev man enige om en ret snæver, et ret snævert begreb, hvor det ville være imod spillets regler at gemme en real i et heltal. Det blev man enige om.
Og så kom - gud bedre det - sådan lige i sidste øjeblik, Rutishauser. Og Rutishauser, nu er han jo død, men han var pionér på området fra Zürich, nød umådelig anerkendelse, selvfølgelig, med god ret. Og han kom på et meget sent tidspunkt med en note, som han beskrev, de skulle have numre, disse her, det var den note, der havde "uendelig minus 1". [Latter] Det var den absolut ultimate note her i verden. Hvor han erklærer meget lakonisk, at han syntes det var en stor fejltagelse, hvad vi havde gjort med disse her typer. Og det ville han lægge sig frygteligt imod og han mener, at alle matematikere ville grine af os og sige vi var fuldstændig åndsvage.
Ah, så tog man jo et dybt suk og sagde, ah, kære Heinz, så skal du da få din vilje. Og så lavede man om på det. Jeg synes nu det var en fejltagelse, men sådan skete altså visse af de ting der.
Det foregik sådan i løbet af ugen med disse her bearbejdninger. I løbet af torsdag-fredag, da var altså det meste af disse ting stort set klaret.
[Dokumentet med justeringer til skitserapporten er document 31 fra Algol 60 konferencen i Paris med ændringsforslag nummereret fra 101 til 175 og ∞-1, så ikke helt det antal punkter, Naur omtaler.]
[00:41:18]
Men der var stadigvæk en underkomité om disse ulyksalige procedurer og deres parametre. Og det trak ud og ud og ugen gik jo og man skulle skilles der lørdag. Jeg tror, at man havde sat, at lørdag midnat ... Det var jo ikke fordi man tog ellers hensyn særlig til dag og nat, man arbejdede jo bare. Så lørdag midnat, lørdag aften, da ville man altså holde op.
Og da forelå der så klokken 10 lørdag aften, da alle folk virkelig var meget trætte, da forelå der så sådan et par halve sider: En halv side om procedureerklæringer og en anden halv side om procedurekald [utvivlsomt document 27 og document 26 fra Algol 60 konferencen i Paris]. Og dem så man jo søvnigt på og så vedtog man dem! [Latter] Og så gik man i øvrigt op på Place de la Contrescarpe og hørte på pop-musik eller hvad det nu var for noget, som John Backus i mellemtiden havde opsporet, hvor man ... gode steder. [Latter]
Søndag morgen i Paris
Og så var det jo meget hyggeligt, indtil den sørgmodige opvågnen næste morgen. Næste morgen var en søndag, hvor jeg stadigvæk var fuld af dette her og det skulle jeg pludselig hjem og beskrive det. Og jeg fandt meget hurtigt ud af, at der var altså fundamentale vanskeligheder med det procedurebegreb, man havde lavet.
Det hang især sammen med procedurer uden parametre, som man ikke rigtig kunne skelne. Man kunne ikke rigtig vide om, når man kaldte et navn, der var en procedure uden parametre, om det da refererede til, at man skulle evaluere den eller det var bare en udskudt reference til den. Og det var jo en sørgelig ting, hvis man på den måde blev hængende med en sådan fundamental vanskelighed. Og det følte [?] jeg meget stærkt, så jeg prøvede omgående at reparere på det, genindførte ...
Man havde i de forslag, der lå, der havde man droppet alt om forskellen mellem procedurer og funktioner. Og jeg mente, det måtte man nok lade være med, man måtte genindføre funktionerne og sådan noget. Så det lavede jeg et dokument om, der så blev rundsendt der søndag morgen, efter det hele egentlig skulle være overstået [document 201 fra perioden efter Algol 60 konferencen]. Og de, der var til stede i nærheden, nogle var på hotellet, de kunne jo svare på det, de andre måtte få det sendende og jeg havde en masse ultimatummer på, hvis jeg ikke hørte fra dem: Sådan og sådan, så ville det hele gå ad helvede til.
[00:43:44]
Og det trak så i virkeligheden ud i nogen tid derefter.
Algol 60 skitse
I løbet af nogle uger ... Det viste sig nu, at det foreslag, som jeg selv havde digtet, det var heller ikke holdbart. Og det var temmelig ubehageligt i nogle uger.
Men det endte altså med, det var især Perlis, der endte med at, synes jeg, foreslå nogle brugbare ting [document 205 fra perioden efter Algol 60 konferencen] og de blev så, for så vidt, gennemført, stort set beskrevet. Jeg fik lavet et dokument der i løbet af sidste halvdel af januar - en skitse - dokument, som så kunne udsendes til forfatterne til yderligere granskning, lige i begyndelse af februar [skitse til Algol 60 rapport med rettelser]. Og der skulle selvfølgelig være almindelig indsamling af den endelige godkendelse og endelig fejl og rettelser.
Jeg tror at det var på det stadium, at den ulyksalige ting med for-statement kom ind. (Skulle ikke undre mig.)
Rekursion: En telefonopringning fra Amsterdam
Det var altsammen meget godt, men så fik jeg der - det må have været midt i februar - en telefonopringning fra Amsterdam ... Ja, jeg har glemt at fortælle om diskussionen om procedurer: Under Parisermødet der kom jo hele problemet med de rekursive procedurer også op. Desværre - jeg var ikke selv til stede - men jeg har hørt om, at der udspandt sig nogle ganske forfærdelig ubehagelige diskussioner, hvor McCarthy forlod mødet meget vred på et tidspunkt og kaldte en af de andre deltagere ved en meget ubehagelig betegnelse [latter], smækkede med døren. Så det var ikke lykkeligt, det der.
Han havde ... det var selvfølgelig ham, der ønskede at medtage disse rekursive procedurer. Men de blev eksplicit holdt udenfor - dem skulle man ikke have med.
Men så fik jeg altså en telefonopringning fra Amsterdam midt i februar. Hvor Wijngaarden, som stod med Dijkstra her ved siden af, sagde, at der var jo altså et problem i vores rapport, fordi der var decideret en ting, som var uklar, som måtte klares på én eller anden måde. Og det var simpelthen, kunne man have denne procedureidentifikator ... Man havde fortalt, at man kunne putte en værdi ud i den, ikke sandt, man kunne skrive den til venstre for kolon ligmed, det var klart nok: Hvis den står der, så betyder det, at værdien skal puttes over i den, men hvad sker der ellers? På én eller anden måde måtte hullet jo dækkes.
Og så havde de jo parat selvfølgelig, en lille sætning, som jo på meget blid og indirekte måde, der bare siger, at enhver anden forekomst af procedurenavnet, det betyder, at man aktiverer proceduren. Man sagde ikke, at det var en rekursiv ... [Latter]. Og jeg tænkte jo selvfølgelig straks, at, ja, der var jo et hul i rapporten, det kunne jo ikke nytte noget, at vi lavede en rapport, hvor der var kendte mangler [på], så det skulle fyldes. Og det var da en meget chamerende måde at fylde det på.
Så tænkte jeg, fanden stå i det, det skriver vi, så ser vi, hvad der sker. Og det sivede så lige igennem og der er det! [Latter]
Algol 60 første udkast marts 1960
Og på den måde blev der altså i løbet af februar måned disse ting samlet sammen og den første marts tror jeg vi havde en færdig rapport. Og, ja, derefter kom så alle de sørgelige opdagelser, ufuldkommenheder, alle mulige slagsmål, men det tror jeg slet ikke, jeg vil tale om.
Og på den måde er jeg jo faktisk igennem min tale.
Men havde planlagt vi skulle have to timer, vi kan jo godt fortsætte med den næste med en diskussion, men jeg har vist ikke særlig grund til at sige mere og vil også meget gerne høre, hvad spørgsmål, der er.
Skal vi holde pause?
[00:47:43]
[Tilhører:] Der er måske lige grund til at gøre opmærksom på, at en væsentlig grund til en hel masse af vanskelighederne var jo, at man havde slet ikke et begrebsapparat, der var nær så afklaret som man har nu.
[Naur:] Det er da klart.
[Tilhører:] Altså, jeg mener det var i virkeligheden hovedårsagen til alle de beskrivelsesvanskelighder osv. at ... man anede slet ikke, hvad man snakkede om.
[Naur:] Naturligvis, naturligvis.
Jensen's device
Forresten, jeg må jo lige ... jeg må jo også lige nævne den anden frygtelige ting. Det var jo ... det var jo dette her ... det problem her. For da jeg kom hjem med dette her forslag og viste det til Per Mondrup, så blev han virkelig meget vred. [Latter.] I kender godt Per Mondrup fra Regnecentralen, ikke? Han blev virkelig meget vred: Se, nu har I ødelagt hele sproget, det der, det var jo det, der var det smukke i det sprog. [Latter]
[Problemet, der omtales her, er udelukkelsen fra Algol 60 af en mekanisme fra Algol 58 til, ud fra et array med en given dimension, at trække et array af lavere dimension. F.eks. trække en række som en vektor (et 1-dimensionelt array) ud af en matrix (et 2-dimensionelt array).
Som eksempel følger her en Algol 58 procedure til at beregne skalarproduktet af to vektorer, a og b:
procedure Innerproduct( a[], b[], k ) =: ( y ); array ( a, b [1:k] ); integer k; begin Innerproduct: y := 0; for p := 1 ( 1 ) k; begin y := y + a[p] * b[p] end; return; integer ( p ) end Innerproduct
Eksempel på kald:
Innerproduct( A[t,,u], B[], 10 ) =: ( Y )
I de formelle parametre til Innerproduct, a[] og b[], angives dimensionen (1) ved den ene, tomme, indeks-position og erklæringen array ... [1:k]. I de aktuelle parametre, A[t,,u] og B[], er der ligeledes en enkelt, tom, indeksposition, der svarer til den tomme indeks-position i de formelle parametre. Skalarproduktet beregnes således som
A[t,1,u]*B[1] + A[t,2,u]*B[2] + ... + A[t,10,u]*B[10]
]
Og nu havde vi jo vores morsomme og spændende samarbejde på Regnecentralen og der sad Jørn Jensen jo, stakkels mand, midt imellem mig og Mondrup. [Latter.] Og Jørn Jensen måtte jo finde på noget til at dulme disse her gemytter, så han fandt på sin "device" [Jensen's device]. [Latter.] Og det var jo en strålende ting så på den måde så fik vi jo klaret, for det er jo stort set ... Så sådan kom det frem.
Så lavede jeg et lille eksempel med den der der hedder ... der er et af eksemplerne på procedureerklæring ... jeg kan ikke huske hvad for et af dem. Men den har det jo implicit. Det er summationsproceduren eller sådan noget lignende.
[Det er fjerde eksempel, procedure Innerproduct på side 36 i afsnit 5.4.2 Examples, under 5.4 PROCEDURE DECLARATIONS i Algol 60 rapporten ("revised"):
procedure Innerproduct(a,b)Order:(k,p)Result:(y) ; value k; integer k,p ; real y,a,b ; begin real s; s := 0 ; for p := 1 step 1 until k do s := s + a * b ; y := s end Innerproduct
Et eksempel på kald af Innerproduct findes på side 29, det fjerde eksempel i afnit 4.2.7 Examples under 4.7 PROCEDURE STATEMENTS:
Innerproduct(A[t,P,u], B[P], 10, P, Y)
Som det fremgår af 4.7.3 Semantics, er effekten af dette kald som om procedurekroppen bliver indsat og udført på kaldstedet, med justeringer som følger:
begin integer k; k := 10; begin real s; s := 0 ; for P := 1 step 1 until k do s := s + (A[t,P,u]) * (B[P]) ; Y := s end Innerproduct end
]
Så på den måde fik vi altså klaret problemerne, også internt.
[Tilhører:] Det var måske en god ide vi holdt en pause inden diskussionerne, jeg har i hvert fald flere spørgsmål.
[Naur:] Ja, det synes jeg, jeg synes vi skal holde pause nu, det er udmærket.
[PAUSE.]
Spørgsmål og svar
Argumenter
[Naur:] Du havde et spørgsmål, sagde du ...
[Tilhører:] Ja, jeg havde et spørgsmål som gik på noget i retning af, hvilken type argumenter, der hovedsaglig blev anvendt i diskussionen: Hvor stor en rolle spillede sådan noget som implementationstekniske argumenter i forhold til - skal vi sige - brugerpsykologiske argumenter?
[Naur:] Selvfølgelig umådelig forskeligt for de forskellige deltagere ... [uhørligt]. Der var nogen af de ... komitéfolkene, der jo simpelthen sad og eksperimenterede med oversætterteknik og forsøgsoversættere og de følte sig naturligvis hele tiden yderst motiverede af præcis den erfaring, de havde og gør det der og så tænkte de selvfølgelig straks vzzz, vzzz ..., hvordan går det med min oversætter på det punkt og vil den nu bryde sammen af den grund, ikke? [Latter.]
Det var der i høj grad nogle, der var interesserede i. Det gjaldt både fra tysk hold givetvis ... det gjaldt i høj grad Julian Greene fra Amerika, som sad med en gruppe og lavede ting på det tidspunkt.
For andre gjaldt det naturligvis slet ikke: Det er givetvis, at Wijngaarden, han var interesseret i det fra et logisk synspunkt, fra et rent strukturelt synspunkt. Ikke fordi han jo ikke ... han er jo særdeles erfaren, også i praktiske anvendelser, numerisk analyse osv. Så givetvis har det jo været afgørende for hans valg. Men samtidig har han altså haft det der ideal om simpelthed. Men det tror jeg nu nok, at man kan sige, at det var der vel en fælles, meget kraftig, ønske om, stort set fra alle sider.
Måske med undtagelse af netop Julian Greene. Han gik ind for ... han elskede for-statement og det var vel hans ansvar eller hvad man skal kalde det, at man fik et forholdsvis kompliceret apparatur i det der. Og jeg synes selv i dag, at det var uberettiget, jeg synes ikke det var rimeligt. Men det elskede han nu altså og han anså det for selve sprogets sjæl. [Latter.]
Så ... Men direkte brugerpsykologiske ... Det er svært at sige. På et vist stadium, når man havde siddet tilstrækkelig længe om de der, sådan formelle og logiske problemer, så er man jo altså meget langt fra det der: Så kan man slet ikke overkomme at skulle for alvor ligesom bare prøve, hvordan det virkede på nogetsomhelst problem.
Eksempler
Det var meget karakteristisk, at da vi lige var færdige med rapporten, den første version, som blev udsendt, altså ikke til offentligheden, men til forfatterne, der omkring den første februar, en måned før den endelige verion, da havde man jo aftalt ved mødet i Paris, at der skulle selvfølgelig være eksempler, righoldige eksempler, og alle skulle gå hjem og lave eksempler. Og jeg kan huske, jeg skrev meget ironisk, at jeg har vedlagt rapporten præcis så mange eksempler, som jeg har modtaget fra deltagerne, dvs. nul. [Latter.] Og det provokerede altså to folk til at lave eksemplerne, nemlig Wijngaarden til at lave det om Euler ... denne summations ... eulersummationen, som han jo selv har udviklet metoden til, og Rutishauser lavede den der integrerer differentialligninger, som jo også var til dels hans egen boldgade.
De kom så og de blev taget med og der var ikke flere. Så det kan man sige, det var, alt taget i betragtning, det var egentlig det fulde erfaringsmateriale der var, da man lavede det der sprog.
[00:54:00]
Input/output
[Tilhører:] Jeg kunne godt tænke mig at vide, hvordan det dog kunne gå til, at input/output-[uhørligt] ... Jeg ville jo skønne, at det var en af de væsentligste hindringer for Algols videre udbredelse, det var, at selv for ganske elementære og simple anvendelser dér, der skal man stå på hovedet i andres maskiners input/outputprocedurer for at finde ud af, hvordan de virker. Hvordan skete det, var man så uenige om det, altså, så det var simpelthen, at man, droppede det, altså?
[Naur:] Jeg tror, at man kan sige, at man var enige om, at det var så svært, at man knap nok prøvede. Jeg husker aldeles tydeligt, at det blev droppet, sådan, i løbet af et øjeblik. Der var i min skitse fra januar, der var der nogle få, ja, halve, hele sider, om det dér. Og de har altså været folk i hænde nogle dage. Og så vidt jeg husker, blev det droppet praktisk talt uden diskussion: Man orkede det ikke. Og jeg er da fuldkommen enig med dig i, at det har været en væsentlig mangel og givetvis hindret sprogets udbredelse enormt. Og har altså været en virkelig en meget, meget dårlig beslutning, at man ikke gjorde noget mere ved det, i alle fald meget hurtigt efter. Så, ja, det var svagheden ved den der gruppe som helhed. Den må alligevel have haft, må man, sådan, konkludere, som eftertanke, at den har været for domineret af det teoretiske, af det principielt ... strukturinteresse for sproget, og mindre den praktiske databehandl ... problematik. Og så ... [uhørligt].
Heltallige labels
[Tilhører:] Hvordan kom de heltallige labels ind?
[Naur:] De var der vist hele tiden. Og der kom vel en afstemning på et tidspunkt med et forslag om, at de skulle droppes og så kom der vist en afstemning, hvor de blev vedtaget med en snæver margin. Det kunne jeg forestille mig. Og givetvis har der været ... De er jo overtaget fra Fortran, ikke ... Så der har givetvis været en forespørgsel på dem. Der var også ... jeg kan huske i den anledning der var et ekstra spørgsmål, som er klaret, som er utrykkeligt sagt, jeg ved ikke, om I kan huske det i rapporten, som jeg selv gjorde opmærksom på, fordi selv om man siger, at heltal kan være labels, så er det jo ikke sikkert, at nul-et-syv (017) er det samme som et-syv (17), det er ikke sikkert. Så det måtte særligt siges. Og jeg kan ikke engang huske, hvad afgørelsen var. [Latter.] Er der nogen, der kan huske det? Det står et sted i rapporten, fordi jeg som redaktør så det problem og sagde, det skal altså klares, det må siges, ellers vil man stå på hovedet bagefter.
Labelled/unlabelled syntaks
[Tilhører:] Det at man kan sætte flere labels foran en sætning og man skelner mellem unlabelled statement og labelled statement og det fører [?] man med sig ved hver af sætningsdefinitionerne, det har undret mig mange gange.
[Naur:] Nåh, at det ikke kunne gøres behændigere?
[Tilhører:] Ja.
[Eksempler på dette fra side 23 i afsnit 4.1 COMPOUND STATEMENTS AND BLOCKS i Algol 60 rapporten ("revised"):
<basic statement> ::= <unlabelled basic statement>| <label>:<basic statement>
Og:
<compound statement> ::= <unlabelled compound>| <label>:<compound statement>
Og fra side 26 i afsnit 4.5 CONDITIONAL STATEMENTS:
<conditional statement> ::= <if statement>| <if statement> else <statement>| <if clause><for statement>| <label>:<conditional statement>
Og fra side 27 i afsnit 4.6 FOR STATEMENTS:
<for statement> ::= <for clause><statement>| <label> : <for statement>
]
[Naur:] Njøh, det kan da godt være, øh, værsgo', og gør det behændigere! Jeg mener, det er den syntaks, der blev virkelig noteret ned i løbet af nogle dage, ikke sandt, så det kan jo ikke nytte noget at man ... Det er en af de sidste ting ... Meget af det blev lavet i Paris, i alle tilfælde som skitser, og jeg kan huske, at noget af det sidste, jeg lavede, det var noget med strengene og sådan noget og i løbet af få dage, så var det faktisk overstået.
[Tilhører:] Der er altså ikke nogen begrundelse for at man har skelnet mellem unlabelled og labelled statement?
[Naur:] Hvordan vil du ellers klare det, vil du ... vil du lade denne her fyr være en del af enhver sætning? For der er vist visse tilfælde, hvor det ikke er bekvemt. Altså vil du så sige, at en goto-statement, det er altså én med goto og så én eller anden udtryk her, det skal vel være en designational expression eller sådan noget, ikke? Og så her en måske-label [skriver på tavlen]. Er det sådan, du vil definere denne sætning?
[Tilhører:] Jeg vil definere statement som labelled statement og labelled statement det var så en label, efterfulgt af unlabelled statement. Og unlabelled statements det kunne så defineres som samtlige de sætningstyper, man har, altså assignment statement osv.
[Tilhører:] Humlen er jo, at det her med labels, det er slæbt med ved hver eneste sætningstype. Under for-sætninger er der sådan og sådan og så kan man også hægte en label på. Det står ... i stedet for, at man har samlet dem på ét sted.
[Naur:] Så vidt jeg husker, jeg er nemlig ikke sikker på, at der er et behændigt sted at samle det, det er min vage erindring om det. Jeg tror nok, at der er visse steder, hvor man ikke ønsker dem, nemlig. Muligvis har du ikke lyst til at have dem foran en procedurekrop, men det er forresten ... Jeg kan ikke en gang huske det, kan man sætte en label foran kroppen?
[Tilhører:] Ja, det tror jeg godt, du kan.
[Naur:] Nå, men så er det ikke det, der er grunden. [Latter.]
[Tilhører:] Jeg er næsten sikker på, at du kan ...
[Tilhører:] Ja, det kan du [uhørligt].
[Naur:] Er der nogensinde nogen, der har prøvet det? [Latter.]
[Tilhører:] Det er en måde at kalde proceduren rekursivt på, uden at ...
[Tilhører:] Nej, næh, den bliver ikke kaldt.
[Tilhører:] Nej, netop, det er også det, jeg siger.
[Naur:] Men det kan da godt være, det kan gøres behændigere. Der er meget af den her syntaks, som kunne gøres meget smartere, det er jeg ikke i tvivl om, det har da netop ...
[Tilhører:] Det, der efterlyses, der var en grund til det, ikke ...
[Naur:] Jeg har åbenbart ikke kunnet ... jeg tror, jeg har formentlig formuleret væsentlige dele af det og jeg har vel ikke været behændigere end som så. Jeg kan vist ikke sige andet.
Understregede nøgleord og reference-, publication-, hardwarerepræsentation
[Tilhører:] Det kunne egentlig interessere mig, nu skrev du selv goto med streg under og så kom jeg til at tænke på alle de forbandede besværligheder man har, når man skal sidde og skrive sådan noget på en flexowriter med understregningerne. Altså, det sprog, I brugte i rapporten, har jo i meget høj grad præget det sprog man bruger, når man skal skrive til en datamat, ikke. Altså, overvejelsen bag ved netop brug en understregning i stedet for f.eks. at skrive det med store bogstaver og så sige ... eller at vælge den udvej, som man nu er gået over til, nemlig at sige reserverede ord.
[Naur:] Det ligger egentlig før min tid dette her. Det ligger jo allerede i det gamle, i Algol 58, hvor man definerer denne tre-deling med, hvad hedder det, hardware representation og ... man havde også én, der hed publication form eller sådan noget, ikke, og så ... reference language.
Jeg tror nok, så vidt jeg har hørt fra andre folks kommentarer om det, at det er jo et spørgsmål, som man kan få absolut endeløse diskussioner til at gå med. Så med mindre man vil lade hele konferencen hænge på den art spørgsmål, så må man finde et eller andet trick til at undgå det. Og det trick var, at man sagde, jamen kære venner, I kan skrive, hvad I vil, referencesproget definerer vi, men det er noget andet, I skriver i, og så må I selv ligge og rode med det. Det er simpelthen et trick til at komme igennem overhovedet til én eller anden strukturel definition af sproget, uden at blive hængende i de der detaljer.
Og hvorfor man så bruger understreg, det kommer formentlig fordi det er jo den måde, typografer skriver kursiv. Altså, hvis du i et manuskript skal have kursiv, så streger du streg under, ikke? [Latter.]
[Tilhører:] Aj, det kan s'gu ikke være rigtigt. [Latter.]
[Naur:] Jo det tror jeg da rigtig nok, hvorfor skulle det ikke være det?
[Almindelig moro.]
[Tilhører:] Det var sikkert et fuldstændig uundværligt trick, det der.
[Naur:] Ja det tror jeg, jeg tror det har været meget vigtigt, for succes'en af forehavendet.
[Tilhører:] Ellers havde det slet ikke kunnet lade sig gøre.
[Naur:] Nej. Og på det tidspunkt der, da gik vi da og drømte om den skrivemaskine, der havde en knap, der hed goto og én, der hed if og én, der hed then, ikke? Det ville da være skønt at have sådan en lidt righoldig sag. En APL-skrivemaskine.
[01:02:45]
Own
[Tilhører:] Hvordan kom own-begrebet ind og hvad er motiveringen for det?
[Naur:] Own kom ind fordi John Backus han syntes det skulle ind. [Latter.] Det hang altså sammen med en ting, som jeg ikke har været så nøje inde på: Det gamle sprog havde jo mulighed for at have flere indhop i procedurer: Der kunne man lave, jah, jeg kan ikke sige dig detaljerne, hvordan det foregik, men man kunne navngive den samme procedurekrop med flere forskellige navne. Og det kan jo ofte være hyggeligt, på én eller anden måde.
[Tilhører:] Og med flere parameterlister, de kan have hver sin parameterliste ... [uhørligt] give sig til at hitte ud af ...
[Naur:] Ja, ja, altså, og det kan jo ofte være hyggeligt at man ... Men tanken var jo givetvis, at man hopper ind og initialiserer dér, og så hopper man næste gang ind et andet sted og så slutter man måske af der nede, ikke? Og hvis man skal kunne hoppe ind og initialisere, så må man jo have own i én eller anden forstand: Noget, der hører til inde i kroppen og som bevares fra kald til kald.
I det øjeblik vi så dropper disse multiple indhop, så siger John Backus, jamen kære venner altså, nu kan vi jo slet ikke det der mere, njah, så må vi jo finde på et eller andet og så kom man på det. Så vidt jeg ved. Det er så vidt jeg husker det og logisk kan det godt hænge sammen, men det er altså en frygtelig tilføjelse, fordi den slet ikke er bundet ordentligt op med rekursive strukturer og alt det der, ikke sandt. Det er en underlig påklistring.
Datastruktur
[Tilhører:] Hvorfor fik sproget sådan en primitiv datastruktur?
[01:04:25], [01:05:26]
[Naur:] Man var ikke interesseret nok i at lave den bedre antagelig, må man sige. Altså, der har været løse forslag, men de, der virkelig blev engageret i at bidrage til det, var altså mere interesserede i blokstruktur og procedurebegrebet. Og det er jo sørgeligt og mærkeligt. Man kan godt undre sig over, at John McCarthy ikke [?] i højere grad slog på, at der skulle være nogle lister og sådan noget. [uhørligt] i Lisp på det tidspunkt.
Strachey indvendingen
[Tilhører:] Hvad var det for en slags argument, der blev indført af Christopher Strachey, der på én eller anden konference, sagde du, der var han lige ved at lægge hele projektet ned, fordi han protesterede mod, det var en spændetrøje lagt over Jer. Var det fordi han mente, der skulle være flere åbne ender i sproget eller var der fordi han mente at der skulle være flere forskellige programmeringssprog?
[Naur:] Han mente, der skulle være mange programmeringssprog. Han mente ikke, man skulle forsøge at standardisere. Tendensen var jo der, bevægelsen var, kan vi ikke lave et sprog, som bliver brugt af alle? Og det synspunkt er jo stadigvæk i og for sig levende i en vis forstand. Der er mange, der hellere vil prøve at udvikle sprog-idéen og lege med nye sprog. Og det var hans, på det tidspunkt, udprægede indstilling.
For øvrigt var ... det var ikke så fjernt også fra hvad Dijkstra sagde der i ... på det tidlige stadium af begivenhederne, der i februar '59, da jeg første gang traf sammen med ham, ved mødet her i byen. Da var han i og for sig på samme linie, at det var ulideligt, den der tilbøjelighed, som var meget udpræget hos især måske blandt de tyske deltagere, Bauer og Samelson, at nu var vi i færd med at lave dette her og ingen slinger i valsen: Værsgo', sådan her skulle det være, nu skulle vi implementere det sådan og ikke diskutere, hvad det var for noget.
Men det er klart, disse to tilbøjligheder, de to tendenser, de må komme i konflikt og man kan ikke lave noget, der ligner dette her, uden dog, i en vis grad at skære af for sin fantasi og sige, okay vi kan godt sige vi kunne gøre smartere sådan og sådan, men for sagens skyld, nu lægger vi mere vægt på noget ensartet, ikke? Det er en uløselig konflikt.
Der er flere rundt omkring ...
[Tilhører:] Jeg vil gerne lige tilføje, at Strachey, han var jo her for nylig, i datalogisk selskab, og der fortalte han jo, at han havde skiftet mening.
[Naur:] Om det der, specielt?
[Tilhører:] Ja.
[Naur:] Og det kan han også skifte mening om, ja ... [Latter.] Nåh ja, men han har jo også skiftet mening ... Han var jo den, der ved samme konference fremlagde, jeg tror, én af de aller-, allerførste udførlige ideer om multiprogrammering, sådan noget, altså, virkelig tidsdeling. Og det har han sandelig også skiftet mening om, han synes, det er helt forkert.
Algol 68, Algol Wirth etc.
[Tilhører:] Hvordan ser du på den udvikling, der er foregået efter, senere hen, altså jeg tænker specielt på Algol 68 og måske også Algol Wirth og sådan noget?
[01:08:39]
[Naur:] Jeg synes jo Algol Wirth er en god udvikling og Algol 68 synes jeg er en alt for kompliceret udvikling. Jeg var tilhænger af, der midt i 60'erne, da jo man fortsatte med arbejdet i denne arbejdsgruppe, da ville jeg have syntes det ville have været udmærket, hvis man havde ryddet op i Algol 60 og fjernet nogle af de mest dumme ting og tilføjede nogle virkelig fundamentale, måske noget datastrukturmæssigt. Meget på linie med det, som Wirth og Hoare har forslået.
Det er især Wirth, ikke, Wirth og Hoare gik tilsammen med deres forslag om en oprydning. Og det var vel stort set Algol W, er det ikke stort set lagt ind i den? Det var en sund, rigtig udvikling, derimod Algol 68 forekommer mig at være ... ligesom lægge vægt jo på en side af det, som egentlig er dybt overdrevet: Man fremhæver altid ved Algol, at der er tvetydigheder i det. Og det hænder sig altså, at man har lagt mere mærke til de 5 tvetydigheder, der er i Algol end i de 500, der er i Fortran og de 10.000, der er i Cobol. Af én eller anden mærkværdig grund.
Og det har man altså også specielt lagt vægt på, i denne arbejdesgruppe, hvor jo så Algol 68 i så uhyre grad er blevet et spørgsmål om at formalisere sin beskrivelse. Men jeg er ikke engang sikker på, at det er vellykket: Jeg tror ikke, at den beskrivelse af Algol 68 i virkeligheden når sit mål, at give folk en forståelse. Men det er der muligvis nogle, der kan korrigere.
Det forekommer mig, at det er et sted, hvor egentlig Algol 60 er rimelig godt kørende i forvejen, det var egentlig slet ikke dér, man skulle sætte ind, det var ikke beskrivelsen: Det var mere datastrukturer og sådan noget, man skulle lave.
[01:10:37]
[Tilhører:] ... [uhørligt] at der var nogle, der mente, at målet var at lave et slags UNCOL, ikke sandt, altså et eneste programmeringssprog. I hvor høj grad skulle dette eneste programmeringssprog være beregnet til det vi i dag i hvert fald kalder teknisk/videnskabelige beregninger, som Algol jo er egnet til? Altså, jeg tænker på, hvor mange af deltagerne havde deres rod et andet sted end i videnskabelige beregninger?
[Naur:] Sikkert praktisk talt ingen, hvis overhovedet nogen. Jeg kan ikke sige alle de folks baggrund, men så vidt jeg husker er det allesammen udpræget matematisk/naturvidenskabelige folk.
Og præcis samme tid blev Cobol lavet. Ja, altså, Wegstein, han var også deltager i Algol og også med i Cobol og det blev simpelthen lavet praktisk taget på samme tid, af CODASYL-folkene. Og det er jo altså karakteristisk, at dette foregår, ja vi fik det at høre af Wegstein, som lige var med til at lave det, men det var da ikke ret meget egentlig indflydelse, det havde.
Han selv forslog noget strengbehandling til Algol i de følgende år der, som ikke vakte nogen videre genklang, jeg ved ikke om det var særlig smart heller. Så det er givetvis ... det var udpræget den numerisk analytiske afdeling, der havde udspillet. Det var folk som Rutishauser og som jo fra begyndelsen af 50'erne havde meget konkret arbejdet med de ting og som stod med alle sine algoritmer til invertering af matricer og differentialligninger: Det var den der linie, som jo var hoved-drivkraften. Så det er ikke så mærkeligt, at sproget blev som det blev i den henseende.
[01:12:45]
Rekursion
[Tilhører:] Apropos rekursive procedurer, kendte I Dijkstras måde at implementere dem på, på det tidspunkt, da de blev forkastet?
[Naur:] Det ved jeg ikke engang noget om, det tror jeg da ... jeg ved ikke overhovedet ... Argumenterne for at tage sådan noget med eller forkaste det, jeg kan jo ikke tale for de andre, men meget af det der, det tror jeg har været meget vage fornemmelser om at balancere mellem hvor værdifuldt er det på den ene side og hvor på én eller anden måde, hvor meget besværliggør det hele brugen og især vel oversætterarbejdet. Og det er vel den balance, man hele tiden har siddet i, på én eller anden mærkværdig, intern vægt og prøvet at veje.
[Tilhører:] Jo, men netop derfor var det interessant at vide, om der var et så vigtigt lod med på vægtskålen, som Dijkstras implementation af dem.
[Tilhører:] Det var der vist næppe, den er da jo senere, simpelthen.
[Uhørligt.]
[Naur:] Men stak-begrebet må jo dog have fundet ... fundet i de der IPL5 og sådan noget. Altså, det har dog vel været fuldt ud kendt. I alle tilfælde i almindelighed, om det var i den gruppe der specielt, det ved jeg ikke.
[Tilhører:] Men det er jo ikke ... altså, stakbegrebet, selvom man har det, så behøver man ikke det at anvende det til at gemme parameterværdier ... [uhørligt] det er hovedsagligt det. Og når man læser Dijkstras artikel der, så har man jo indtryk af, at han i og for sig kendte stakbegrebet. Men at det han ser, det var bare, det altså kunne bruges til denne specielle ting.
[Naur:] Aha. Men det tror jeg ikke på nogen måde var ... det var slet ikke på bordet i den forstand. Jeg tror slet ikke at det var et argument af den art. Man har simpelthen sagt vil eller vil ikke ... have rekursive procedurer ... tør/tør ikke.
Implementation
[Tilhører:] Der var et tidligere spørgsmål, som gik på i hvor høj grad - jeg tror det var dig, der spurgte om det - i hvor høj grad implementationen, den mulige implementation, spillede en rolle. I den forbindelse vil jeg gerne spørge dig: Hvis du skulle gøre det i dag, altså hvis du stod med de erfaringer du har i dag, ganske vist, men alligevel skulle stå og skulle lave et eller andet programmeringssprog, i hvor høj grad ville du så tænke på den mulige implementation af det eller ... kontra hvad du egentlig kunne ønske dig, altså uden hensyn til, om det kunne lade sig gøre eller ej.
[Naur:] Jeg personligt vil altid være absolut afhængig af det værktøj, jeg ser og hvor det skal udfolde sig, afgjort. Jeg vil ikke, jeg vil slet ikke, personligt være tilbøjlig til at kaste det der synspunkt væk, slet ikke.
[Tilhører:] Altså, det er lige som om jeg har en fornemmelse af, at man i dag er kommet for tæt ved maskinen. Altså, man siger ligesom om, at det der, det ved vi kan lade sig gøre. Altså, man, det er ligesom om det lægger en ramme, ikke? Det kunne jo godt være, der var noget, vi ikke havde tænkt på, som alligevel kan lade sig gøre. Det er sådan noget i den stil. Jeg forestiller mig, hvis man kommer for tæt ved ...
[Naur:] Jamen det er klart, det bliver en gemytsag. Er det ikke det, Svejgaard siger? Eller er det lige omvendt, vent nu lidt ... [Latter.] Nej, det er rigtigt, han vil have mere maskinnærhed, så han er ikke enig med dig, så vidt jeg kan se. Der er så mange ting maskinen kan gøre, som man ikke har adgang til, synes jeg han siger.
[Tilhører:] Netop rekursive procedurer er vel et eksempel på det, du siger der, ikke sandt: Man lavede dem, så fandt Dijkstra ud af, hvor snildt, man kan implementere dem.
[Naur:] Og er Algol 68 ikke også af den art? Jamen, der forekommer jo nu i litteraturen løsninger af deres heap og jeg ved ikke hvad, som ... Men nu til dags er man vel indstillet på, at hvad du kan definere, kan du implementere. Simpelthen. Hvis det er klart nok defineret, så kan du da implementere det. Jeg er da personligt ikke i tvivl om det. Hvis det virkelig er klart nok, så laver vi én eller anden dødsyg mekanik. Om ikke andet, så får vi Jørn til at gøre det. [Latter.] Og så kommer det til at køre, men det kan jo altså være, at det slæber hårdt, ikke?
BNF
[Tilhører:] Joh, men nu taler du altså om sprog, som kan beskrives ved hjælp af BNF.
[Naur:] Nej, nej, overhovedet ikke, hvadsomhelst. BNF, Algol er jo ikke bundet til det overhovedet, som bekendt. Det er kun jo visse dele af strukturen, der bekvemt ... Jeg mener, alt det med overensstremmelse mellem deklarationer og sådan noget, det findes der jo ikke en pind om i BNF. Så det synes jeg slet ikke, vi skal tage så nøje. Og jeg mener, jeg ved ikke om Cobol kan laves i BNF, jeg ville nødig ... vi har jo prøvet noget af det eller ... Åh nej ... Så det er ikke det der ... nej, jeg vil bare sige, hvis du kan definere det overhovedet, sådan at det er utvetydigt, så kan vi da vel gøre det, så kan vi da lave en mekanik til det, det kan jeg slet ikke se, hvorfor vi ikke skulle kunne. Det ligger vel i selve definitionsidéen.
[01:18:14]
[Tilhører:] Netop når du siger utvetydigt, så mener du altså utvetydigt i den forstand, at enhver er klar over, at det er indlysende, hvad det betyder. Og ikke at man ved hjælp af at grave i hele den teori, der vokser op fra den notation kan sige, at her har vi altså en syntaks, som er ambiguous ikke sandt, tvetydig, ikke? Altså, der kan skrives to forskellige syntakstræer op, altså, resultatet bliver det samme i sidste ende ikke sandt, det blæser man på, man siger den grammatik vil vi ikke have med ...
[Uhørligt]
[Naur:] Nåh, ja, hvor dybt du skal grave for at se om tingene er entydige, det har jeg ikke nogen forhåndsgrund til at sige noget særligt om. Det er klart, hvis du ikke orker, hvis du ikke har bevismekanik til at komme igennem noget som måske, teoretisk, kunne bevises af den smarte matematiker, så er det ikke veldefineret fra dit synspunkt, så kan du ikke implementere det, så vidt jeg kan se.
Cobol-oversætter
For øvrigt behøver du ikke gå til smart BNF-problematik for at få den slags problem: Vi havde for Cobol, da vi lavede Cobol-oversætteren, andre, helt andre slags erfaringer: De har nogle mystiske regler for du kan forkorte betingelser: Sådan noget med, hvis a er lig med b og lig med c og lig med d og måske lig med f, ikke sandt. Altså sådan nogle, hvor i stedet for at gentage operanderne, så kunne du få lov til at smide halvdelen af dem væk, fordi det var smartere. Og det er jo meget, meget indviklede omskrivningsregeler, og dem implementerede vi jo på Regnecentralen, da vi lavede Siemens Cobol-oversætteren og grundede meget over det og fandt nogle løsninger, alle som vi jo mener er korrekte.
Så sendte vi det til Siemens, hvor de jo havde en gruppe af folk, som fulgte med i dette her, som kunne modtage oversætteren, som selv var kyndige folk. Da de så fik oversætteren, så beklagede de sig over det der. Og så viste det sig altså, at de havde bare misforstået sagen. Det skulle altså være regler til at lette brugeren, der var så indviklede at forstå, at en ekspertgruppe i München, de forstod dem forkert. Det er også en slags lettelser. Mærkværdigt, ikke?
Algol 60 rapporten som undervisningsmateriale
[Tilhører:] Nu åbner du jo dig selv for en kommentar i anledning af Algol rapporten: Har I skrevet den for teknikere [Latter] ... Jeg ved den for Regnecentralen for eksempel har været brugt som det eneste materiale ved undervisning af programmører i Algol, programmering i Algol. [uhørligt] Ja, det har jeg i hvert fald ladet mig fortælle. Altså, den er ikke skrevet med det formål, vel, altså den er skrevet med det formål at definere sproget.
[Naur:] Den er skrevet for at definere sproget, ja, decideret, helt afgjort, bestemt da. Vi orkede altså ikke, den gruppe der, at gøre mere og adskillige af os følte da, at det var jo ... vi burde have gjort meget mere, vi burde omgående have gået i lag med at få skrevet introduktioner, hvad der jo også var nogle af os, der gjorde, mere eller mindre. Der er dog en række, uformelle introduktioner til sproget, skrevet af Mike Woodger og, jeg ved ikke hvem af alle de der andre folk.
Men det blev aldrig nogen officiel tilkendegivelse og det kan man muligvis beklage, men det var ikke praktisk. Man kunne altså skramle en komité sammen på det tidspunkt, til det bestemte hverv, inden for den frist der. Og derefter så ramlede det jo sammen i vid udstrækning. Man var meget træt på det tidspunkt.
Algol versus Fortran
[Tilhører:] Tror du, det var den der træthed du snakkede om I havde fra jeres komités side da I var færdige, der er en psykologisk årsag til, at det stadig er Fortran man bruger og ikke Algol? At I ikke rigtig har fulgt det op?
[Naur:] Nej, nej, det tror jeg ikke: Hele Fortran-sagen det er ganske simpelt firmapolitik. Jeg kan ikke se, det er andet. Jeg mener, hvad havde IBM af tilskyndelse til at hoppe ind i dette her? Ingensomhelst. Jeg kan ikke se, hvad de skulle have. Jeg mener, de satte John Backus med, han var jo hovedansvarlig for Fortran og interesserede sig altså for den problematik og han kunne da med største lethed og frihed gøre præcis som han havde lyst til, som han stadigvæk kan, beskæftige sig med præcis det, der passer ham. Han har ikke nogensomhelst vanskeligheder af den art. Men det binder jo ikke firmaet på nogen måde.
[Tilhører:] Nej, men jeg mener, hvis der var gjort meget reklame for det og en masse folk havde kendskab til det, tror du så ikke, at de var blevet tvunget til at ændre [uhørligt]?
[Naur:] Der blev jo på en måde gjort meget reklame for det, så vidt man nu kunne: Hvem kunne gøre reklame og hvad for en art reklame? Det er meget svært at snakke om. Jeg synes da på mange måder, at man ikke kan andet end være tilfreds med den virkning, det nu har haft. I og for sig måske mere udover hvad man overhovedet kunne vente med rimelighed. At det så også er slået væsentlig fejl, det er der da ingen tvivl om: Det er ikke slået igennem og det er sikkert i høj grad på grund af ind- og udlæsningen. Men det har på én eller anden måde alligevel i tankegangen og terminologien har det jo haft alligevel en ganske betydelig indflydelse, synes jeg man må sige. Det var næsten det vigtigste, er det ikke?
[01:23:53]
Algols indflydelse og anvendelse
[Tilhører:] Men I havde altså foresillet Jer, dengang I lavede det, at det skulle være et programmeringssprog, som skulle bruges ligesom man [uhørligt] bruger Fortran, det var altså ikke primært lavet for at have et formelt sprog til at beskrive algorimeprocesser?
[Naur:] Nej, men man ønskede både at publicere algoritmer og bruge dem på maskiner og bruge til undervisning, alt det der. Og det har da også været brugt i vid udstrækning på alle de måder. Men det har jo altså ikke remplaceret Fortran og det har vist sig at være ikke tilstrækkelig kraftigt til at ikke der kom andre væsentlige sprog ind senere, som også har slået igennem. Det har været vanskeligere end som så. Jeg ved ikke, at man kan sige andet end at ...
[Tilhører:] Men det har jo haft en simpelthen kolossal betydning for datalogien som sådan. Formodentlig den vigtigste enkeltbegivenhed i datalogiens udvikling. Det har jo styret interesserne og meget af [uhørligt] gør det i dag.
[Naur:] Kolossal, kolossal, jeg synes det er måske den væsentligste, varige inflydelse er måske i virkeligheden de publicerede algoritmer, som man er tilbøjelig til at overse.
[Tilhører:] [Uhørligt] Fortranmanualen er jo publiceret i et Algol-lignende sprog.
[Naur:] Også det. Den måde, man beskriver sprog, er jo også påvirket af det. Men også litteraturen, der på den numerisk/analytiske front, synes jeg heller ikke man skal kimse af. Det har man en tilbøjelighed til at glemme, praktisk talt. Og vitterlig er da, at der findes masser af gode algoritmer, som vi fik, jeg sætter da [uhørligt] mange af dem. Og de kører da aldeles glimrende: Man får dem lige ind ad døren og kan bruge dem med det samme. Så påstanden om, at det slet ikke fungerer som kommunikation, også over maskiner, det synes jeg ikke er korrekt. Det er selvfølgelig et snævert, til dels indsnævret, visse former for datastrukturer er ikke bekvemme og dem ... så kan det altså ikke rigtig bruges der. Men på den numerisk/analytiske område synes jeg det er ... virket aldeles fremragende.
Algol 58's do
[Tilhører:] Jeg har en lille, meget inferiør detalje: Der står et eller andet sted på én af de første sider i rapporten en bemærkning om, at dette her do, det har intet som helst med det tidligere do at gøre, overhovedet ikke. Hvad det tidligere do så i øvrigt er, det har jeg spekuleret på, hver gang jeg har læst det. [Latter.]
[Naur:] Det gamle do var en kopieringsmekanik: Det var nærmest en makro-mekanik. Ja, du spærrer øjnene op: Det var en mekanik, der ligesom lå ... en ting, som man slet ikke har i Algol, men man har den vel i PL/1 og sådan nogle sprog ...
[Tilhører:] Cobol ...
[Naur:] Også i Cobol har man noget i den retning. Det var nærmest en makro-ekspansionsmulighed. Så du kan se, det er helt anderledes, ikke?
[Tilhører:] Blev det spørgsmål overhovedet diskuteret, altså hvor vidt man skulle have sådan en makro-historie mulighed i selve sproget eller hvad?
[Naur:] Det tror jeg blev ... var droppet på det tidspunkt. Jeg tror op til ... fordi man mente, at procedurebegrebet, når det kom til stykket, var tilstrækkeligt. Man prøvede nok, der var givetvis nogle overvejelser over det, hvor man prøvede at sige klart, hvad det skulle være og fandt det vel så vanskeligt. Men det kunne da godt være, det kunne have været rart at have haft sådan én.
[Tilhører:] Det kunne bestemt [uhørligt] ...
[Tilhører:] ... nok ingen tvivl om.
[Tilhører:] Det er vel stadig uafklaret, hvordan den skulle se ud.
[Tilhører:] Netop.
Makrosprog
[Tilhører:] Det er jo netop fordi man ikke har gjort det dengang, så har man derfor ... altså ... det er ligesom måske derfor der er sket en udspaltning, at man taler om makroprogrammeringssprog og så alle de andre, ikke sandt, Algol, Fortran og sådan noget, hvor man ikke kan gøre noget som helt andet end at behandle strenge i makrosprogene og slet ikke kan behandle tekststrenge de andre [uhørligt].
[Naur:] Det hænger vel sammen med, altså, den der referencerepræsentationen og sådan noget, som jo ... du kan kun operere med disse grundsymboler, sprogligt set, og det vil du vel meget nødig i virkeligheden, når det kommer til stykket: Det er så svært at definere. Der indgår, hvis du har en virkelig repræsentation, så kan du ikke manipulere tegnstrenge, uden at du i virkeligheden må se de enkelte tegn og kan ikke operere med grundsymboler, uden du har en masse taktisk, detaljer involveret i [uhørligt] hvad det egentlig er, du opererer med. Alle disse passage 1 problemer, som jo er besværlige og frygtelig svære at systematisere.
[01:29:07]
[Tilhører:] [Uhørligt] ... det var vel ikke Strachey med GPL?
[Tilhører:] Næh, det er Garvick ...
[Naur:] GLP? Garvick's programming language?
[Tilhører:] Han har jo gjort et forsøg på ligesom at have begge begreberne. Der er noget, der ligger bag hele snakken om udvidelige sprog, blandt andet.
[Tilhører:] Ja, netop.
[Tilhører:] Der er også makro-agtige begreb [uhørligt] ... gjort et forsøg ... ikke rigtig slået igennem.
[Tilhører:] Nej, det siger jeg heller ikke noget om, jeg siger bare, hvis det havde været med i Algol, så havde det slået igennem.
[Naur:] Det kan godt være, du har ret i det, men man skal også lige passe på, det kan jo nemlig også være, at man ville have lavet en løsning, der ikke var særlig god og som derfor havde på en eller anden måde ødelagt, enten Algol eller idéen. Ikke sandt, hvis man prøver at gøre noget ambitiøst så risikerer man altså at træde alvorligt forkert. Jeg ved ikke om sådanne betragtninger, det kan godt være, det har ligget i baghovedet på nogle af de folk, der ... Stort set, jeg tror Perlis har været medvirkende til at man droppede det der do-væsen. Man havde det i Algol 68 og man så mange mystiske problemer ved det, som man ikke rigtig orkede at løse. Så ... Jeg kan ikke huske ret meget om det har været snakket om, sådan, på det senere stadium.
Afslutning
Nu tror jeg ikke der er nogen, der vil spørge om mere.
[01:31:03]