Algol
Det internationale arbejde for at udvikle et fælles programmeringssprog begyndte midt i 1950-erne og resulterede i første omgang i sproget IAL, omdøbt til Algol 58, og beskrevet i en rapport fra 1958. Men diskussionerne i den internationale Algol-gruppe fortsatte, og sproget blev modificeret noget, bl.a. omkring procedure-begrebet. Peter Naur deltog i gruppen og blev pennefører og redaktør af den endelige Report on the Algorithmic Language ALGOL 60. Efter nogle år blev det åbenlyst at det var nødvendigt at forbedre sproget til at kunne klare nye arbejdsopgaver. Dette mundede ud i Algol 68, som afstedkom en hel del kritik for kompleksitet og ultimativt alternative sprog såsom Pascal og Ada som modsvar. Sproget 'C' tog kraftig inspiration fra Algol 68.
Algol 60
Den fulde beskrivelse af Algol 60 syntaks kan læses i Revised Report on the Algorithmic Language ALGOL 60, men nogen af de mere bemærkelsværdige konstruktioner kan ses her:
- Repræsentationer
- Algol har tre repræsentationer: For referencer til sproget, til publikationer om Algol, til hardware-implementering. Man skal her huske på at Algol blev designet før standardiseringen af tegnsæt, og man kunne ikke gøre nogen antagelser om hvilke tegn der var til rådighed. Derudover blev al dokumentskrivning udført på skrivemaskiner, hvor der er visse frihedsgrader. Man kan f.eks. dreje rullen en halv linje op eller ned for at lave løftede eller hængende bogstaver.
- Reserverede ord
- Algol har ikke reserverede ord som ikke må bruges til variabelnavne sådan som man kender det fra andre programmeringssprog. Ord, såsom 'begin', 'while', 'else' osv. De er basic symbols. I reference-sproget skrives de med understregning, som i integer. I hardware-implementering kan det repræsenteres med apostrofer rundt om. For GIER havde Regnecentralen tilpasset Flexowriteren således at understreg ikke flyttede vognen, og det næste bogstav blev slået oveni. Man tastede _i_n_t_e_g_e_r for at få integer.
- Kodeblokke
- Algol var det første programmeringssprog som havde blok-strukturer med begin...end og dermed også lokale variabler. Derudover kunne man erklære en procedure inden i en anden, hvilket gav lokale procedurer med samme synlighed. Idéen blev bibeholdt i Pascal.
- Call-by-value, call-by-name
- Det fleste programmeringssprog i dag har call-by-value for simple værdier (integer, real, character etc.) og call-by-reference for objekter og tabeller. Algol har som standard call-by-name, og man skal specifikt erklære call-by-value hvis det ønskes.
- Call-by-name gør det muligt at lave et procedure-kald som minproc(a+b); og få den samme effekt som call-by-reference. Hvis proceduren er erklæret som procedure minproc(arg), så vil et udtryk såsom
r := arg * 2
konceptuelt svare tilr := (a+b) * 2
. Navnet arg bliver udskiftet med udtrykket i kaldet til proceduren og udtrykket bliver først evalueret hvis den linje i proceduren bliver udført. - Procedure erklæringer
- En procedure erklæres som
procedure max(x,y); value x,y; integer x,y;
. Dette definerer en procedure der tager x,y som heltals-argumenter og call-by-value. - En anden form er
procedure søg(a) Værdi:(x); value x; array a; integer x;
. Dette svarer tilprocedure søg(a,x); value x; array a; integer x;
. OrdetVærdi:
har kun det formål at give programmøren en indikation at hvad argumentetx
skal bruges til. Det er en kommentar. - Videnskablig notation for reelle tal
- Hvor det nu er blevet konvention at bruge 'E' til at markere eksponenten i meget store/små reelle tal, som i 1.23456E+3, så bruger Algol '⏨' (hængende tegn '10'). Altså 1.23456⏨+3. UNICODE har dette tegn i sit repertoire på foranledning af Algol-60.
IFIP 62
Regnecentralen præsenterede deres nye GIER-Algol compiler på IFIP verdenskongressen i München i 1962. Det var første gang den blev vist for offentligheden. På samme konference præsenterede Kristen Nygaard fra Norsk Regnesentral »SIMULA; An Extension of ALGOL to the Description of Discrete-Event Networks.«
Algol 68
Arbejdet på en ny udgave startede i 1964 i arbejdsgruppe 2.1 under International Federation for Information Processing (IFIP). Der var behov for bl.a. standardiserede I/O rutiner, bedre for
-løkker og bruger-definerede data typer. Interessenterne delte sig i to lejre. Den ene lejr ønskede en pragmatisk løsning, som udvidede Algol 60. Den anden gik ind for et ortogonalt sprog, som var så universelt som muligt. Den sidste lejr vandt, og resultatet, publiceret i en draft report i februar 1968, blev så anderledes fra Algol 60, at det dårligt kan kaldes det samme sprog. Rapporten overraskede mange. Der kom kritik på sprogets kompleksitet, den lukkede arbejdsform, og manglen på mulighed for at give feedback. På dette tidspunkt trak Niklaus Wirth og Peter Naur sig fra deres poster i arbejdsgruppe 2.1. Den færdige rapport over sproget blev publiceret i januar 1969.
Funktionalitet
- Call-by-name er blevet fjernet. Istedet er der call-by-reference.
- Der er automatisk type-konvertering, f.eks. fra heltal til reelle tal.
- Nye typer kan erklæres med struct og union. Algol 68 bruger ordet mode istedet for type.
- Det er muligt at erklære nye operatorer eller overloade eksisterende med polymorfi. Denne idé blev genbrugt i C++.
- De reserverede kodeord er stadigvæk symboler. Nye operatorer og typer bliver til symboler.
Der kommer mere...
Læs mere
- Algol i Bitarkivet
- Successes and failures of the Algol effort. Algol Bulletin no. 28, 1968. Peter Naur om Algol 68.
- Paul McJones "Dusty Decks"
- Computer History Museum om Algol