ALGOL 60

Algol 60
Paradigmen prozedural, Imperativ, strukturiert
Familie Algol
Entworfen von Backus, Bauer, Grün, Katz, McCarthy, Naur, Perlis, Rutishauer, Samelson, Van Wijngaarden, Vauquois, Wegstein, Holz
Erstmals erschienen 1960; Vor 62 Jahren
Disziplin tippen Statisch, stark
Zielfernrohr Lexikalisch
Beeinflusst von
Algol 58
Beeinflusst
Die nachfolgenden imperativen Sprachen (sogenannte Algol-ähnlich Sprachen), z. Simula, Cpl, Pascal, Ada, C

Algol 60 (kurz für Algorithmische Sprache 1960) ist ein Mitglied der Algol Familie von Computerprogrammiersprachen. Es folgte von Algol 58 die eingeführt hatte Codeblöcke und die Start und Ende Paare, um sie abzugrenzen und einen wichtigen Fortschritt im Aufstieg von darzustellen Strukturierte Programmierung. Algol 60 war die erste Sprache implementiert verschachtelte Funktion Definitionen mit lexikalischer Bereich. Es führte zu vielen anderen Programmiersprachen, einschließlich Cpl, Simula, BCPL, B, Pascal, und C. Praktisch jeder Computer der Ära hatte eine Systemprogrammiersprache Basierend auf Algol 60 Konzepten.

Niklaus Wirth basierte seine eigenen Algol w auf Algol 60, bevor Sie sich entwickeln, um sich zu entwickeln Pascal. Algol-W sollte das Algol der nächsten Generation sein, aber der Algol 68 Das Komitee entschied sich für ein Design, das komplexer und fortgeschrittener als ein gereinigtes vereinfachtes Algol 60 war. Die offiziellen Algol -Versionen sind nach dem Jahr, in dem sie zum ersten Mal veröffentlicht wurden, benannt. Algol 68 unterscheidet sich erheblich von Algol 60 und wurde teilweise dafür kritisiert, dass dies im Allgemeinen "Algol" auf Dialekte von Algol 60 bezieht.

Standardisierung

Algol 60 - mit Cobol - waren die ersten Sprachen, die eine Standardisierung suchten.

Geschichte

Algol 60 wurde hauptsächlich von Forschungs -Informatikern in den USA und in Europa eingesetzt. Die Verwendung in kommerziellen Anwendungen wurde durch das Fehlen von Standardeingangs-/Ausgangsanlagen in seiner Beschreibung und das mangelnde Interesse an der Sprache durch große Computeranbieter behindert. Algol 60 wurde jedoch zum Standard für die Veröffentlichung von Algorithmen und hatte tiefgreifende Auswirkungen auf die zukünftige Sprachentwicklung.

John Backus entwickelte die Backus normale Form Methode zur Beschreibung der Programmiersprachen speziell für Algol 58. Es wurde überarbeitet und erweitert von Peter Naur für Algol 60 und bei Donald Knuth'S Vorschlag umbenannt Backus -Naur -Form.[1]

Peter Naur: "Als Herausgeber des Algol Bulletin wurde ich in die internationalen Diskussionen der Sprache hineingezogen und im November 1959 als Mitglied der European Language Design Group ausgewählt. In dieser Eigenschaft war ich Herausgeber des Algol 60 -Berichts, der produziert wurde Infolge des Algol 60 -Treffens in Paris im Januar 1960. "[2]

Die folgenden Personen nahmen an dem Treffen in Paris teil (vom 11. bis 16. Januar):

Alan Perlis gab eine lebendige Beschreibung des Treffens: "Die Treffen waren anstrengend, endlos und berauschend. Man wurde verschlimmer Die 13 war ausgezeichnet. "

Die Sprache enthielt ursprünglich nicht Rekursion. Es wurde in letzter Minute gegen die Wünsche eines Teils des Komitees in die Spezifikation eingefügt.[3]

Algol 60 inspirierte viele Sprachen, die darauf folgten. Tony Hoare bemerkte: "Hier ist eine Sprache, die seiner Zeit so weit voraus ist, dass es nicht nur eine Verbesserung seiner Vorgänger, sondern auch für fast alle Nachfolger war."[4][5]

Algol 60 Implementierungszeitleiste

Bisher gab es mindestens 70 Augmentationen, Erweiterungen, Ableitungen und Subluages ​​von Algol 60.[6]

Name Jahr Autor Bundesland Beschreibung Ziel -CPU
X1 Algol 60 August 1960[7] Edsger W. Dijkstra und Jaap A. Zonneveld Niederlande Erste Implementierung von Algol 60[8] Electrologica X1
Algol 1960[9] Edgar T. Irons Vereinigte Staaten von Amerika Algol 60 CDC 1604
Burroughs Algol
(Mehrere Varianten)
1961 Burroughs Corporation (mit Teilnahme von Hoare, Dijkstra, und andere) Vereinigte Staaten von Amerika Basis der Burroughs (und nun Unisys MCP basierend) Computer Burroughs große Systeme
und auch ihre Mitteltöner.
Fallalgol 1961 Vereinigte Staaten von Amerika Simula wurde ursprünglich als Simulationsverlängerung des Fallalgols beauftragt Univac 1107
Gogol 1961 William M. McKeeman Vereinigte Staaten von Amerika Für das Odin-Zeit-Sharing-System PDP-1
Dask -Algol 1961 Peter Naur, Jørn Jensen Dänemark Algol 60 Dask in Regnecentralen
Lächeln Algol 1962 Torgil Ekman, Carl-Erik Fröhg Schweden Algol 60 Lächer bei Lund University
Gier Algol 1962 Peter Naur, Jørn Jensen Dänemark Algol 60 Gier in Regnecentralen
Dartmouth Algol 30[10] 1962 Thomas Eugene Kurtz, Stephen J. Garland, Robert F. Hargraves, Anthony W. Knapp, Jorge Llacer Vereinigte Staaten von Amerika Algol 60 LGP-30
Alcor Mainz 2002 1962 Ursula Hill-Samelson, Hans Langmaack Deutschland Siemens 2002
Alcor-Illinois 7090 1962
[11][12]
Manfred Paul, Hans Rüdiiger Wiehle, David Gries, und Rudolf Bayer USA, Westdeutschland Algol 60
Implementiert bei Illinois und die Thmünchen, 1962-1964
IBM 7090
USS 90 Algol 1962 L. Petrone Italien
Elliott Algol 1962 C. A. R. Hoare Vereinigtes Königreich In seiner 1980 diskutierten Turing Award Vorlesung Elliott 803 & der Elliott 503
Algol 60 1962 Roland Strobel[13] Ost-Deutschland Implementiert vom Institut für angewandte Mathematik, Deutsche Akademie der Wissenschaften in Berlin Zeiss-Rillenautomat Zra 1
Algol -Übersetzer 1962 G. van der Mey und W.L. Van der Poel Niederlande Staatsbedrijf der posterijen, Telegrafie en Telefonie ZEBRA
Kidsgrove Algol 1963 F. G. Duncan Vereinigtes Königreich Englische Elektrofirma KDF9
KOPFHAUT[14] 1963 Stephen J. Garland, Anthony W. Knapp, Thomas Eugene Kurtz Vereinigte Staaten von Amerika In sich geschlossener Algol-Prozessor Für eine Untergruppe von Algol 60 LGP-30
Valgol 1963 Val Schorre Vereinigte Staaten von Amerika Ein Test der Meta II Compiler Compiler
FP6000 Algol 1963 Roger Moore Kanada geschrieben für Saskatchewan Power Corp FP6000
Wetzstein 1964 Brian Randell und Lawford John Russell Vereinigtes Königreich Atomic Power Division of English Electric Company. Vorläufer zu Ferranti Pegasus, Nationale physische Laboratorien AS und English Electric Deuce Implementierungen. Englische Elektrofirma KDF9
Algol 60 1964 Jean-Claude Boussard[15] Frankreich Institut d'Fortatique et Mathématiques Applizemes de Grenoble[FR] IBM 7090
Algol 60 1965 Claude -Paar[FR][16] Frankreich Center de Calcul de la Fakulté des Sciences de Nancy IBM 1620
Dartmouth Algol 1965 Stephen J. Garland, Sarr Blumson, Ron Martin Vereinigte Staaten von Amerika Algol 60 Dartmouth Time Sharing System für die GE 235
Nu Algol 1965 Norwegen Univac
Algol 60 1965[17] F.E.J. Kruseman Aretz Niederlande MC-Compiler für den EL-X8 Electrologica x8
Algek 1965 UdSSR Minsk-22 А? ээ und basierend auf Algol-60 und Cobol Unterstützung für wirtschaftliche Aufgaben
Malgol 1966 publ. A. Viil, M Kotli & M. Rakhendi, Estnische SSR Minsk-22
Algams 1967 GAMS -Gruppe (га м, група автоатизesse Comecon Minsk-22, später Es evm, Besm
Algol/Zam 1967 Polen Polnischer ZAM -Computer
Chinesisches Algol 1972 China Chinesische Zeichen, ausgedrückt über das Symbolsystem
Dg/l 1972 Vereinigte Staaten von Amerika Dg Finsternis Computerfamilie
Nase 1990 Erik Schoenfelder Deutschland Dolmetscher Linux und MS Windows
Marst 2000 Andrew Makhorin Russland Algol-60 zu C-Übersetzer Alle CPUs, die von der GNU -Compiler -Sammlung unterstützt werden; Marst ist Teil des GNU -Projekts

Die Burroughs -Dialekte enthielten spezielle Systemprogrammierdialekte wie z. B. Espol und Newp.

Eigenschaften

Algol 60 wie offiziell definiert hatte keine E/A -Einrichtungen; Implementierungen definierten ihre eigenen auf eine Weise, die selten miteinander kompatibel war. Im Gegensatz dazu bot Algol 68 eine umfangreiche Bibliothek von Transport (Algol 68 Sprachgebrauch für Eingabe/Ausgabe) Einrichtungen.

Algol 60 lieferte zwei Bewertungsstrategien zum Parameter Vorbeigehen: das gemeinsame Call-by-Wert, und Call-by-Namen. Die für jeden formale Parameter angegebene Verfahrenserklärung, der verwendet werden sollte: Wert für Call-by-Wert angegeben und für Call-by-Namen weggelassen. Call-by-Namen hat im Gegensatz zu bestimmte Auswirkungen Call-by-Reference. Zum Beispiel ohne die Parameter als angeben Wert oder HinweisEs ist unmöglich, ein Verfahren zu entwickeln, das die Werte zweier Parameter austauscht, wenn die tatsächlichen Parameter, die in übergeben werden, eine Ganzzahlvariable und ein Array sind, das von derselben Ganzzahlvariablen indiziert wird.[18] Denken Sie daran, einen Zeiger zu übergeben, um (i, a [i]) in eine Funktion zu tauschen. Jedes Mal, wenn der Austausch verwiesen wird, wird er neu bewertet. Sag i: = 1 und a [i]: = 2, also jedes Mal, wenn der Swap verwiesen wird, wird die andere Kombination der Werte zurückgegeben ([1,2], [2,1], [1,2] und so an). Eine ähnliche Situation erfolgt mit einer zufälligen Funktion als tatsächliches Argument.

Call-by-Namen ist vielen Compiler-Designern für die Interessenten bekannt. "Thunks"Die werden verwendet, um es zu implementieren. Donald Knuth entwickelte das "Mann- oder Jungen -Test"Um Compiler zu trennen, die korrekt implementiert wurden"Rekursion und nicht lokale Referenzen. "Dieser Test enthält ein Beispiel für Call-by-Namen.

Algol 60 reservierte Wörter und eingeschränkte Kennungen

Es gibt 35 solcher reservierten Wörter im Standard Burroughs große Systeme Untersprachel:

  • ALPHA
  • Array
  • START
  • Boolesche
  • KOMMENTAR
  • FORTSETZEN
  • DIREKTE
  • TUN
  • DOPPELT
  • ANDERS
  • ENDE
  • VERANSTALTUNG
  • FALSCH
  • DATEI
  • ZUM
  • FORMAT
  • GEHEN
  • WENN
  • GANZE ZAHL
  • ETIKETT
  • AUFFÜHREN
  • LANG
  • BESITZEN
  • ZEIGER
  • VERFAHREN
  • REAL
  • SCHRITT
  • SCHALTER
  • AUFGABE
  • DANN
  • STIMMT
  • BIS UM
  • WERT
  • WÄHREND
  • POSTLEITZAHL

Es gibt 71 solchen eingeschränkten Kennungen in den Standard-Burroughs Large Systems Sub-Sprache:

  • ANNEHMEN
  • UND
  • ANFÜGEN
  • DURCH
  • ANRUF
  • FALL
  • WEIL
  • NAH DRAN
  • Deallocation
  • DEFINIEREN
  • ABLÖSEN
  • DEAKTIVIEREN
  • ANZEIGE
  • Div
  • ENTSORGEN
  • ERMÖGLICHEN
  • EQL
  • EQV
  • AUSTAUSCH
  • Extern
  • FÜLLEN
  • NACH VORNE
  • Geq
  • GTR
  • Imp
  • IN
  • UNTERBRECHEN
  • IST
  • PFUND
  • Leq
  • BEFREIEN
  • LINIE
  • SPERREN
  • LSS
  • VERSCHMELZEN
  • Mod
  • MONITOR
  • Mux
  • Neq
  • NEIN
  • NICHT
  • AN
  • OFFEN
  • ODER
  • AUS
  • BILD
  • PROZESS
  • BESORGEN
  • Programmdump
  • RB
  • LESEN
  • VERÖFFENTLICHUNG
  • ERSETZEN
  • ZURÜCKSETZEN
  • Größenänderung
  • ZURÜCKSPULEN
  • LAUF
  • SCAN
  • SUCHEN
  • EINSTELLEN
  • ÜBERSPRINGEN
  • SORTIEREN
  • PLATZ
  • TAUSCHEN
  • DURCH
  • MAL
  • ZU
  • WARTEN
  • WENN
  • MIT
  • SCHREIBEN

und auch die Namen aller intrinsischen Funktionen.

Standardbetreiber

Priorität Operator
Erste
Arithmetik
Erste ↑ (Kraft)
zweite ×, / (real), ÷ (Ganzzahl)
dritte +, -
zweite <, ≤, =, ≥, >, ≠
dritte (Nicht)
vierte ∧ (und)
fünfte ∨ (oder)
sechste ⊃ (Implikation)
siebte ≡ (Äquivalenz)

Beispiele und Portabilitätsprobleme

Code Beispielvergleiche

Algol 60

Verfahren Absmax (a) Größe: (n, m) Ergebnis: (y) Unterlagen: (i, k); Wert n, m; Array a; ganze Zahl n, m, i, k; real y;Kommentar Das absolut größte Element der Matrix A, der Größe n durch m, wird auf y und die Einbilder dieses Elements an i und k übertragen;Start  ganze Zahl p, q; y: = 0; i: = k: = 1; zum P: = 1 Schritt 1 bis um n tun  zum F: = 1 Schritt 1 bis um m tun  wenn ABS (a [p, q])> y dann  Start y: = abs (a [p, q]); I: = P; k: = q Ende Ende Absmax

Implementierungen unterscheiden sich in der Art und Weise, wie der in fett gedruckte Text geschrieben werden muss. Das Wort "Ganzzahl", einschließlich der Anführungszeichen, muss in einigen Implementierungen anstelle von verwendet werden ganze Zahloben, dadurch Bezeichnung Es als spezielles Schlüsselwort.

Im Folgenden finden Sie ein Beispiel für die Erzeugung einer Tabelle mit Verwendung Elliott 803 Algol:[19]

 Gleitkomma -Algol -Test 'Beginnen Sie Real A, B, C, D' Read D 'für a: = 0,0 Schritt D bis 6,3 Beginnen Sie mit dem Druck beginnen Punch (3), ££ l ?? ' B: = sin (a) 'c: = cos (a)' drucken Punch (3),GLEICHE LINIE,Ausgerichtet (1,6), A, b, c 'Ende' Ende '

Algol 60 Familie

Da Algol 60 keine E/A -Einrichtungen hatte, gibt es keine tragbaren Hallo Weltprogramm in Algol. Das folgende Programm könnte (und werden) eine Algol-Implementierung für einen Mainframe von Unisys A-Serie kompilieren und ausführen und ist eine einfache Vereinfachung des Codes, der aus dem Sprachhandbuch entnommen wurde[20] Bei der Universität von Michigan-Derborn Computer- und Informationswissenschaftsabteilung Hallo Welt! ALGOL -Beispielprogrammseite.[21]

Datei f (sort = remote); Ebcdic Array e [0:11]; Ersetzen Sie E durch "Hallo Welt!"; Schreiben (f, *, e); ENDE.

Wobei * usw. eine Formatspezifikation darstellte, wie in FORTRAN verwendet, z.[22]

Ein einfacheres Programm mit einem Inline -Format:

 START  DATEI F(NETT=FERNBEDIENUNG);  SCHREIBEN(F, <"HALLO WELT!">);  ENDE. 

Ein noch einfacheres Programm mit der Anzeigeanweisung:

START ANZEIGE("HALLO WELT!") ENDE. 

Ein alternatives Beispiel: Die Verwendung von Elliott -Algol -E/A ist wie folgt. Elliott-Algol verwendete verschiedene Zeichen für "Open-STRING-Quote" und "Close-String-Quote", die hier von dargestellt werden    und   .

 Programm Hallo Leute;  Start  drucken Hallo Welt  Ende; 

Hier ist eine Version für das Elliott 803-Algol (A104) Der Standard-Elliott 803 verwendete 5-Loch-Papierband und hatte somit nur oberes Gehäuse. Dem Code fehlten Zitatzeichen so £ (Pfundzeichen) wurde für offenes Zitat verwendet und ? (Fragezeichen) für ein enges Zitat. Spezielle Sequenzen wurden in doppelte Zitate platziert (z. B. £. L? produzierte eine neue Linie auf dem Teleprinter).

  Hifolks 'Beginn drucken £ hello world £ l?' ENDE'

Das IKT 1900 Serie Algol E/A -Version erlaubte Eingabe von Papierband oder Lochkarte. Papierband 'Full' -Modus erlaubte eine niedrigere Gehäuse. Die Ausgabe war für einen Liniendrucker. Beachten Sie die Verwendung von '(', ')' und%.[23]

  'Programm' (Hallo) '' begin '' Kommentar 'offenes Zitat ist' (', nah ist') ', druckbarer Raum muss als% geschrieben werden, weil Räume ignoriert werden. Text schreiben ('(' Hallo%World ')'); 'Ende' 'Finish' '

Siehe auch

Verweise

  1. ^ Knuth, Donald E. (Dezember 1964). "Backus Normal Form gegen Backus Naur Form". Comm. ACM. 7 (12): 735–6. doi:10.1145/355588.365140. S2CID 47537431.
  2. ^ ACM Award Citation / Peter Naur, 2005
  3. ^ Van Emden, Maarten (2014). "Wie die Rekursion in die Programmierung geriet: Eine Geschichte von Intrigen, Verrat und fortschrittlicher Programming-Sprache-Semantik". Der Platz eines Programmierers.
  4. ^ Hoare, C.A.R. (Dezember 1973). "Hinweise zum Programmiersprache Design" (PDF). p. 27. (Diese Anweisung wird manchmal fälschlicherweise zugeschrieben Edsger W. Dijkstraauch an der Implementierung des ersten Algol 60 beteiligt Compiler.))
  5. ^ Abelson, Hal; Dybvig, R. K.; et al. Rees, Jonathan; CLINGER, William (Hrsg.). "Überarbeitete (3) Bericht über das algorithmische Sprachschema (der Erinnerung an Algol 60 gewidmet)". Abgerufen 2009-10-20.
  6. ^ Die Enzyklopädie von Computersprachen Archiviert 27. September 2011 bei der Wayback -Maschine
  7. ^ Daylight, E. G. (2011). "Dijkstra's Rallying -Schrei nach der Verallgemeinerung: Das Aufkommen des rekursiven Verfahrens, Ende der 1950er bis Anfang der 1960er Jahre". Das Computerjournal. 54 (11): 1756–1772. doi:10.1093/comjnl/bxr002.
  8. ^ Kruseman Aretz, F.E.J. (30. Juni 2003). "Der Dijkstra-Zonneveld Algol 60 Compiler für den Electrologica x1" (PDF). Softwareentwicklung. Geschichte der Informatik. Amsterdam: Centrum Wiskunde & Informatica.[Permanent Dead Link]
  9. ^ Irons, Edgar T., ein Syntax -Regie -Compiler für Algol 60, Kommunikation des ACM, vol. 4, p. 51. (Jan. 1961)
  10. ^ Kurtz, Thomas E. (1978). "BASIC". Geschichte der Programmiersprachen. S. 515–537. doi:10.1145/800025.1198404. ISBN 0127450408.
  11. ^ Gries, D.; Paul, M.; Wiehle, H. R. (1965). "Einige Techniken, die im Alcor Illinois 7090 verwendet werden". Kommunikation der ACM. 8 (8): 496–500. doi:10.1145/365474.365511. S2CID 18365024.
  12. ^ Bayer, R.; Gries, D.; Paul, M.; Wiehle, H. R. (1967). "Der Alcor Illinois 7090/7094 Post Mortem Dump". Kommunikation der ACM. 10 (12): 804–808. doi:10.1145/363848.363866. S2CID 3783605.
  13. ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
  14. ^ Kurtz, op. cit., Seite 517.
  15. ^ Jean-Claude Boussard (Juni 1964). Design und Implementierung eines Compiler -Algol60 auf dem elektronischen Rechner IBM 7090/94 und 7040/44 (Phdthesis). Institut d'Fortatique et Mathématiques Applizemes de Grenoble[FR]: Université Joseph -Fourier - Grenoble I.{{}}: CS1 Wartung: Standort (Link)
  16. ^ Claudepaar (27. April 1965). Beschreibung d'En Compilateuralgol. Europäische Région 1620 -Benutzergruppe. IBM.
  17. ^ Kruseman Aretz, F.E.J. (1973). Ein Algol 60 Compiler in Algol 60. Mathematische Mittelstraßen. Amsterdam: Mathematisch Centrum.
  18. ^ Aho, Alfred V.; Ravi Sethi; Jeffrey D. Ullman (1986). Compiler: Prinzipien, Techniken und Werkzeuge (1. Aufl.). Addison-Wesley. ISBN 978-0-201-10194-2., Abschnitt 7.5 und Referenzen darin
  19. ^ "803 Algol", das Handbuch für Elliott 803 Algol
  20. ^ "Die Algol -Programmiersprache". www.engin.umd.umich.edu. Archiviert von das Original am 9. Februar 2010. Abgerufen 11. Januar 2022.
  21. ^ "Hallo Welt! Beispielprogramm". www.engin.umd.umich.edu. Archiviert von das Original am 4. Februar 2010. Abgerufen 11. Januar 2022.
  22. ^ Forran#"Hallo, Welt!" Beispiel
  23. ^ "ICL 1900 -Serie: Algol -Sprache". ICL Technische Veröffentlichung 3340. 1965.

Weitere Lektüre

Externe Links