ALGOL-60

Retour histoire langages
mise à jour 05-Jan-2003
en construction

Le langage ALGOL (de ALGOrithmic Language) fut créé suite à une conférence tenue à Zurich en 1958 qui fut suivi de travaux importants menés en Europe Occidentale et aux Ettas-Unis jusqu'en janvier 1960 où le standard de ce qui s'appelera ALGOL 60 fut adopté. La paternité de ALGOL est partagée par une dizaine de représentants regroupés autour du danois Peter Naur. Les autres participants notires ayant attaché leur nom à ce langage figurent les noms de J.W. Backus, F.L. Bauer, J.Green, C. Katz, J. McCarthy, P. Naur, A.J. Perlis, H. Rutishauser, K. Samuelson, B. Vauquois, J.H. Wegstein, A. van Wijngaarden, M. Woodger

Naur et Backus attacheront leur nom dans un méta-langage très utilisé pour définir beaucoup d'autres langages, le forme Backus-Naur NBF:

<adding operator> ::= + | - 
<multiplying operator> ::= TIMES | / | ÷ 
<primary> ::= <unsigned number> | <variable> | <function designator> | ( <arithmetic expression> ) 
<factor> ::= <primary> | <factor> | <factor> POWER <primary> 
<term> ::= <factor> | <term> <multiplying operator> <factor> 
<simple arithmetic expression> ::= <term> | <adding operator> <term> 
				| <simple arithmetic expression> <adding operator> <term> 
<if clause> ::= if <Boolean expression> then 
<arithmetic expression> ::= <simple arithmetic expression> | <if clause> <simple arithmetic expression>
                             else <arithmetic expression
exemple de défintion tiré du rapport ALGOL 60
(on remarquera que les caractères TIMES et POWER n'existent pas dans le code ASCII ni HTML et sont ici représentés par des images)
 

Une des différences importantes entre ALGOL et les autres langages préexistants est l'introduction d'une structure linguistique de blocs, délimités par les mots clés begin et end, structure qui entre autre permettait de la réutilisation d'identifieurs déclarés à l'intérieur de blocs. Une seconde particularité était la formalisation du découpage du programme en procédures respectant elles aussi la structure de blocs ce qui autorisait de réutiliser aussi les mêmes noms de procédures pour des sous-programmes distincts appelés dans des contextes différents. La perte de sens des variables à la sortie du bloc sous-entend une gestion d'un ramasse-miettes (garbage collection) qui peut être réalsé par un processus asynchrone (à la manière de LISP) soit par une gestion de la mémoire sous forme d'une pile (solution souvent adoptée dans les années 1960).

Le problème de la réentrée (par goto) dans un bloc pose des problèmes de réentrance et de valeurs des variables ayant l'attribut own qui difère du concept de variables externes statiques de PL/1. La réalisation des acès aux variables déclarées à l'extérieur d'un bloc et plus particulièrement variables représentant des noms de procédure représentera un certain challenge aux auteurs de compilateurs et dans certains cas aux concepteurs de systèmes.


 

procedure euler (fct,sum,eps,tim); value eps,tim; integer tim;
real procedure fct; real sum,eps;
comment euler computes the sum of fct(i) for i from zero up to
infinity by means of a suitably refined euler transformation. The
summation is stopped as soon as tim times in succession the absolute
value of the terms of the transformed series are found to be less than
eps. Hence, one should provide a function fct with one integer argument,
an upper bound eps, and an integer tim. The output is the sum sum. euler
is particularly efficient in the case of a slowly convergent or
divergent alternating series;
begin integer i,k,n,t; array m[0:15]; real mn,mp,ds;
i:=n; t:=0; m[0]:=fct(0); sum:=m[0]/2;
nextterm: i:=i+1; mn:=fct(i);
        for k:=0 step 1 until n do
            begin mp:=(mn+m[k])/2; m[k]:=mn;
                mn:=mp end means;
        if (abs(mn)<abs(m[n])) ^ (n<15) then
            begin ds:=mn/2; n:=n+1; m[n]:=mn end accept
        else ds:=mn;
        sum:=sum+ds;
        if abs(ds)<eps then t:=t+1 else t:=0;
        if t<tim then goto nextterm
end euler

exemple de procédure ALGOL extrait du rapport ALGOL 60

Le problème de la nécessité ou non des ";" pour terminer une phrase continua de poser des soucis aux programmeurs, surtout au temsp où des édieturs interactifs n'existaient pas dans l'environnement de développement de programmes.