Algol 60

In de ontwikkeling van programmeertalen is Algol60 (er is ook een Algol68 geweest en verschillende Algol dialecten) uiterst belangrijk geweest.

Ellis Horowitz: Fundamentals of Programming Languages:

Het is lastig om vandaag de belangrijke invloed die Algol 60 op de gemeenschap van mensen die geïnteresseerd zijn in programmeertalen in te schatten. Het Algol60-rapport nam de vorm aan van een heilig document dat zorgvuldig werd nageplozen, geanalyseerd maar zelden gewijzigd.
Misschien was de belangrijkste aanduiding voor deze invloed wel de term Algol-like die spoedig op allerlei ontwikkelingen op het gebied van programmeertalen werd toegepast. Algol-like zijn was OK: het zei dat deze taal, in principe, de belangrijkste kenmerken van Algol60 overnam en misschien (maar niet altijd) verbeterde.
In teksten en artikelen die nieuwe algorithmes communiceerden was de gebruikte taal misschien niet formeel maar praktisch zeker Algol-like.

In de tijd dat Algol60 ontstond, waren er eigenlijk maar twee andere wijd verbreide programmeertalen: Fortran en Cobol. Waarom bestaan deze dan nog steeds en is er geen programmeertaal meer die Algol-???? heet.

Daar zijn volgens mij een viertal redenen voor aan te wijzen:

  1. het ontbreken van standaard I/O-faciliteiten.
  2. het call-by-name mechanisme
    Ingewikkeld voor de compilerbouwer, zwaar tijdens uitvoering en voor het meest voorkomend gebruik te zwaar.
  3. het gebrek aan support van IBM.
  4. de opvolger van Algol60, Algol68, was een taal die moeilijk te begrijpen was en moeilijk te implementeren was. Bovendien stond Algol68 heel ver af van Algol60 en kon eigenlijk niet meer als een opvolger van Algol60 gezien worden.

Waarin Algol60 nog steeds voortleeft

Zonder Algol60 geen PL/1, geen Pascal, geen Modula, geen C, geen C++. Al deze talen gebruiken features die voor het eerst door Algol60 geïntroduceerd werden.

Om er een paar te noemen:

  1. een rigide beschrijving van de syntax van de taal.
    Het Algol60-rapport gebruikte voor het eerst de zgn. BNF-notatie die nog steeds in allerlei vormen gebruikt wordt om te beschrijven wat correcte programma's zijn.
  2. het opbouwen van programma's uit blokken en procedures en de mogelijkheid deze te nesten.
  3. blokken en procedures die eigen scope's voor namen hebben zodat identifiers in een binnenblok los (kunnen) staan van identifiers in omvattende blokken.
  4. lokale variabelen in procedures en blokken bestonden alleen tijdens de uitvoering van dit blok en werden na afloop weer vrijgegeven.
  5. recursieve aanroepen waren toegestaan.
  6. Algol60 bood de mogelijkheid voor goed gestructureerd programmeren hoewel deze term en het goto-less programmeren nog bedacht moesten worden.
  7. de mogelijkheid voor call-by-value en call-by-name parameters.