# Algol 60

|  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  |

**Algol 60** (forkortelse for **Algo**rithmic **L**anguage 19**60**) er et prosedyrisk, imperativt og strukturert programmeringsspråk i familien ALGOL, som ble utviklet av den danske informatikeren Peter Naur (1928–2016). 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.

## Historikk

1959 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. 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. 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.

## Struktur

Algol 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

Her er bare noen få eksempler vist.

* 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

Dette 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);

 **begininteger** N;
   Read Int(N);

   **beginreal array** Data[1:N];
     **real** sum, avg;
     integer i;
     sum:=0;

     **for** i:=1 **step** 1 **until** N do
       **beginreal** 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)
   **endend**
```

## Noter

**Type nummerering**
## Referanser

## Eksterne lenker

* Revised Report on the Algorithmic Language Algol 60 av Peter Naur m. fl., definisjon av ALGOL
* ALGOL 60s syntaks på BNF-form