Algol 60
Algol 60 (forkortelse for Algorithmic Language 1960) er et prosedyrisk, imperativt og strukturert programmeringsspråk i familien ALGOL, som ble utviklet av den danske informatikeren Peter Naur (1928–2016).[a] Språket ble utviklet i perioden 1958–1963 som etterfølgeren til ALGOL 58. Den første versjonen ble presentert i januar 1960, og en revidert versjon i januar 1963.[1]
Algol 60 | |||
---|---|---|---|
Paradigme | Multi-paradigme: Prosedyrisk programmering, imperativ programmering, strukturert programmering | ||
Designet av | John Backus | ||
Utviklet av | John Backus, Friedrich Ludwig Bauer, Charles Katz, John McCarthy, Peter Naur, Alan Perlis, Heinz Rutishauser, Klaus Samelson, Adriaan van Wijngaarden, Bernard Vauquois | ||
Siste versjon(er) | ISO 1538:1984 | ||
Typetildeling | statisk, sterk |
Historikk
rediger1959 ble noen forslag til en forbedring av ALGOL 58 presentert i tidsskriftet Communications of the ACM. November samme år avholdt Gesellschaft für Angewandte Mathematik und Mechanik (GAMM) et møte i Paris, Association for Computing Machinery (ACM) et møte i Washington D.C. for å velge 7 delegerte fra Europa og 7 fra Amerika til Algol 60-konferansen.[1] Denne ble avholdt i Paris fra 11. til 16. januar 1960 med «Report on the Algorithmic Language ALGOL 60» som resultat. Redaktør var Peter Naur.[2] 2. og 3. april 1962 ble et møte avholdt i Rom for å løse opp detaljer der utkastet ikke var konsekvent. Den endelige versjonen ble derpå offentliggjort som «Revised Report on the Algorithmic Language ALGOL 60», også med Peter Naur som redaktør.[2]
Struktur
redigerAlgol 60 var nyskapende. Det introduserte blokkstuktur, som finnes i nesten alle programmeringsspråk som ble utviklet senere, denne gjør lokale variabler mulig. I tillegg kom parameteroverføringsmodi som call by value og call by name, slik at en kunne lage rekursive funksjoner. Algol 58s if-betingelse ble utvidet med alternativet else samtidig som betingete uttrykk ble innført. Alle variabler måtte deklareres med en identifikator før bruk. Dynamiske matriser (arrays) kunne allokeres dynamisk under kjøring og måtte ikke spesifiseres når programmet ble laget. Feilprøving ble nå også foretatt under utføring av programmet.
En nyvinning var også at syntaksen til Algol 60 ble formelt definert i form av en grammatikk. Denne var i såkalt Backus-Naur form (BNF), og dette er i dag den vanligste måten å spesifisere et programmeringsspråk.
Standardiserte I/O metoder var ikke definert, dette førte til at de forskjellige kompilatorene kunne bli så forskjellige at en portering av programmer kunne være vanskelig.
Implementeringer av Algol 60
redigerHer er bare noen få eksempler vist.[3]
- DASK ALGOL for Regnecentralen ble utviklet fra februar 1959 til august 1960, samtidig som Algol 60 ble definert.
- GIER Algol var også utviklet ved Regnesentralen og var ferdig til bruk august 1962.
- Case Institute of Technology i Cleveland hadde skrevet en Algol-kompiler for UNIVAC 1107 i 1964. Denne ble videre utviklet ved NTH sammen med Norsk Regnesentral under navnet NU ALGOL (Norwegian University ALGOL) og ble også tilpasset UNIVAC 1108. Kompileren ble solgt til Sperry Rand Norway 1970.
- Algol W ble presentert 1966 av Niklaus Wirth og implementert ved Stanford University, denne versjonen ble grunnlaget for Pascal
- September 1966 ble Simula presentert av Ole-Johan Dahl og Kristen Nygaard og ble videre utviklet til Simula 67. Det var blant annet planlagt å implementere Simula 67 på UNIVAC 1108 med NU ALGOL som grunnlag.
- 1967 ble ALGOL (F) for IBM System/360 tatt i bruk.
Eksempler på programmering i Algol 60
redigerDette programmet regner ut gjennomsnittet av absoluttverdiene for alle elementene i et array, det er skrevet i referanse-Algol. I en konkret implementasjon ville det ha et avvikende utseende.
comment the main program (this is a comment); begin integer N; Read Int(N); begin real array Data[1:N]; real sum, avg; integer i; sum:=0; for i:=1 step 1 until N do begin real val; Read Real(val); Data[i]:=if val<0 then -val else val end; for i:=1 step 1 until N do sum:=sum + Data[i]; avg:=sum/N; Print Real(avg) end end
Noter
redigerReferanser
rediger- ^ a b «History of ALGOL - Timeline». Computer History Museum. 21. mars 2013. Besøkt 21. mai 2013.
- ^ a b «Evolving algorithmic language». Computer History Museum. 23. september 2012. Besøkt 25. mai 2013.
- ^ «Algol 60 implementations and dialects». Computer History Museum. 21. mars 2013. Besøkt 21. mai 2013.
Eksterne lenker
rediger- Revised Report on the Algorithmic Language Algol 60 av Peter Naur m. fl., definisjon av ALGOL
- ALGOL 60s syntaks på BNF-form