Algol 60 (abréviation de Algorithmic Language 1960 ) est un membre de la famille ALGOL des langages de programmation informatique. Il faisait suite à ALGOL 58 qui avait introduit les blocs de code et les paires beginet endpour les délimiter, représentant une avancée clé dans l’essor de la programmation structurée . Algol 60 a été le premier langage à implémenter des définitions de fonctions imbriquées avec une Portée lexicale . Il a donné naissance à de nombreux autres langages de programmation, notamment CPL , Simula , BCPL , B , Pascal et C. Pratiquement tous les ordinateurs de l’époque avaient un langage de programmation système basé sur les concepts Algol 60.
Paradigmes | procédural , impératif , structuré |
---|---|
Famille | ALGOL |
Conçu par | Backus , Bauer , Green , Katz , McCarthy , Naur , Perlis , Rutishauser , Samelson , van Wijngaarden , Vauquois , Wegstein , Woodger |
Première apparition | 1960 ; il y a 62 ans ( 1960 ) |
Discipline de frappe | Statique , fort |
Portée | Lexical |
Influencé par | |
ALGOL 58 | |
Influencé | |
La plupart des langages impératifs ultérieurs (appelés langages de type ALGOL ), par exemple Simula , CPL , Pascal , Ada , C |
Niklaus Wirth a basé son propre ALGOL W sur Algol 60 avant de passer au développement de Pascal . Algol-W était destiné à être la prochaine génération d’ALGOL, mais le comité ALGOL 68 a décidé d’une conception plus complexe et avancée plutôt qu’un Algol 60 simplifié et nettoyé. Les versions officielles d’ALGOL portent le nom de l’année de leur première publication. Algol 68 est sensiblement différent d’Algol 60 et a été critiqué en partie pour l’être, de sorte qu’en général “Algol” se réfère aux dialectes d’Algol 60.
Standardisation
Algol 60 – avec COBOL – ont été les premiers langages à rechercher la standardisation.
- ISO 1538:1984 Langages de programmation – Algol 60 (stabilisé)
- ISO/TR 1672:1977 Représentation matérielle des symboles de base ALGOL… (maintenant retirée)
Histoire
Algol 60 était principalement utilisé par des informaticiens de recherche aux États-Unis et en Europe. Son utilisation dans les applications commerciales a été entravée par l’absence de fonctionnalités d’entrée / sortie standard dans sa description et le manque d’intérêt pour le langage par les grands fournisseurs d’ordinateurs. Algol 60 est cependant devenu la norme pour la publication d’algorithmes et a eu un effet profond sur le développement futur du langage.
John Backus a développé la méthode de forme normale Backus pour décrire les langages de programmation spécifiquement pour ALGOL 58. Elle a été révisée et étendue par Peter Naur pour Algol 60 et, à la suggestion de Donald Knuth , renommée forme Backus – Naur . [1]
Peter Naur : “En tant que rédacteur en chef du Bulletin ALGOL, j’ai été entraîné dans les discussions internationales sur la langue et j’ai été sélectionné pour être membre du groupe de conception de la langue européenne en novembre 1959. À ce titre, j’ai été l’éditeur du rapport Algol 60, produit à la suite de la réunion Algol 60 à Paris en janvier 1960.” [2]
Les personnes suivantes ont assisté à la réunion à Paris (du 11 au 16 janvier) :
- Friedrich L. Bauer , Peter Naur , Heinz Rutishauser , Klaus Samelson , Bernard Vauquois , Adriaan van Wijngaarden et Michael Woodger (d’Europe)
- John W. Backus , Julien Green , Charles Katz , John McCarthy , Alan J. Perlis et Joseph Henry Wegstein (des États-Unis).
Alan Perlis a donné une description vivante de la réunion : “Les réunions étaient épuisantes, interminables et exaltantes. On s’aggravait quand ses bonnes idées étaient rejetées avec les mauvaises des autres. Néanmoins, la diligence a persisté pendant toute la période. La chimie de le 13 était excellent.”
À l’origine, le langage n’incluait pas la récursivité . Il a été inséré dans le cahier des charges à la dernière minute, contre la volonté de certains membres du comité. [3]
Algol 60 a inspiré de nombreuses langues qui l’ont suivi. Tony Hoare a fait remarquer: “Voici une langue tellement en avance sur son temps qu’elle n’était pas seulement une amélioration par rapport à ses prédécesseurs mais aussi à presque tous ses successeurs.” [4] [5]
Chronologie des implémentations Algol 60
À ce jour, il y a eu au moins 70 augmentations, extensions, dérivations et sous-langues d’Algol 60. [6]
Nom | An | Auteur | État | La description | UC cible |
---|---|---|---|---|---|
X1 Algol 60 | Août 1960 [7] | Edsger W. Dijkstra et Jaap A. Zonneveld | Pays-Bas | Première implémentation d’Algol 60 [8] | Électrologica X1 |
Algol | 1960 [9] | Edgar T. Irons | Etats-Unis | Algol 60 | CDC 1604 |
Burroughs Algol (plusieurs variantes) |
1961 | Burroughs Corporation (avec la participation de Hoare , Dijkstra et autres) | Etats-Unis | Base des ordinateurs Burroughs (et maintenant basés sur Unisys MCP ) | Les grands systèmes Burroughs et leur milieu de gamme également. |
Cas ALGOL | 1961 | Etats-Unis | Simula a été contracté à l’origine en tant qu’extension de simulation du cas ALGOL | UNIVAC 1107 | |
GOGOL | 1961 | William M. McKeeman | Etats-Unis | Pour le système de temps partagé ODIN | PDP-1 |
ALGOL DASK | 1961 | Peter Naur , Jørn Jensen | Danemark | Algol 60 | DASK à Regnecentralen |
ALGOL SMIL | 1962 | Torgil Ekman , Carl-Erik Fröberg | Suède | Algol 60 | SMIL à l’Université de Lund |
GIER ALGOL | 1962 | Peter Naur , Jørn Jensen | Danemark | Algol 60 | GIER à Regnecentralen |
Dartmouth ALGOL 30 [10] | 1962 | Thomas Eugene Kurtz , Stephen J. Garland , Robert F. Hargraves, Anthony W. Knapp , Jorge LLacer | Etats-Unis | Algol 60 | LGP-30 |
Alcor Mayence 2002 | 1962 | Ursula Hill-Samelson, Hans Langmaack | Allemagne | Siemens 2002 | |
ALCOR-ILLINOIS 7090 | 1962 [11] [12] |
Manfred Paul, Hans Rüdiger Wiehle, David Gries et Rudolf Bayer | États-Unis, Allemagne de l’Ouest | Algol 60 mis en œuvre à l’Illinois et au TH München , 1962-1964 |
IBM 7090 |
USS 90 Algol | 1962 | L. Petrone | Italie | ||
Elliott ALGOL | 1962 | Voiture Hoare | ROYAUME-UNI | Discuté dans sa conférence du prix Turing 1980 | Elliott 803 et l’Elliott 503 |
Algol 60 | 1962 | Roland Strobel [13] | Allemagne de l’est | Mis en œuvre par l’Institut de mathématiques appliquées de l’Académie allemande des sciences de Berlin | Zeiss-Rechenautomat ZRA 1 |
Traducteur Algol | 1962 | G. van der Mey et WL van der Poel | Pays-Bas | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ZÈBRE |
Kidsgrove Algol | 1963 | F.G. Duncan | ROYAUME-UNI | Compagnie d’électricité anglaise KDF9 | |
CUIR CHEVELU [14] | 1963 | Stephen J. Garland , Anthony W. Knapp , Thomas Eugène Kurtz | Etats-Unis | Processeur ALgol autonome pour un sous-ensemble d’Algol 60 | LGP-30 |
VALGOL | 1963 | Val Schorré | Etats-Unis | Un test du compilateur compilateur META II | |
Algol FP6000 | 1963 | Roger Moore | Canada | écrit pour Saskatchewan Power Corp | FP6000 |
Pierre à aiguiser | 1964 | Brian Randell et Lawford John Russell | ROYAUME-UNI | Division de l’énergie atomique de la English Electric Company. Précurseur des implémentations Ferranti Pegasus , National Physical Laboratories ACE et English Electric DEUCE . | Compagnie d’électricité anglaise KDF9 |
Algol 60 | 1964 | Jean Claude Boussard [15] | France | Institut d’informatique et mathématiques appliquées de Grenoble [ en ] | IBM 7090 |
Algol 60 | 1965 | Claude Paire [ en ] [ 16] | France | Centre de calcul de la Faculté des Sciences de Nancy | IBM 1620 |
ALGOL de Dartmouth | 1965 | Stephen J. Garland , Sarr Blumson, Ron Martin | Etats-Unis | Algol 60 | Système de temps partagé Dartmouth pour le GE 235 |
NU ALGOL | 1965 | Norvège | UNIVAC | ||
Algol 60 | 1965 [17] | FEJ Kruseman Aretz | Pays-Bas | Compilateur MC pour l’EL-X8 | Electrologica X8 |
ALGEK | 1965 | URSS | Minsk-22 | АЛГЭК, basé sur le support ALGOL-60 et COBOL , pour des tâches économiques | |
MALGOL | 1966 | publ. A. Viil, M Kotli & M. Rakhendi, | RSS d’Estonie | Minsk-22 | |
ALGAMES | 1967 | Groupe GAMS (ГАМС, группа автоматизации программирования для машин среднего класса), coopération des Académies des sciences du Comecon | Comecon | Minsk-22 , plus tard ES EVM , BESM | |
ALGOL/ZAM | 1967 | Pologne | Ordinateur ZAM polonais | ||
Algol chinois | 1972 | Chine | Caractères chinois, exprimés via le système de symboles | ||
DG/L | 1972 | Etats-Unis | Famille d’ordinateurs DG Eclipse | ||
NASE | 1990 | Erik Schoenfelder | Allemagne | Interprète | Linux et MS Windows |
MARST | 2000 | André Makhorin | Russie | Traducteur Algol-60 vers C | Tous les processeurs pris en charge par la collection de compilateurs GNU ; MARST fait partie du projet GNU |
Les dialectes Burroughs comprenaient des dialectes de programmation système spéciaux tels que ESPOL et NEWP .
Propriétés
Algol 60 tel que défini officiellement n’avait pas d’installations d’E / S; les implémentations définissaient les leurs de manière rarement compatible les unes avec les autres. En revanche, ALGOL 68 offrait une vaste bibliothèque d’installations de transput (langage ALGOL 68 pour Input/Output).
Algol 60 a fourni deux stratégies d’évaluation pour le passage de paramètres : l’ appel commun par valeur et l’appel par nom . La déclaration de procédure spécifiait, pour chaque paramètre formel, qui devait être utilisé : valeur spécifiée pour l’Appel par valeur, et omise pour l’appel par nom. L’appel par nom a certains effets contrairement à l’ Appel par référence . Par exemple, sans spécifier les paramètres comme value ou reference , il est impossible de développer une procédure qui échangera les valeurs de deux paramètres si les paramètres réels qui sont passés sont une variable entière et un tableau qui est indexé par cette même variable entière . [18]Pensez à passer un pointeur vers swap(i, A[i]) dans une fonction. Maintenant que chaque fois que le swap est référencé, il est réévalué. Dites i := 1 et A[i] := 2, donc chaque fois que swap est référencé, il renverra l’autre combinaison de valeurs ([1,2], [2,1], [1,2] et ainsi de suite sur). Une situation similaire se produit avec une fonction aléatoire passée comme argument réel.
L’Appel par le nom est connu de nombreux concepteurs de compilateurs pour les ” thunks ” intéressants qui sont utilisés pour l’implémenter. Donald Knuth a conçu le ” test homme ou garçon ” pour séparer les compilateurs qui implémentaient correctement ” la récursivité et les références non locales “. Ce test contient un exemple d’Appel par le nom.
Algol 60 Mots réservés et identifiants restreints
Il existe 35 mots réservés de ce type dans le sous-langage standard des grands systèmes de Burroughs :
|
|
|
|
|
Il existe 71 identifiants restreints de ce type dans le sous-langage standard des grands systèmes de Burroughs :
|
|
|
|
|
ainsi que les noms de toutes les fonctions intrinsèques.
Opérateurs standards
Priorité | Opérateur | |
---|---|---|
première arithmétique |
première | ↑ (puissance) |
seconde | ×, / (réel), ÷ (entier) | |
troisième | +, – | |
seconde | <, ≤, =, ≥, >, ≠ | |
troisième | ¬ (pas) | |
Quatrième | ∧ (et) | |
cinquième | ∨ (ou) | |
sixième | ⊃ (implication) | |
septième | ≡ (équivalence) |
Exemples et problèmes de portabilité
Comparaisons d’échantillons de code
Algol 60 procédure Absmax(a) Taille :(n, m) Résultat :(y) Indices :(i, k) ; valeur n, m; tableau un ; entier n, m, i, k ; réel y ; commentaire Le plus grand élément absolu de la matrice a, de taille n par m, est transféré en y, et les indices de cet élément en i et k ; commencer l’entier p, q ; y := 0; je := k := 1; pour p := 1 pas 1 jusqu’à n faire pour q := 1 pas 1 jusqu’à m faire si abs(a[p, q]) > y alors commencer y := abs(a[p, q]); je := p; k := q fin fin Absmax
Les implémentations diffèrent dans la façon dont le texte en gras doit être écrit. Le mot ‘INTEGER’, y compris les guillemets, doit être utilisé dans certaines implémentations à la place de integer , ci-dessus, le désignant ainsi comme un mot-clé spécial.
Voici un exemple de la façon de produire une table en utilisant Elliott 803 ALGOL : [19]
TEST ALGOL POINT FLOTTANT’ COMMENCER VRAI A,B,C,D’ LIRE D’ POUR A:= 0.0 PAS D JUSQU’À 6.3 FAIRE COMMENCER PRINT PUNCH(3) ,££L ? ?‘ B := NAS(A)‘ C := COS(A)‘ PRINT PUNCH(3) , SAMELINE , ALIGNÉ (1,6) ,A,B,C’ FINIR’ FINIR’ Famille Algol 60
Comme Algol 60 n’avait pas d’installations d’E / S, il n’y a pas de programme portable hello world dans ALGOL. Le programme suivant pourrait (et le sera toujours) compiler et s’exécuter sur une implémentation ALGOL pour un mainframe Unisys A-Series, et est une simple simplification du code tiré de The Language Guide [20] à l’ Université du Michigan – Dearborn Computer and Information Science Département Bonjour tout le monde ! Page d’exemple de programme ALGOL. [21]
COMMENCER FICHIER F(GENRE=DISTANT); TABLEAU EBCDIC E[0:11] ; REMPLACER E PAR “HELLO WORLD!”; ECRITURE(F, *, E); FINIR.
Où * etc. représentait une spécification de format telle qu’utilisée dans FORTRAN, par exemple [22]
Un programme plus simple utilisant un format en ligne :
DEBUT FICHIER F ( GENRE = DISTANT ); ÉCRIRE ( F , < “BONJOUR LE MONDE!” > ); FIN .
Un programme encore plus simple utilisant l’instruction Display :
COMMENCEZ L’ AFFICHAGE ( “HELLO WORLD!” ) FIN .
Un exemple alternatif, utilisant Elliott Algol I/O est le suivant. Elliott Algol a utilisé des caractères différents pour “open-string-quote” et “close-string-quote”, représentés ici par ‘ et ‘ .
programme HiFolks ; begin print ‘ Hello world ‘ end ;
Voici une version pour l’Elliott 803 Algol (A104) L’Elliott 803 standard utilisait une bande de papier à 5 trous et n’avait donc que des majuscules. Le code manquait de guillemets donc £ (signe dièse) a été utilisé pour les guillemets ouverts et ? (point d’interrogation) pour une citation proche. Des séquences spéciales ont été placées entre guillemets doubles (par exemple, £. £L?? a produit une nouvelle ligne sur le téléimprimeur).
SALUT LES GENS’ COMMENCER IMPRIMER £ BONJOUR MONDE £ L ? » FINIR’
La version d’E / S Algol de la série ICT 1900 permettait l’entrée à partir d’une bande papier ou d’une carte perforée. Le mode ‘plein’ de la bande papier autorise les minuscules. La sortie était destinée à une imprimante ligne. Notez l’utilisation de ‘(‘,‘)‘ et %. [23]
‘PROGRAMME’ (BONJOUR) ‘COMMENCER’ ‘COMMENTAIRE’ OUVRIR LA CITATION EST ‘(‘, FERMER EST ‘)‘, L’ESPACE IMPRIMABLE DOIT ECRIRE COMME % PARCE QUE LES ESPACES SONT IGNORES ; ÉCRIRE TEXTE(‘(‘BONJOUR%MONDE’)‘); ‘FINIR’ ‘TERMINER’
Voir également
- ABC ALGOL
- ALGOL
- ALGOL 58
- ALGOL N
- ALGOL 68
- ALGOL W
- ALGOL X
- Code automatique Atlas
- Corail 66
- IMP d’Édimbourg
- L’appareil de Jensen
- JE NAGE
- JOVIAL
- NÉLIAC
- Simule
- S-algol
- Schéma (langage de programmation)
Références
- ^ Knuth, Donald E. (décembre 1964). “Forme normale de Backus contre forme de Backus Naur”. Comm. ACM . 7 (12): 735–6. doi : 10.1145/355588.365140 . S2CID 47537431 .
- ^ Citation de prix ACM / Peter Naur , 2005
- ^ van Emden, Martin (2014). “Comment la récursivité est entrée dans la programmation: une histoire d’intrigue, de trahison et de sémantique avancée du langage de programmation” . La place d’un programmeur .
- ^ Hoare, CAR (décembre 1973). “Conseils sur la conception de langage de programmation” (PDF) . p. 27. (Cette déclaration est parfois attribuée à tort à Edsger W. Dijkstra , également impliqué dans la mise en œuvre du premier compilateur Algol 60 .)
- ^ Abelson, Hal; Dybvig, RK; et coll. Rees, Jonathan ; Clinger, William (éd.). “Rapport révisé (3) sur le schéma de langage algorithmique, (dédié à la mémoire d’Algol 60)” . Récupéré le 20/10/2009 .
- ^ L’Encyclopédie des langages informatiques Archivée le 27 septembre 2011 à la Wayback Machine
- ^ Lumière du jour, EG (2011). “Le cri de ralliement de Dijkstra pour la généralisation: l’avènement de la procédure récursive, fin des années 1950 – début des années 1960” . La revue informatique . 54 (11): 1756-1772. doi : 10.1093/comjnl/bxr002 .
- ^ Kruseman Aretz, FEJ (30 juin 2003). “Le compilateur Dijkstra-Zonneveld Algol 60 pour l’Electrologica X1″ (PDF) . Génie logiciel . Histoire de l’informatique. Amsterdam : Centrum Wiskunde & Informatica. [ lien mort permanent ]
- ^ Irons, Edgar T. , Un compilateur dirigé par syntaxe pour Algol 60, Communications de l’ACM, Vol. 4, p. 51. (janvier 1961)
- ^ Thomas E. Kurtz, “Basique” , Histoire des langages de programmation , Association for Computing Machinery, juin 1978, page 516.
- ^ Gries, D.; Paul, M.; Wiehle, HR (1965). “Quelques techniques utilisées dans l’ALCOR ILLINOIS 7090” . Communications de l’ACM . 8 (8): 496–500. doi : 10.1145/365474.365511 . S2CID 18365024 .
- ^ Bayer, R.; Gries, D.; Paul, M.; Wiehle, HR (1967). “La décharge post mortem d’ALCOR Illinois 7090/7094” . Communications de l’ACM . 10 (12): 804–808. doi : 10.1145/363848.363866 . S2CID 3783605 .
- ^ Rechenautomaten mit Trommelspeicher , Förderverein der Technischen Sammlung Dresde
- ^ Kurtz, op. cit. , page 517.
- ↑ Jean-Claude Boussard (juin 1964). Conception et implémentation d’un compilateur Algol60 sur calculatrice électronique IBM 7090/94 et 7040/44 (thèse de doctorat). Institut d’informatique et mathématiques appliquées de Grenoble [ fr ] : Université Joseph-Fourier – Grenoble I. {{cite thesis}}: Maint CS1: emplacement ( lien )
- ^ Claude Paire (27 avril 1965). Description d’un compilateur ALGOL . Groupe d’utilisateurs de la région européenne 1620 . IBM.
- ^ Kruseman Aretz, FEJ (1973). Un compilateur Algol 60 dans Algol 60 . Tracts du centre mathématique. Amsterdam : Mathematisch Centrum.
- ^ Aho, Alfred V. ; Ravi Sethi ; Jeffrey D. Ullman (1986). Compilateurs: principes, techniques et outils (1ère éd.). Addison-Wesley. ISBN 978-0-201-10194-2., Section 7.5, et les références qui s’y trouvent
- ^ “803 ALGOL” , le manuel d’ Elliott 803 ALGOL
- ^ “Le langage de programmation ALGOL” . www.engin.umd.umich.edu . Archivé de l’original le 9 février 2010 . Récupéré le 11 janvier 2022 .
- ^ “Bonjour le monde! Exemple de programme” . www.engin.umd.umich.edu . Archivé de l’original le 4 février 2010 . Récupéré le 11 janvier 2022 .
- ^ Fortran # “Bonjour, monde!” Exemple
- ^ “Série ICL 1900: Langue Algol” . Publication technique ICL 3340. 1965.
Lectures complémentaires
- En ligneDijkstra, Edsger W. (1961). “Algol 60 Translation: An Algol 60 Translator for the X1 and Making a Translator for Algol 60 (PDF) (Rapport technique). Amsterdam: Mathematisch Centrum. 35.
- Randell, Brian ; Russel, Lawford John (1964). Implémentation d’Algol 60 : la traduction et l’utilisation des programmes Algol 60 sur un ordinateur . Presse académique. OCLC 526731 .La conception du compilateur Whetstone . L’une des premières descriptions publiées de l’implémentation d’un compilateur. Voir les articles connexes : Whetstone Algol Revisited et The Whetstone KDF9 Algol Translator par Brian Randell
Liens externes
- Rapport révisé sur le langage algorithmique Algol 60 par Peter Naur, et al. Définition ALGOL
- Un résumé de la syntaxe BNF d’Algol 60
- “Les vieux vêtements de l’empereur” – Discours du prix ACM Turing de Hoare en 1980, qui traite de l’histoire d’ALGOL et de son implication
- MARST , un traducteur Algol-C gratuit
- Une implémentation d’Algol 60 pour le FP6000 Archivé le 25/07/2020 sur la Wayback Machine Discussion sur certains problèmes d’implémentation.
- Naur, Peter (août 1978). “Le côté européen de la dernière phase du développement d’Algol 60” . Avis ACM SIGPLAN . 13 (8) : 15–44. doi : 10.1145/960118.808370 . S2CID 15552479 .
- L’Université d’Édimbourg a écrit des compilateurs pour Algol60 (mis à jour plus tard pour Algol60M) basés sur leurs compilateurs Atlas Autocode initialement amorcés de l’Atlas au KDF-9. Les compilateurs d’Édimbourg ont généré du code pour l’ICL1900, l’ICL4/75 (un clone d’IBM360) et l’ICL2900. Voici le BNF pour Algol60 Archivé le 15/05/2020 sur la Wayback Machine et la source du compilateur ICL2900 Archivé le 15/05/2020 sur la Wayback Machine , la documentation de la bibliothèque Archivé le 15/05/2020 sur la Wayback Machine et une suite de tests considérable Archivé le 15/05/2020 sur la Wayback Machine , y comprisLes tests de Brian Wichmann. Archivé le 15/05/2020 sur la Wayback Machine Il existe également un traducteur de niveau source Algol60 vers Atlas Autocode assez superficiel Archivé le 15/05/2020 sur la Wayback Machine .
- Retrocomputing Museum d’ Eric S. Raymond , entre autres un lien vers l’interpréteur NASE Algol-60 écrit en C.
- L’interpréteur NASE
- Histoires du B5000 et des gens qui y étaient : un ordinateur ALGOL dédié [1] , [2]
- Hermann Bottenbruch (1961). “Structure et utilisation d’Algol 60” . doi : 10.2172/4020495 . {{cite journal}}: Cite journal requires |journal= (help)
- NUMAL Une bibliothèque de procédures numériques en Algol 60 développée au Stichting Centrum Wiskunde & Informatica ( successeur légal du Stichting Mathematisch Centrum) propriétaire légal .
- Ressources Algol 60 : traducteurs, documentation, programmes
- Algol-60 inclus dans Racket.