Aller au contenu

Algol (langage)

Un article de Wikipédia, l'encyclopédie libre.

Algol
Logo.

Date de première version 1958
Paradigme procédural,impératif
Auteur John BackusetPeter Naur
Typage statique,sûr,nominatif
Dialectes Algol 58, Algol 60 etAlgol 68
Influencé par Fortran
A influencé DOPE,Simula,PL/M,Pascal
Implémentations Burroughs Algol sur B5000, Case-ALGOL surUnivac 1107,PDP-1(1961), Algol 60 AFNOR surCAE 510(1964), ALGOL W surIBM System/370(1966), S-ALGOL surPDP-11(1979)

Algolest unlangage de programmationcréé à la fin desannées 1950.Dérivé d'un projet de l'UNESCOd'abord appelé IAL (International Algebraic Language), son nom est l'acronymed'algorithmiclanguage(avec un clin d'œil à l'étoile β Persei)[1].Son objectif était de décrire algorithmiquement des problèmes de programmation. Les principales différences au niveau de la conception par rapport àFortranfurent l'utilisation de blocs marqués par BEGIN END, permettant variables locales et tableaux dynamiques, et surtout larécursivité,concepts qui seront largement repris par ses successeurs.

Le langage existe en plusieurs versions:Algol 58,Algol 60,Algol W.Quant àAlgol 68,quoiqu'il porte un nom similaire et ait été élaboré par un groupe IFIP, on ne parle pas d'une version d'Algol, mais d'un nouveau langage sur des bases très différentes.

Le premier rapport décrivant le langage date de1958et a donc donné lieu à Algol 58. Présentant des ambiguïtés sévères, il fut stabilisé sous le nom d'Algol 60, langage largement adopté dans les universités, et qui fit faire des progrès importants à lacompilation.

Algol 60 a été publié en1960.John BackusetPeter Naurfaisaient partie du comité de conception et spécification qui l'a créé. Plus précisément, le comité qui s'est réuni à Paris du 11 au 16 janvier 1960 était composé des treize experts européens et américains suivants:

Algol 60 a inspiré beaucoup de langages.C. A. R. Hoarea déclaré à son sujet: « Voici un langage très en avance de son temps, il n'a pas seulement été une amélioration de ses prédécesseursmais aussi une amélioration de presque tous ses successeurs[2]».

Hormis un succès universitaire certain, Algol 60 sera peu utilisé dans des programmes commerciaux. Cela est dû au manque de fonctions standards d'entrée-sortie (corrigé en 1965 et surcorrigé dans Algol 68), et à une mauvaise adaptation aux programmes de gestion. Sur le plan scientifique, il était moins efficace que Fortran, tout en permettant des traitementsa prioriimpossibles dans ce langage.

Ses trois principaux descendants sont:

  • Algol 68,conçu auCentre de Mathématiques Appliquées d'Amsterdam,et défini en;langage universel basé sur un système de 2 grammaires orthogonales (engendrant une grammaire potentiellement infinie) il permet de construire de nouveaux types et de nouveaux opérateurs, facilitant une approche très algébrique des applications; jouant sur la puissance des mécanismes plutôt que sur leur nombre, il a été souvent perçu comme l'antithèse dePL/I;
  • Algol W,créé peu après selon les propositions plus statiques deNiklaus Wirth,membre du groupe de travail sur Algol 68 dont les propositions avaient été refusées. Wirth s'inspirera d'Algol W pour créer lelangage Pascal,puis Modula 2;
  • Arbre généalogique de la dynastie des langages de programmation Algol, Fortran et COBOL
    Simula(1967), conçu à Oslo, sur-ensemble d'Algol 60, ancêtre des langages objet (commeC++,Modula 3, Oberon) permettant de définir des classes et des processus facilitant lasimulation à événements discrets.

La suite de cet article est principalement consacrée au langageAlgol 60.En effet, sans mention de millésime, le terme Algol désigne le langage Algol 60, tandis que les Algols désigne l'ensemble de la famille.

Caractéristiques

[modifier|modifier le code]

Algol 60 est un langage typé,procéduralrécursif et àstructure de blocs.Il permet unemploi dynamique des typesmais ne permet pas à l'utilisateur d'en définir de nouveaux. Algol 60 a été défini sans instructions d'entrées/sorties; une implémentation sur une machine donnée en comportait nécessairement, mais elles variaient de l'une à l'autre. En réaction à cette situation, Algol 68 les a sur-spécifiées.

Algol 60 permet deux types de passage de paramètres lors de l'appel de procédure:passage par valeuret le «passage par nom», proche de la macro-substitution. Le passagepar nompossède des propriétés, mal comprises du fait d'une confusion avec lepassage par référence,plus répandu; aussi a-t-il été abandonné dans les successeurs d'Algol 60. Par exemple, on a reproché à ce mode Algol 60 l'impossibilité d'écrire une procédure échangeant deux valeurs si un des paramètres est un entier et l'autre un tableau indexé par ce même entier.

En réaction contre le manque de formalisme dans le projet Fortran,John Backusa conçu laBNFpourBackus Normal Formpermettant la spécification deAlgol 58.Cette méthode de description d'un langage a été révisée et étendue parPeter Naursous le nomBackus Naur Formavec le même acronyme pour spécifier Algol 60, ainsi muni d'unegrammaire indépendante du contexte.

Une importante innovation d'Algol 60 était l'introduction de la récursivité, permettant de programmer des algorithmes pour le calcul defonctions récursives pures(telles que lafonction d'Ackermann-Péter), et plus seulement desfonctions récursives primitives(telles que lafactorielleou lasuite de Fibonacci,qui peuvent être calculées avec des bouclesfor). Ceci distinguait Algol 60 de Fortran, qui ne permettait pas d'implémenter le calcul de fonctions récursives non primitives; cependant, l'intérêt pratique de cette innovation, qui avait fait l'objet de débats au sein du comité Algol 60, n'est véritablement apparu qu'avec la programmation de compilateurs, pour lesquels cette fonctionnalité simplifie grandement certains éléments algorithmiques[3],[4].

Algol 68[5]a été défini comme langage universel basé sur des types et des opérateurs prédéfinis, des procédés de construction de nouveaux types, et de nouveaux opérateurs avec possibilité de surcharge et d'extension des opérateurs prédéfinis, le tout permettant d'adapter le langage à chaque famille d'applications.

Comme unegrammaire indépendante du contexte,telle que l'on peut définir avec BNF, s'avère une grammaire simple, que la rigueur demande de compléter par des restrictions sémantiques en langue naturelle, trop souvent ambiguës, l'équipe deAdriaan van Wijngaardena retenu un système grammatical, ditgrammaires de van Wijngaarden(seconde forme) couvrant la syntaxe en rapport avec la sémantique. S'appuyant sur une hyper-grammaire (donnant des schémas de règles ou hyper-règles) interagissant avec une méta-grammaire (reflétant la théorie des types constructibles), le système grammatical produit une infinité de contraintes de BNF sémantiquement adéquates. Le Rapport Révisé a parfaitement illustré l'adéquation de ce dispositif, qui définit une syntaxe sémantiquement correcte. Cette approche totale facilite une compilation « carrée ».

Architectures supportant Algol

[modifier|modifier le code]

LeB5000deBurroughs Corporationet ses successeurs étaient desmachines à pileconçues pour être programmées avec un Algol étendu; leursystèmes d'exploitationest écrit dans cet Algol depuis1961,ouvrant la voie à l'écriture des systèmes d'exploitation en langage symbolique, reprise parMulticspuisUnix.Unisys Corporationcontinue de commercialiser des machines descendant du B5000 supportant plusieurs compilateurs Algol étendus.

LeCAE 510comportait un compilateur Algol conforme au niveau II de la normeAFNORFZ 65-010[6],incluant de plus larécursivitéet autorisant les mots-clés en français commedébutetfin[7].

Exemple de code (Algol 60)

[modifier|modifier le code]

Les programmes Algol 60 sont à format libre, avec le point-virgule comme séparateur principal. Les termes en caractère gras (procedure…) sont des mots réservés du langage. Chaque implémentation du langage peut utiliser sa propre convention lexicale (par exemple 'PROCEDURE').

procedureAbsmax(a) Taille:(n, m) Resultat:(y) Indices:(i, k);
valuen, m;arraya;integern, m, i, k;realy;
commentDans la procédure Absmax (a, n, m, y, i, k)
le plus grand élément en valeur absolue de la matrice a de taille
n par m est transféré à y et les indices de cet élément à i et k;
beginintegerp, q;
y:= 0; i:= k:= 1;
forp:=1step1untilndo
forq:=1step1untilmdo
ifabs(a[p, q]) > y then
begin
y:= abs(a[p, q]);
i:= p; k:= q;
end
endAbsmax
  1. (en)Paul E.Ceruzzi,Paul E. (Curator of Aerospace Electronics and Computing Ceruzzi, National Air & Space Museum/ SmithsonianInstitution),Curator of Aerospace Electronics and Computing Paul E.Ceruzziet WilliamAspray,A History of Modern Computing,MIT Press,,445p.(ISBN978-0-262-53203-7,lire en ligne)
  2. D’aprèsC.A.R. HoareHints on Programming Language Design»[PDF],surUniversité du Michigan, Dpt. de génie électrique et d'informatique,,page 27; ce commentaire est parfois attribué faussement àEdsger Dijkstra,célèbre aussi pour ses commentaires humoristiques, et a pris part à la conception du premier compilateur ALGOL 60.
  3. «ALGOL 60 at 60 - Computerphile»(consulté le)
  4. (en)«How recursion got into programming: a tale of intrigue, betrayal, and advanced programming-language semantics», surA Programmers Place,(consulté le)
  5. Groupe Algol de l'AFCET.Définition du langage algorithmique ALGOL 68;présent. et trad. française duReport on the algorithmic language Algol 68éd. par J. Buffet, P. Arnal, A. Quéré - 1972 - Hermann (Actualités scientifiques et industrielles) - VII-222 p.; 24cm
  6. Sur la normalisation d'Algol et FORTRAN par l’AFNOR, cf. le texte de l'allocution d’André MassonÉtat présent de la normalisation française et internationale intéressant la documentation et les bibliothèques», Tunis,
  7. D'aprèsM. RabechaultL'informatique au Laboratoire Central des Ponts et Chaussées»,Bull. des LPC,‎,p.136.

Liens externes

[modifier|modifier le code]