# Algol (programmeertaal)

Algol is een zeer invloedrijke reeks programmeertalen, ontworpen tussen 1958 en 1973. De naam is een afkorting voor Algorithmic Language.
Algol is voortgekomen uit de wens om een universeel bruikbare, machine-onafhankelijke programmeertaal te maken die voor mensen eenvoudig begrijpelijk moest zijn en daarom aansloot bij de gebruikelijke wiskundige notatie en manieren van uitdrukken in natuurlijke talen zoals het Engels of Nederlands.
Dit streven is mislukt: de universele programmeertaal is er niet gekomen. Maar de meeste sindsdien en ook nu nog ontwikkelde programmeertalen gebruiken allerlei ideeën die in een van de versies van Algol zijn geïntroduceerd.

## Geschiedenis

Er zijn verschillende programmeertalen met de naam Algol, waaronder Algol-58, Algol-60, Algol-W en Algol-68.
Algol-58 (aanvankelijk IAL genoemd) werd ontwikkeld in dezelfde tijd, en met dezelfde doelen, als COBOL en Fortran, en lijkt wel op de laatste. Het is eigenlijk nooit een helemaal afgewerkt product geworden, maar heeft wel gediend als inspiratiebron voor tal van andere talen.
Algol-60 werd ontwikkeld als opvolger van onder andere Fortran, mede door een van de ontwerpers van Fortran, John Backus; deelnemende Nederlanders waren Edsger W. Dijkstra en Aad van Wijngaarden. Het gebruik is echter door gebrek aan steun van computerfabrikanten vooral tot de academische wereld beperkt gebleven. Een zeer invloedrijke vernieuwing in deze taal was de ondersteuning van willekeurig innestelbare blokstructuren (beschreven met een grammatica middels de Backus-Naur-notatie) waarin variabelen een lokaal bereik kunnen hebben. De Amerikaanse beroepsvereniging ACM besloot dat deze taal de standaardtaal zou worden voor het weergeven van algoritmes (pseudocode) in haar blad Communications of the ACM.
Algol-W werd ontwikkeld door Tony Hoare en Niklaus Wirth als vereenvoudiging van Algol-60. Wirth ontwikkelde een compiler voor de IBM 360 die de taal populair maakte.
Algol-68 was bedoeld als opvolger van Algol-60, met als ontwerpdoel een universele programmeertaal te maken, waarin op willekeurige computers voor willekeurige doeleinden gemakkelijk zou kunnen worden geprogrammeerd, door allerlei voorzieningen en programmeertechnieken in zich te verenigen op een zo algemeen mogelijke manier.
Het eindrapport bevatte een ingewikkelde formele specificatie in een speciaal voor dit doel ontwikkeld wiskundig formalisme, de Van Wijngaardengrammatica. Deze legt de vorm en betekenis van de taal vast op een machine- en compileronafhankelijke manier, en staat het in principe toe om formeel te redeneren over de correctheid van programma's en van compilers voor de taal.
Verscheidene leden van het ontwerpteam, waaronder Dijkstra, Hoare en Wirth, vonden echter de taal en zijn specificatie zo groot en complex worden dat het maken van compilers ervoor ondoenlijk werd en ook de praktische bruikbaarheid door programmeurs eronder leed.
Ondanks een herziene specificatie (1973) die veel begrijpelijker was en sommige moeilijkheden veroorzakende constructies schrapte, was het algemene oordeel al gegeven: een universele programmeertaal is misschien een te hoog doel, en het ontwerpen ervan op papier door een commissie zonder praktische implementaties misschien niet de beste methode. Sindsdien is vrijwel algemeen geaccepteerd dat programmeertalen altijd beperkt zijn: tot bepaalde typen computers, bepaalde soorten toepassingen, of bepaalde programmeerparadigma's. De belangrijkste uitzondering hierop is Ada.
Een compiler of interpreter die Algol-68 volledig implementeert bestaat niet, maar Algol 68 Genie is een recente, vrijwel volledige implementatie beschikbaar onder GPL. In het verleden waren er implementaties die subsets implementeerden die veel rijker waren dan bijvoorbeeld Pascal. Deze waren in de jaren 70 en 80 in de academische wereld populair. Tegenwoordig wordt de taal ook nog weleens gebruikt voor pseudocode. Ook worden er nog steeds taalconstructies uit Algol-68 in nieuwe of bestaande talen als nieuw geïntroduceerd, zoals de combinatie van statische typering met hogere-ordefuncties en lambda-expressies.