ALGOL 60 - ALGOL 60
Paradigmes | procédural , impératif , structuré |
---|---|
Famille | ALGOL |
Conçu par | Backus , Bauer , Vert , Katz , McCarthy , Naur , Perlis , Rutishauser , Samelson , van Wijngaarden , Vauquois , Wegstein , Woodger |
Première apparition | 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 |
ALGOL 60 (abréviation de Algorithmic Language 1960 ) est un membre de la famille ALGOL de langages de programmation informatique. Elle fait suite à l' ALGOL 58 qui avait introduit des blocs de code et des couples begin
et end
pour 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 disposaient d'un langage de programmation système basé sur les concepts ALGOL 60.
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 que d'un ALGOL 60 simplifié et épuré. Les versions officielles d'ALGOL portent le nom de l'année de leur première publication. L'Algol 68 est sensiblement différent de l'Algol 60 et a été partiellement critiqué pour l'être, de sorte qu'en général « Algol » fait référence aux dialectes de l'Algol 60.
Standardisation
ALGOL 60 – avec COBOL – ont été les premiers langages à rechercher la normalisation.
- ISO 1538:1984 Langages de programmation – Algol 60 (stabilisé)
- ISO/TR 1672:1977 Représentation matérielle des symboles de base ALGOL ... (maintenant retiré)
Histoire
ALGOL 60 a été utilisé principalement par des chercheurs en informatique aux États-Unis et en Europe. Son utilisation dans les applications commerciales a été entravée par l'absence d'installations d'entrée/sortie standard dans sa description et le manque d'intérêt pour la langue 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 Backus-Naur form .
Peter Naur : « En tant que rédacteur en chef du Bulletin ALGOL, j'ai été impliqué dans les discussions internationales sur la langue et j'ai été sélectionné pour être membre du groupe européen de conception linguistique en novembre 1959. À ce titre, j'ai été rédacteur en chef du rapport ALGOL 60, produit à la suite de la réunion de l'ALGOL 60 à Paris en janvier 1960."
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. le 13 était excellent."
Le langage à l'origine 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é.
ALGOL 60 a inspiré de nombreuses langues qui l'ont suivi. Tony Hoare a fait remarquer : "Voici un langage si en avance sur son temps qu'il n'était pas seulement une amélioration par rapport à ses prédécesseurs mais aussi par rapport à presque tous ses successeurs."
Calendrier de mise en œuvre de l'ALGOL 60
À ce jour, il y a eu au moins 70 augmentations, extensions, dérivations et sous-langages d'Algol 60.
Nom | Année | Auteur | État | La description | CPU cible | ||
---|---|---|---|---|---|---|---|
X1 ALGOL 60 | août 1960 | Edsger W. Dijkstra et Jaap A. Zonneveld | Pays-Bas | Première mise en œuvre d'ALGOL 60 | Electrologica X1 | ||
Algol | 1960 | 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 ) |
Burroughs grands systèmes et leur milieu de gamme aussi. |
||
Cas ALGOL | 1961 | Etats-Unis | Simula a été initialement contracté comme une 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 | ||
DASK ALGOL | 1961 | Peter Naur , Jørn Jensen | Danemark | Algol 60 | DASK à Regnecentralen | ||
SMIL ALGOL | 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 | 1962 | Thomas Eugène Kurtz et al. | Etats-Unis | LGP-30 | |||
Alcor Mayence 2002 | 1962 | Ursula Hill-Samelson, Hans Langmaack | Allemagne | Siemens 2002 | |||
ALCOR-ILLINOIS 7090 | 1962 |
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. Pétrone | Italie | ||||
Elliott ALGOL | 1962 | VOITURE Hoare | Royaume-Uni | Discuté dans sa conférence du Prix Turing en 1980 | Elliott 803 et l'Elliott 503 | ||
Algol 60 | 1962 | Roland Strobel | Allemagne de l'est | Mis en œuvre par l'Institut de mathématiques appliquées, Académie allemande des sciences à 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 | FG Duncan | Royaume-Uni | Compagnie d'électricité anglaise KDF9 | |||
VALGOL | 1963 | Val Schorre | Etats-Unis | Un test du compilateur du compilateur META II | |||
FP6000 Algol | 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 d'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 | La France | Institut d'informatique et de Mathématiques Appliquées de Grenoble | IBM 7090 | ||
ALGOL 60 | 1965 | Claude Paire | La France | Centre de calcul de la Faculté des Sciences de Nancy | IBM 1620 | ||
NU ALGOL | 1965 | Norvège | UNIVAC | ||||
Algol 60 | 1965 | 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 Symbol | ||||
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
L'ALGOL 60 tel qu'il est officiellement défini n'avait pas d'installations d'E/S ; les implémentations définissaient les leurs de manières qui étaient rarement compatibles les unes avec les autres. En revanche, ALGOL 68 offrait une bibliothèque étendue d' installations de transput (le jargon ALGOL 68 pour Input/Output).
ALGOL 60 a fourni deux stratégies d'évaluation pour le passage de paramètres : l' appel par valeur commun et l' appel par nom . La déclaration de procédure spécifiée, 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 en tant que valeur ou référence , 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 transmis sont une variable entière et un tableau indexé par cette même variable entière . 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 l'échange est référencé, il renverra l'autre combinaison des valeurs ([1,2], [2,1], [1,2] et ainsi de suite au). Une situation similaire se produit avec une fonction aléatoire passée comme argument réel.
L'appel par nom est connu par 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 man or boy " pour séparer les compilateurs qui implémentent 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 y a 35 mots réservés de ce type dans le sous-langage standard des grands systèmes de Burroughs :
|
|
|
|
|
Il existe 71 de ces identificateurs restreints dans le sous-langage standard des grands systèmes de Burroughs :
|
|
|
|
|
et aussi les noms de toutes les fonctions intrinsèques.
Opérateurs standards
Priorité | Opérateur | |
---|---|---|
première arithmétique |
premier | (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
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m, is transferred to y, and the subscripts of this element to i and k; begin integer p, q; y := 0; i := k := 1; for p := 1 step 1 until n do for q := 1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end 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 un tableau à l'aide d' Elliott 803 ALGOL :
FLOATING POINT ALGOL TEST' BEGIN REAL A,B,C,D' READ D' FOR A:= 0.0 STEP D UNTIL 6.3 DO BEGIN PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' END' END'
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 sera toujours) compilé et exécuté sur une implémentation ALGOL pour un mainframe Unisys A-Series, et est une simplification directe du code tiré du Language Guide de l' Université du Michigan -Dearborn Computer and Information Science Department Hello world ! Page d'exemple de programme ALGOL.
BEGIN FILE F(KIND=REMOTE); EBCDIC ARRAY E[0:11]; REPLACE E BY "HELLO WORLD!"; WRITE(F, *, E); END.
Un programme plus simple utilisant un format en ligne :
BEGIN
FILE F(KIND=REMOTE);
WRITE(F, <"HELLO WORLD!">);
END.
Un programme encore plus simple utilisant l'instruction Display :
BEGIN DISPLAY("HELLO WORLD!") END.
Un autre exemple, 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 ' .
program HiFolks;
begin
print ‘Hello world’
end;
Voici une version pour l'Elliott 803 Algol (A104) L'Elliott 803 standard utilisait du ruban 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 (par exemple ££L?? a produit une nouvelle ligne sur le téléimprimeur).
HIFOLKS' BEGIN PRINT £HELLO WORLD£L??' END'
La version d'E/S Algol de la série ICT 1900 permettait l'entrée à partir d'une bande de papier ou d'une carte perforée. Le mode "plein" de la bande de papier est autorisé en minuscules. La sortie était sur une imprimante ligne. Notez l'utilisation de '(',')' et %.
'PROGRAM' (HELLO) 'BEGIN' 'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', PRINTABLE SPACE HAS TO BE WRITTEN AS % BECAUSE SPACES ARE IGNORED; WRITE TEXT('('HELLO%WORLD')'); 'END' 'FINISH'
Voir également
Les références
Lectures complémentaires
- Dijkstra, Edsger W. (1961). "Traduction ALGOL 60 : Un traducteur ALGOL 60 pour le X1 et Faire un traducteur pour ALGOL 60 (PDF) (Rapport technique). Amsterdam : Mathematisch Centrum. 35.
- Randell, Brian ; Russell, Lawford John (1964). Implémentation d'ALGOL 60 : La traduction et l'utilisation de 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. ALGOL définition
- Un résumé de la syntaxe BNF d'ALGOL 60
- « Les vieux vêtements de l'empereur » - discours de Hoare 1980 ACM Turing Award, qui traite de l'histoire d'ALGOL et de son implication
- MARST , un traducteur gratuit Algol-to-C
- Une mise en œuvre d'ALGOL 60 pour le FP6000 Archivée le 25/07/2020 à la Wayback Machine Discussion de certains problèmes de mise en œuvre.
- Naur, Peter (août 1978). "Le côté européen de la dernière phase du développement d'ALGOL 60" . Avis SIGPLAN ACM . 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) sur la base de 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 IBM360) et l'ICL2900. Voici le BNF pour Algol60 Archivé 2020-05-15 à la Wayback Machine et la source du compilateur ICL2900 Archivée 2020-05-15 à la Wayback Machine , la documentation de la bibliothèque Archivée 2020-05-15 à la Wayback Machine , et une suite de tests considérable Archivé 2020-05-15 à la Wayback Machine, y compris les tests de Brian Wichmann. Archivé 2020-05-15 à la Wayback Machine Il existe également un traducteur de niveau source Algol60 vers Atlas Autocode plutôt superficiel Archivé 2020-05-15 à la Wayback Machine .
- Le Retrocomputing Museum d' Eric S. Raymond , entre autres un lien vers l'interpréteur NASE Algol-60 écrit en C.
- L'interprète de la NASE
- Histoires du B5000 et des personnes qui y étaient : un ordinateur ALGOL dédié [1] , [2]
-
Hermann Bottenbruch (1961). "Structure et utilisation d'ALGOL 60" . doi : 10.2172/4020495 . Citer le journal nécessite
|journal=
( aide ) - NUMAL Une bibliothèque de procédures numériques en ALGOL 60 développée au Stichting Centrum Wiskunde & Informatica (successeur légal de Stichting Mathematisch Centrum) propriétaire légal .
- Ressources Algol 60 : traducteurs, documentation, programmes
- Algol-60 inclus dans la raquette.