ALGOL 68
Paradigmen | Multi-Paradigma: gleichzeitig, Imperativ |
---|---|
Familie | Algol |
Entworfen von | A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck und C. H. A. Kosteret al. |
Erstmals erschienen | Abschlussbericht: 1968R0 |
Stabile Version | Algol 68 / RR / Überarbeiteter Bericht: 1973R1 |
Disziplin tippen | statisch, stark, sicher, strukturell |
Zielfernrohr | Lexikalisch |
Haupt Implementierungen | |
Algol 68c, Algol 68 Genie (neuer), Algol 68-R, Algol 68Rs, Algol 68s, Flac, Алгол 68 лbeharke Einheit, Leningrad, Odra Algol 68 | |
Dialekte | |
Algol 68/FR (AbschlussberichtR0) | |
Beeinflusst von | |
Algol 60, Algol y | |
Beeinflusst | |
C,[3][5] C ++,[6] Bourne Shell, Kornshell, Verprügeln, Stahlmann, Ada, Python,[7] Samen7, Maria, S3 |
Algol 68 (kurz für Algorithmische Sprache 1968) ist ein Imperativ Programmiersprache Das wurde als Nachfolger der Algol 60 Programmiersprache, das mit dem Ziel eines viel breiteren Anwendungsbereichs entwickelt wurde und strenger definiert ist Syntax und Semantik.
Die Komplexität der Definition der Sprache, die auf mehrere hundert Seiten mit nicht standardmäßiger Terminologie gefüllt ist Compiler Implementierung schwierig und es wurde gesagt, es habe "keine Implementierungen und keine Benutzer". Dies war nur teilweise wahr; Algol 68 fand in mehreren Nischenmärkten verwendet, insbesondere in der Vereinigtes Königreich wo es beliebt war auf Internationale Computer Limited (ICL) Maschinen und in Lehrrollen. Außerhalb dieser Felder war die Verwendung relativ begrenzt.
Trotzdem die Beiträge von Algol 68 zum Feld von Informatik waren tief, weitreichend und dauerhaft, obwohl viele dieser Beiträge nur öffentlich identifiziert wurden, wenn sie in anschließend entwickelten Programmiersprachen wieder aufgetaucht waren. Viele Sprachen wurden speziell als Reaktion auf die wahrgenommene Komplexität der Sprache entwickelt, das bemerkenswerteste Wesen Pascal, oder waren Neuauflagen für bestimmte Rollen wie Ada.
Viele Sprachen der 1970er Jahre verfolgen ihr Design speziell auf Algol 68 und wählen einige Merkmale aus, während sie andere als zu komplex oder für bestimmte Rollen angesehen wurden. Darunter ist die Sprache C, was direkt durch Algol 68 beeinflusst wurde, insbesondere durch seine Starke Typisierung und Strukturen. Die meisten modernen Sprachen verfolgen mindestens einen Teil ihrer Syntax entweder auf C oder Pascal und somit direkt oder indirekt auf Algol 68.
Überblick
Zu den Algol 68-Merkmalen gehören expressionsbasierte Syntax, vom Benutzer abgelagerte Typen und Strukturen/Tagged-Unions, ein Referenzmodell von Variablen und Referenzparametern, String, Array- und Matrixschneide und Parallelität.
Algol 68 wurde von der entworfen Internationale Föderation für Informationsverarbeitung (IFIP) IFIP Arbeitsgruppe 2.1 auf algorithmischen Sprachen und Kalkül. Am 20. Dezember 1968 wurde die Sprache offiziell von der Gruppe übernommen und dann von der Generalversammlung von IFIP zur Veröffentlichung genehmigt.
Algol 68 wurde mit a definiert Formalismus, eine zweistufige formelle Grammatik, erfunden von Adriaan van Wijngaarden. Van Wijngaarden Grammatiken verwenden ein Kontextfreie Grammatik Erzeugen eines unendlichen Produktionssatzes, das ein bestimmtes Algol 68 -Programm erkennen; Insbesondere können sie die Art von Anforderungen ausdrücken, die in vielen anderen Programmiersprache Technische Standards sind gekennzeichnet Semantikund muss in mehrdeutig anfälligen natürlichen Sprachprosa ausgedrückt und dann in Compilern als implementiert werden ad hoc Code an den formalen Sprachparser beigefügt.
Algol 68 war die erste (und möglicherweise eine der letzten) Hauptsprache, für die eine vollständige formale Definition vorgenommen wurde, bevor sie umgesetzt wurde.
Die Hauptziele und Prinzipien der Gestaltung von Algol 68:
- Vollständigkeit und Klarheit der Beschreibung[9]
- Orthogonalität von Design[10]
- Sicherheit[11]
- Effizienz:[12]
- Statische Modusprüfung
- Modusunabhängige Parsen
- Unabhängiges Kompilieren
- Schleifenoptimierung
- Darstellungen - in minimaler und größerer Zeichensätze
Algol 68 wurde kritisiert, am deutlichsten von einigen Mitgliedern seines Designausschusses wie z. B. C. A. R. Hoare und Edsger Dijkstra, um die Einfachheit von aufzugeben Algol 60zu einem Mittel für komplexe oder übermäßig allgemeine Ideen werden und wenig tun, um das zu machen Compiler Die Aufgabe des Schriftstellers leichter im Gegensatz zu absichtlich einfachen Zeitgenossen (und Wettbewerbern) wie z. C, S-Algol und Pascal.
1970,, Algol 68-R wurde der erste arbeitende Compiler für Algol 68.
In der Revision von 1973 bestimmte Merkmale - wie z. Verfahren, Gommas[13] und formelle Grenzen - wurden weggelassen.[14] C.F. Die Sprache des nicht überarbeiteten Berichts.R0
Obwohl europäische Verteidigungsagenturen (in Großbritannien Königliche Signale und Radareinrichtung (RSRE)) Förderte die Verwendung von Algol 68 für die erwarteten Sicherheitsvorteile, die amerikanische Seite der NATO -Allianz, ein anderes Projekt zu entwickeln, die Sprache Adafür US -Verteidigungsverträge obligatorisch.
Algol 68 hatte auch einen bemerkenswerten Einfluss auf die Sovietunion, Details, die in gefunden werden können in Andrey Ershov's 2014 Papier: "Algol 68 und seine Auswirkungen auf die UdSSR- und russische Programmierung",[15] und "алéо 68 и ео влияflänzes на пwor[16]
Steve Bourne, der im Algol 68 Revisionsausschuss war, hat einige seiner Ideen zu ihm übernommen Bourne Shell (und damit nachkommen Unix -Muscheln wie zum Beispiel Verprügeln) und zu C (und dadurch zu Nachkommen wie wie C ++).
Die vollständige Geschichte des Projekts finden Sie in C. H. Lindsey's Eine Geschichte von Algol 68.[17][18]
Für eine Behandlung in voller Länge der Sprache siehe "Programmieralgol 68 MAURDE".[19] von Dr. Sian Mountbatten oder "Lernalgol 68 Genie"[20] von Marcel van der Veer, der den überarbeiteten Bericht enthält.
Geschichte
Ursprünge
Algol 68 ist, wie der Name schon sagt Algol Sprache, die erstmals 1960 formalisiert wurde. Im selben Jahr die Internationale Föderation für Informationsverarbeitung (IFIP) bildete und startete die Arbeitsgruppe mit Algol oder WG2.1. Diese Gruppe veröffentlichte im April 1962 eine aktualisierte Algol 60-Spezifikation in Rom. Bei einem Follow-up-Treffen im März 1964 wurde vereinbart, dass die Gruppe mit der Arbeit an zwei Folgestandards beginnen sollte. Algol x das wäre eine Neudefinition der Sprache mit einigen Ergänzungen und einer Algol y, was die Fähigkeit haben würde, seine eigenen Programme im Stil der Sprache zu ändern LISPELN.[21]
Definitionsprozess
Das erste Treffen der Algol X -Gruppe wurde in festgehalten Princeton Universität Im Mai 1965. Ein Bericht des Treffens bemerkte zwei allgemein unterstützte Themen, die Einführung von Starke Typisierung und Interesse an Euler Konzepte von "Bäumen" oder "Listen" für die Behandlung von Sammlungen.[22]
Bei der zweiten Sitzung im Oktober in Frankreich wurden drei formelle Vorschläge vorgelegt, Niklaus Wirth's Algol w zusammen mit Kommentaren zu Rekordstrukturen von WAGEN. (Tony) Hoare, eine ähnliche Sprache von Gerhard Seegmüller und eine Zeitung von Adriaan van Wijngaarden auf "Orthogonales Design und Beschreibung einer formalen Sprache". Letzteres, das in fast unentschiedenes "W-Grammatik" geschrieben wurde, erwies sich als entscheidende Verschiebung der Entwicklung der Sprache. Das Treffen schloss mit einer Vereinbarung, dass Van Wijngaarden die Wirth-/Hoare-Einreichung mit seiner W-Grammatik neu schreiben würde.[22]
Diese scheinbar einfache Aufgabe erwies sich letztendlich schwieriger als erwartet, und das Follow-up-Treffen musste sich um sechs Monate verzögern. Als es sich im April 1966 traf in KootwijkDer Entwurf von Van Wijngaarden blieb unvollständig und Wirth und Hoare präsentierte eine Version mit traditionelleren Beschreibungen. Es wurde allgemein vereinbart, dass ihr Papier "die richtige Sprache im falschen Formalismus" war.[23] Als diese Ansätze untersucht wurden, wurde klar, dass es einen Unterschied in der Art und Weise gab, wie Parameter beschrieben wurden, die reale Effekte haben würden, und während Wirth und Hoare protestierten, dass weitere Verzögerungen endlos werden könnten, beschloss das Komitee, auf Van Wijngaardens Version zu warten. Wirth implementierte dann ihre aktuelle Definition als Algol W.[24]
Beim nächsten Treffen in Warschau Im Oktober 1966,[25] Es gab einen ersten Bericht des I/A -Unterausschusses, der sich im Treffen getroffen hatte Oak Ridge National Laboratory und die Universität von Illinois hatte aber noch nicht viel Fortschritte gemacht. Die beiden Vorschläge des vorherigen Treffens wurden erneut untersucht, und diesmal entstand eine neue Debatte über den Einsatz von Zeiger; Algol W verwendete sie nur, um auf Datensätze zu verweisen, während Van Wijngaardens Version auf jedes Objekt verweisen könnte. Verwirrung hinzufügen, John McCarthy präsentierte einen neuen Vorschlag für Bedienerüberlastung und die Fähigkeit, zusammen zu streben und oder Konstrukte und Klaus Samelson wollte zulassen Anonyme Funktionen. In der daraus resultierenden Verwirrung gab es einige Diskussionen darüber, die gesamte Anstrengung aufzugeben.[24] Die Verwirrung wurde durch das, was das Algoly -Treffen sein sollte Zandvoort Im Mai 1967.[22]
Veröffentlichung
Schließlich wurde im Februar 1968 ein Bericht zum Entwurf veröffentlicht. Dies wurde durch "Schock, Horror und Dissens" getroffen.[22] Meistens aufgrund der Hunderte von Seiten von unleserlicher Grammatik und seltsamer Terminologie. Charles H. Lindsey versuchte herauszufinden, welche "Sprache darin versteckt war",[26] Ein Prozess, bei dem sechs Mannwebe auf Mühe gekostet wurden. Das resultierende Papier "Algol 68 mit weniger Tränen" wurde weit verbreitet. Bei einer breiteren Informationsbearbeitung in der Bearbeitung von Informationen in Zürich Im Mai 1968 beklagten sich die Teilnehmer darüber, dass die Sprache ihnen gezwungen wurde und dass IFIP "der wahre Bösewicht dieser unangemessenen Situation" war, da die Treffen größtenteils geschlossen waren und es keinen formellen Feedback -Mechanismus gab. Wirth und Peter Naur formell trat zu dieser Zeit ihre Autorenpositionen in WG2.1 zurück.[26]
Das nächste WG2.1 -Treffen fand statt Tirrenia Im Juni 1968 sollte es die Veröffentlichung von Compilern und anderen Themen erörtern, sondern sich in eine Diskussion über die Sprache verwandeln. Van Wijngaarden antwortete mit der Aussage (oder drohte), dass er nur eine weitere Version des Berichts veröffentlichen würde. Zu diesem Zeitpunkt hatten Naur, Hoare und Wirth die Anstrengungen hinterlassen, und einige weitere drohten dazu.[27] Es folgten einige weitere Treffen, North Berwick Im August 1968 erstellte München im Dezember die Veröffentlichung des offiziellen Berichts im Januar 1969, führte aber auch zu einem umstrittenen Minderheitenbericht. Endlich bei Banff, Alberta Im September 1969 wurde das Projekt im Allgemeinen als vollständig angesehen und die Diskussion lag in erster Linie auf Errata und eine stark erweiterte Einführung in den Bericht.[28]
Die Bemühungen dauerten fünf Jahre, brannten viele der größten Namen in aus Informatikund mehrmals wurden sowohl in der Definition als auch in der Gruppe als Ganzes über Probleme gestoppt. Hoare veröffentlichte fast sofort eine "Kritik von Algol 68",[29] auf das in vielen Werken weit verbreitet wurde. Wirth fuhr fort, das Algol -W -Konzept weiter zu entwickeln, und veröffentlichte dies 1970 als Pascal.
Implementierungen
Algol 68-R
Die erste Implementierung des Standards, basierend auf dem Entwurf des späten 1968, wurde von der eingeführt Royal Radar Establishment in Großbritannien als Algol 68-R im Juli 1970. Dies war jedoch eine Untergruppe der vollen Sprache, und Barry MaillouxDer letzte Herausgeber des Berichts scherzte: "Es ist eine Frage der Moral. Wir haben eine Bibel und Sie sündigen!"[30] Diese Version wurde dennoch sehr beliebt in der ICL Maschinen und wurden zu einer weit verbreiteten Sprache in der militärischen Codierung, insbesondere in Großbritannien.[31]
Zu den Änderungen in 68-R gehörte die Anforderung, dass alle Variablen vor ihrer ersten Verwendung deklariert werden. Dies hatte einen erheblichen Vorteil, dass der Compiler ein Pass sein konnte, als Platz für die Variablen in der Aktivierungsdatensatz wurde beiseite gelegt, bevor es verwendet wurde. Diese Änderung hatte jedoch auch den Nebeneffekt, das zu fordern ProcS zweimal, einmal als Deklaration der Typen und dann wieder als Codekörper deklariert werden. Eine weitere Änderung bestand darin, das angenommene zu beseitigen LEERE Modus, ein Ausdruck, der keinen Wert zurückgibt (benannt a Aussage in anderen Sprachen) und das Wort fordern LEERE dort hinzugefügt werden, wo es angenommen worden wäre. Darüber hinaus hat 68-R die explizite beseitigt Parallelverarbeitung Befehle basierend auf PAR.[30]
Andere
Die erste vollständige Umsetzung der Sprache wurde 1974 von CDC Niederlande für die eingeführt Steuerungsdaten Mainframe -Serie. Dies sah nur begrenzt gebraucht und unterrichtete hauptsächlich in Deutschland und den Niederlanden.[31]
Eine Version ähnlich 68-R wurde aus eingeführt Carnegie Mellon Universität 1976 als 68er und war wieder ein Einpass-Compiler, der auf verschiedenen Vereinfachungen des Originals basiert und für kleinere Maschinen wie die verwendet wurde DEC PDP-11. Es wurde auch hauptsächlich für Unterrichtszwecke verwendet.[31]
Eine Version für IBM Mainframes wurden erst 1978 verfügbar, als man entlassen wurde Universität von Cambridge. Dies war "fast vollständig". Lindsey veröffentlichte eine Version für kleine Maschinen einschließlich der IBM PC 1984.[31]
Es sind drei Open -Source -Algol 68 -Implementierungen bekannt:[32]
- a68g, GPLV3, geschrieben von Marcel van der Veer.
- Algol68toc, ein Quelloffene Software Port von Algol 68Rs.
- Experimentelle Algol68 Frontend für GCC, geschrieben von Jose E. Marchesi.[33]
Zeitleiste
Jahr | Vorfall | Mitwirkender |
---|---|---|
März 1959 | Algol Bulletin Ausgabe 1 (zuerst) | Peter Naur / ACM |
Februar 1968 | Berichtsentwurf(DR) Veröffentlicht[34] | Ifip Arbeitsgruppe 2.1 |
März 1968 | Algol 68 AbschlussberichtR0 Präsentiert bei München Meeting | IFIP Arbeitsgruppe 2.1 |
Juni 1968 | Treffen in Tirrenia, Italien | IFIP Arbeitsgruppe 2.1 |
August 1968 | Treffen in North Berwick, Schottland | IFIP Arbeitsgruppe 2.1 |
Dezember 1968 | Algol 68 AbschlussberichtR0 Präsentiert bei München Meeting | IFIP Arbeitsgruppe 2.1 |
April 1970 | Algol 68-R(R) unter GEORGE 3 auf an ICL 1907f | Königliche Signale und Radar Est. |
Juli 1970 | Algol 68 für die Dartmouth Time Sharing System[35][36] | Sidney Marshall |
September 1973 | Überarbeiteter Algol 68 -Bericht[37]R1 Veröffentlicht | IFIP Arbeitsgruppe 2.1 |
1975 | Algol 68c(C) - transportabler Compiler (ZCODE VM) | S. Bourne, Andrew Birrell und Michael Guy |
Juni 1975 | G. E. Hedrick und Alan Robertson. Der Subset Compiler des Oklahoma State Algol 68. 1975 Internationale Konferenz über Algol 68. | |
Juni 1977 | Strathclyde Algol 68 Konferenz, Schottland | ACM |
Mai 1978 | Vorschläge für Algol H - Eine Superliste von Algol 68[38] | A. P. Black, V. J. Rayward-Smith |
1984 | Voll Algol 68s(S) Compiler für Sonne, Sparc und PCs | C. H. Lindsey et al., Manchester |
August 1988 | Algol Bulletin Ausgabe 52 (zuletzt) | Ed. C. H. Lindsey / ACM |
Mai 1997 | Algol68 s(S) im Internet veröffentlicht[39] | Charles H. Lindsey |
November 2001 | Algol 68 Genie(G) im Internet veröffentlicht[40] (GNU GPL Open Source -Lizenzierung) | Marcel van der Veer |
Das algorithmische Sprachalgol 68 Berichte und Arbeitsgruppenmitglieder
- März 1968: Berichterstattung über das algorithmische Sprachalgol 68[41] - Bearbeitet von: Adriaan van Wijngaarden, Barry J. Mailloux, John Peck und Cornelis H. A. Koster.
"Van Wijngaarden charakterisierte einmal die vier Autoren, etwas sprechend, als: Koster: Bündel, Peck: Syntaxer, Mailloux: Implementierer, Van Wijngaarden: Party -Ideologe. " - Koster.
- Oktober 1968: Vorletzter Bericht über das algorithmische Sprachalgol 68-Kapitel 1-9[42] Kapitel 10-12[43] - Herausgegeben von: A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck und C. H. A. Koster.
- Dezember 1968: Bericht über das algorithmische Sprachalgol 68-Offprint von Numerische Mathematik, 14, 79-218 (1969); Springer-Verlag.[44] - Herausgegeben von: A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck und C. H. A. Koster.
- März 1970: Minderheitenbericht, Algol Bulletin AB31.1.1 - Unterzeichnet von durch Edsger Dijkstra, Fraser Duncan, Jan Garwick, Tony Hoare, Brian Randell, Gerhard Seegmüller, Wlad Turski und Mike Woodger.
- September 1973: Überarbeiteter Bericht über das algorithmische Sprachalgol 68-Springer-Verlag 1976[45] - Herausgegeben von: A. Van Wijngaarden, B. Mailloux, J. Peck, K. Koster, M. Sintzoff, C.H. Lindsey, Lambert Meertens und Richard G. Fisker.
- Andere WG 2.1 -Mitglieder, die im Algol 68 -Design aktiv sind:[18] Friedrich L. Bauer • Hans Bekic • Gerhard Goos • Peter Zilahy Ingerman • Peter Landin • Charles H. Lindsey • John McCarthy • Jack Merner • Peter Naur • Manfred Paul • • Willem van der Poel • Doug Ross • Klaus Samelson • Michel Sintzoff • Niklaus Wirth • Nobuo Yoneda.
Zeitleiste der Standardisierung
1968: Am 20. Dezember 1968 wurde der "Abschlussbericht" (MR 101) von der Arbeitsgruppe verabschiedet und anschließend von der Generalversammlung von genehmigt UNESCO's Ifip zur Veröffentlichung. Übersetzungen des Standards wurden gemacht für Russisch, Deutsch, Französisch und bulgarischund dann später japanisch und Chinesisch.[46] Der Standard wurde auch in verfügbar Blindenschrift.
1984: TC97 als Algol 68 für die Standardisierung als "neuer Arbeitselement" TC97/N1642 betrachtet [2][3]. Westdeutschland, Belgien, Niederlande, UdSSR und Tschechoslowakei, die bereit waren, an der Vorbereitung des Standards teilzunehmen, aber die UdSSR und die Tschechoslowakei "waren nicht die richtige Art von Mitglied der richtigen ISO -Komitees"[4] und Algol 68's ISO -Standardisierung staltest.[5]
1988: Anschließend wurde Algol 68 einer der der Gost Standards in Russland.
- GOST 27974-88 Programmiersprachalgol 68-язык прорарite вания алго 68[47]
- GOST 27975-88 Programmiersprache Algol 68 Erweitert-язык прораарov[48]
Bemerkenswerte Sprachelemente
Fette Symbole und reservierte Wörter
Die Standardsprache enthält ungefähr sechzig reservierte Wörter, die normalerweise in gedruckter Form fett gedruckt sind, und einige mit "kurzen Symbol" -Amäquivalenten:
MODUS, Op, PRIO, ProcAnwesendBIEGEN, HAUFEN, Loc, LANG, Ref, KURZAnwesendBits, Bool, Bytes, VERKOHLEN, Compl, Int, REAL, Sema, Saite, LEEREAnwesendKANAL, DATEI, FORMAT, Struktur, UNIONAnwesendBEI "@", ENTWEDERR0, IST ": =:", Nicht ist nichtR0 ":/=:" ": ≠:",, VON "→"R0, STIMMT, FALSCH, LEER, NULL "○", ÜBERSPRINGEN "~",CO "¢", KOMMENTAR "¢", Pr, PragmatAnwesendFALL ~ IN ~ Ouse ~ IN ~ AUS ~ ESAC "(~ | ~ |: ~ | ~ | ~)",ZUM ~ AUS ~ ZU ~ DURCH ~ WÄHREND ~ TUN ~ OdAnwesendWENN ~ DANN ~ Elif ~ DANN ~ ANDERS ~ Fi "(~ | ~ |: ~ | ~ | ~)",PAR START ~ ENDE "(~)", gehe zu, GEHE ZU, AUSFAHRT "."R0.
Einheiten: Ausdrücke
Das grundlegende Sprachkonstrukt ist das Einheit. Eine Einheit kann a sein Formel, ein beigefügte Klausel, a Routinetext oder eines von mehreren technisch benötigten Konstrukten (Zuordnung, Sprung, Überspringen, Nihil). Der technische Begriff beigefügte Klausel vereint einige der inhärent klammernden Konstrukte, die als bekannt als Block, Aussage machen, Schaltanweisung in anderen zeitgenössischen Sprachen. Wenn Schlüsselwörter verwendet werden, wird im Allgemeinen die umgekehrte Zeichensequenz des einführenden Schlüsselworts zum Beenden des Gehäuses verwendet, z. ( WENN ~ DANN ~ ANDERS ~ Fi, FALL ~ IN ~ AUS ~ ESAC, ZUM ~ WÄHREND ~ TUN ~ Od ). Dies Schutzbefehl Syntax wurde von wiederverwendet von Stephen Bourne im gemeinsamen Unix Bourne Shell. Ein Ausdruck kann auch a liefern a Mehrfachwert, was aus anderen Werten durch a konstruiert wird Sicherheitenklausel. Dieses Konstrukt sieht nur aus wie das Parameterpaket eines Prozeduraufrufs.
Modus: Deklarationen
Das Basis Datentypen (genannt Modus
s in Algol 68 Sprachgebrauch) sind real
, int
, Compl
(komplexe Zahl), bool
, verkohlen
, Bits
und Bytes
. Zum Beispiel:
Int n = 2;CO n ist als Konstante von 2 festgelegt. CO Int M: = 3;CO M ist ein neu erstellter lokaler Variable deren Wert zunächst auf 3 eingestellt ist. CO CO Dies ist kurz für Ref int m = loc int: = 3; CO REAL avogadro = 6.0221415⏨23; CO Avogadro -Nummer CO Long Long Real Long langes PI = 3,14159 26535 89793 23846 26433 83279 50288 41971 69399 37510;Compl Quadratwurzel von minus eins = 0 ⊥ 1;
Die Erklärung Echt x;
ist nur syntethischer Zucker zum Ref Real x = loc real;
. Das ist, x
ist wirklich der Konstante Kennung Für ein Bezug auf ein neu erzeugter lokaler REAL Variable.
Darüber hinaus anstatt beide zu definieren schweben
und doppelt
, oder int
und lang
und kurz
usw., Algol 68 liefert Modifikatorenso, dass die derzeit gemeinsam doppelt
würde geschrieben sein als LANG REAL oder LANG LANG REAL Stattdessen zum Beispiel. Das Vorspielkonstanten Max Real
und min lang int
werden bereitgestellt, um Programme an verschiedene Implementierungen anzupassen.
Alle Variablen müssen deklariert werden, aber die Deklaration muss der ersten Verwendung nicht vorausgehen.
Primitive-Declarer: Int, REAL, Compl, KOMPLEXG, Bool, VERKOHLEN, Saite, Bits, Bytes, FORMAT, DATEI, ROHRG, KANAL, Sema
- Bits - ein "verpackter Vektor" von Bool.
- Bytes - ein "verpackter Vektor" von VERKOHLEN.
- Saite - a BIEGENIble Array von VERKOHLEN.
- Sema - a SemaPhore die mit dem initialisiert werden können OpErator EBEN.
Komplexe Typen können aus einfacheren mit verschiedenen Typkonstruktoren erstellt werden:
- Ref Modus - Ein Hinweis auf einen Wert des Typs Modus, ähnlich zu & in c/c ++ und Ref in Pascal
- Struktur - verwendet, um Strukturen zu bauen, wie Struktur in c/c ++ und AUFZEICHNUNG in Pascal
- UNION - Wird verwendet, um Gewerkschaften zu bauen, wie in C/C ++ und Pascal
- Proc - Wird verwendet, um Verfahren wie Funktionen in C/C ++ und Verfahren/Funktionen in Pascal anzugeben
Für einige Beispiele siehe Vergleich von Algol 68 und C ++.
Andere Deklarationssymbole sind: BIEGEN, HAUFEN, Loc, Ref, LANG, KURZ, VERANSTALTUNGS
- BIEGEN - Deklarieren Sie das Array als flexibel, d. H. Es kann bei Bedarf an Länge wachsen.
- HAUFEN - Zeigen Sie einen Variablen aus dem globalen Haufen.
- Loc - Zügen Sie einen Variablen zu einem freien Speicherplatz des lokalen Stapels.
- LANG - deklarieren Sie ein Int, REAL oder Compl von a sein LANGER -Größe.
- KURZ - deklarieren Sie ein Int, REAL oder Compl von a sein KURZER -Größe.
Ein Name für einen Modus (Typ) kann mit a deklariert werden MODUS Erklärung, die ähnlich ist wie Typedef in c/c ++ und TYP in Pascal:
Int max = 99; MODUS newMode = [0: 9] [0: max]Struktur ( LANG REAL a, b, c, KURZ Int i, j, k, Ref REAL r );
Dies ähnelt dem folgenden C -Code:
Const int Max=99; Typedef Struktur { doppelt a, b, c; kurz i, j, k; schweben *r; } NEWMODE[9+1][Max+1];
Für Algol 68 nur die NEWMODE Die Modusindication erscheint links vom gleichem Symbol, und vor allem wird die Konstruktion ohne Rücksicht auf Prioritäten von links nach rechts gelesen und gelesen werden. Auch die Untergrenze von Algol 68 Arrays ist standardmäßig eine, kann aber jede ganze Zahl von - seinMax int zu Max int.
Moduserklärungen ermöglichen es, Typen zu sein rekursiv: direkt oder indirekt in Bezug auf sich selbst definiert. Dies unterliegt einige Einschränkungen - zum Beispiel sind diese Erklärungen illegal:
MODUS A = Ref A MODUS A = Struktur (A a, B b) MODUS A = Proc (A a) A
Während diese gültig sind:
MODUS A = Struktur (Ref A a, B b) MODUS A = Proc (Ref A a) Ref A
Zwang: Casting
Das Zwang Erstellen Sie einen Zwang aus einem Zwang nach drei Kriterien: dem a priori -Modus des Zwangs vor der Anwendung eines Zwangs, des A -posteriori -Modus des Zwangs, der nach diesen Zwang und die syntaktische Position oder "Sortierung" des Zwangs erforderlich ist. Zwang können kaskadiert werden.
Die sechs möglichen Zwang werden bezeichnet Deaktivierung, Derference, Vereinigung, Erweiterung, Rudern, und ungehindert. Jeden Zwang außer auf Vereinigungschreibt einen entsprechenden dynamischen Effekt auf die zugehörigen Werte vor. Daher können viele primitive Handlungen implizit durch Zwang programmiert werden.
Kontextstärke - Ermöglichte Zwang:
- weich - Deaktivierung
- schwach - Dereferenzierung oder Entschuldung, ergibt einen Namen
- Sanftmut - Dereferencing oder Deaktivierung
- fest - sanftmütig, gefolgt von Vereinigung
- stark - fest, gefolgt von Verbreiterung, Rudern oder Entleerung
Zwangshierarchie mit Beispielen
Algol 68 verfügt über eine Hierarchie von Kontexten, die die Art von Zwang bestimmen, die zu einem bestimmten Punkt im Programm verfügbar sind. Diese Kontexte sind:
Kontextstandort | Zwang verfügbar | COCERN -Beispiele im Kontext | ||||
---|---|---|---|---|---|---|
Rechte Seite von:
Ebenfalls:
| Die Erweiterung tritt auf, wenn kein Präzisionsverlust vorliegt. Zum Beispiel: a Int wird zu a gezwungen REAL, und ein REAL wird zu a gezwungen LANG REAL. Aber nicht umgekehrt. Beispiele:
Eine Variable kann auch zu einem Array von Länge 1 gezwungen (Rudern) gezwungen werden. Zum Beispiel:
| |||||
| Beispiel:
| |||||
| Beispiele:
| |||||
| Beispiele:
| |||||
Die LHS der Aufgaben, als "~" in: ~: = ... | Beispiel:
|
Weitere Informationen zu Vorwahlen, Sekundärs, Tertiär- und Quaternaries beziehen sich auf Vorrang.
PR & CO: Pragmats und Kommentare
Pragmats sind Richtlinien Im Programm weist normalerweise auf den Compiler hin. In neueren Sprachen werden diese "Pragmas" genannt (nein 't'). z.B.
Pragmat Heap = 32 Pragmat Pr Heap = 32 Pr
Kommentare können auf verschiedene Arten eingefügt werden:
¢ Die ursprüngliche Methode zum Hinzufügen Ihrer 2 Cent zu einem Programm ¢ ¢KOMMENTAR "mutiger" Kommentar KOMMENTAR CO Stil, den ich kommentiere CO# Style II -Kommentar # £ Dies ist ein Hash/Pfund -Kommentar für eine britische Tastatur £ £
Normalerweise können Kommentare nicht in Algol 68 verschachtelt werden. Diese Einschränkung kann durch Verwendung verschiedener Kommentargrenzwerte umgangen werden (z. B. Hash nur für temporäre Code -Löschung verwenden).
Ausdrücke und zusammengesetzte Aussagen
Algol 68 ist ein Expression-orientierte Programmiersprache, der Wert, der von einem zurückgegeben wird Abtretung Die Anweisung ist ein Verweis auf das Ziel. Das Folgende ist daher ein gültiger Algol 68 -Code:
REAL halb pi, ein pi; ein Pi: = 2 * (halbe PI: = 2 * ARC TAN (1))
Dieser Begriff ist in vorhanden C und Perl, unter anderen. Beachten Sie, dass wie in früheren Sprachen wie z. Algol 60 und Forran, Räume sind in Identifikatoren erlaubt, damit das halb pi
ist ein Single Kennung (so vermeiden unterstreicht gegen Kamelfall gegen alles klein geschrieben Ausgaben).
Als ein weiteres Beispiel, um die mathematische Idee von a auszudrücken Summe von f (i)
von i = 1 bis n, das folgende Algol 68 ganzzahliger Ausdruck reicht aus:
(Int Summe: = 0; ZUM i ZU n TUN sum +: = f (i) Od; Summe)
Beachten Jeder Kontext, in dem ein Ganzzahlwert verwendet werden kann. Ein Codeblock gibt den Wert des zuletzt bewerteten Ausdrucks zurück. Diese Idee ist in vorhanden Lispelnunter anderen Sprachen.
Verbindungsaussagen werden alle durch charakteristische Schlussklammern beendet:
- WENN Auswahlklauseln:
WENN Bedingung DANN Aussagen [ ANDERS Aussagen] Fi "Kurze" Form: (Bedingung | Anweisungen | Anweisungen)
WENN Bedingung1 DANN Aussagen Elif Bedingung2 DANN Aussagen [ ANDERS Aussagen] Fi "Kurze" Form: (Bedingung1 | Anweisungen |: Bedingung2 | Anweisungen | Anweisungen)
Dieses Schema vermeidet nicht nur das sonst baumeln Problem, aber auch vermeiden, verwenden zu müssen START
und ENDE
in eingebettet Aussage Sequenzen.
- FALL Auswahlklauseln:
FALL Schalter IN Aussagen, Aussagen, ... [ AUS Aussagen] ESAC "Kurze" Form: (Switch | Anweisungen, Anweisungen, ... | Anweisungen)
FALL Switch1 IN Aussagen, Aussagen, ... Ouse Switch2 IN Aussagen, Aussagen, ... [ AUS Aussagen] ESAC "kurze" Form von FALL Anweisung: (Switch1 | Anweisungen, Anweisungen, ... |: Switch2 | Anweisungen, Anweisungen, ... | Anweisungen)
Auswahlklausel Beispiel mit Knapp Symbole:
Proc Tage im Monat = ((Int Jahr Monat)Int: (Monat | 31, (Jahr ÷ × 4 = 0 ∧ Jahr ÷ × 100 ≠ 0 ∨ Jahr ÷ × 400 = 0 | 29 | 28), 31, 30, 31, 30, 31, 31, 30, 31, 30 31);
Auswahlklausel Beispiel mit Fett gedruckt Symbole:
Proc Tage im Monat = ((Int Jahr Monat)Int: FALL Monat IN 31, WENN Jahr Mod 4 Gl 0 UND Jahr Mod 100 Ne 0 ODER Jahr Mod 400 Gl 0 DANN 29 ANDERS 28 Fi, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ESAC;
Auswahlklausel Beispielmischung Fett gedruckt und Knapp Symbole:
Proc Tage im Monat = ((Int Jahr Monat)Int: FALL Monat IN ¢ Jan ¢ 31, ¢ Feb ¢ (Jahr Mod 4 = 0 UND Jahr Mod 100 ≠ 0 ODER Jahr Mod 400 = 0 | 29 | 28), ¢ Mar ¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ bis Dez. ¢ ¢ ESAC;
Algol68 erlaubte den Schalter von beiden Typen Int oder (einzigartig) UNION. Letzteres ermöglicht die Durchsetzung Starke Typisierung auf zu UNION Variablen. C.F. Union unten unten.
- tun Schleifenklausel:
[ ZUM Index ] [ AUS Erste ] [ DURCH Zuwachs ] [ ZU letzte ] [ WÄHREND Bedingung ] TUN Aussagen Od Die minimale Form einer "Schleifenklausel" lautet also: TUN Aussagen Od
Dies wurde berücksichtigt das "Universelle" Schleife, die vollständige Syntax ist:
ZUM i AUS 1 DURCH -22 ZU -333 WÄHREND i × i ≠ 4444 TUN ~ Od
Das Konstrukt hat mehrere ungewöhnliche Aspekte:
- nur der TUN ~ Od Der Teil war obligatorisch, in diesem Fall wird die Schleife auf unbestimmte Zeit itert.
- So die Klausel ZU 100 TUN ~ Od, wird nur 100 Mal iterieren.
- das WÄHREND "Syntaktisches Element" erlaubte einem Programmierer, von a zu brechen ZUM Schleife früh. z.B.
Int Sum SQ: = 0;ZUM ichWÄHREND print (("so weit:", ich, newline)); Sum SQ ≠ 70 ↑ 2TUN Sum SQ+: = i ↑ 2Od
Nachfolgende "Erweiterungen" zum Standard -Algol68 erlaubten das ZU syntaktisches Element, das durch ersetzt werden muss BIS ZU und BIS ZU eine kleine Optimierung zu erreichen. Dieselben Compiler haben ebenfalls eingebaut:
- BIS UM(C) - Für die Kündigung der späten Schleife.
- FÜR JEDEN(S) - für die Arbeit an Arrays in parallel.
Weitere Beispiele finden Sie in den folgenden Codebeispielen.
Struktur, Union & [:]
: Strukturen, Gewerkschaften und Arrays
Algol 68 unterstützt Arrays mit einer beliebigen Anzahl von Dimensionen, und es ermöglicht die Schneiden von ganzen oder partiellen Zeilen oder Spalten.
MODUS VEKTOR = [1: 3] REAL; # Vektor MODUS Deklaration (Typedef) # MODUS MATRIX = [1: 3,1: 3]REAL; # Matrix MODUS Deklaration (Typedef) # VEKTOR v1: = (1,2,3); # Array Variable anfangs (1,2,3) # []REAL V2 = (4,5,6); # Konstantes Array, Typäquivalent zu VEKTOR, Grenzen sind impliziert # Op + = ((VEKTOR a, b) VEKTOR: # Binär OpErator -Definition # (VEKTOR aus; ZUM i AUS ⌊a ZU ⌈a TUN out [i]: = a [i]+b [i] Od; aus); MATRIX m: = (v1, v2, v1+v2); print ((m [, 2:])); # Eine Scheibe der 2. und 3. Spalten #
Matrizen können in beiden Fällen geschnitten werden, z. B.:
Ref VEKTOR row = m [2,]; # Definieren Sie a Ref (Zeiger) zur 2. Zeile # Ref VEKTOR col = m [, 2]; # Definieren Sie a Ref (Zeiger) zur 2. Spalte #
Algol 68 unterstützt mehrere Feldstrukturen (Struktur) und Vereinigte Modi. Referenzvariablen können auf jeden verweisen MODUS einschließlich Array -Scheiben und Strukturfelder.
Für ein Beispiel für all dies finden Sie hier die traditionelle Deklaration mit verknüpfter Liste:
MODUS KNOTEN = UNION (LEERE, REAL, Int, Compl, Saite), AUFFÜHREN = Struktur (KNOTEN Val, Ref AUFFÜHREN nächste);
Verwendungsbeispiel für UNION FALL von KNOTEN:
Algol68R0 Wie im Abschlussbericht von 1968 | Algol68R1 Wie im überarbeiteten Bericht von 1973 |
---|---|
KNOTEN N: = "1234"; REAL r; Int ich; Compl c; Saite s FALL r, i, c, s :: = n IN print (("real:", r)), print (("int:", i)), drucken (("compl:", c)), print (("String:", s)) AUS print (("?:", n)) ESAC | KNOTEN N: = "1234"; # oder n: = leer; # FALL n IN (LEERE): print (("void:", "leer")), (REAL r): print (("real:", r)), (Int i): print (("int:", i)), (Compl c): print (("compl:", c)), (Saite s): print (("String:", s)) AUS print (("?:", n)) ESAC |
Proc: Verfahren
Verfahren (Proc) Deklarationen erfordern Typspezifikationen sowohl für die Parameter als auch für das Ergebnis (Ergebnis (LEERE wenn keine):
Proc maximal von real = (REAL a, b) REAL: WENN a> b DANN a ANDERS b Fi;
Oder unter Verwendung der "kurzen" Form der bedingten Aussage:
Proc maximal von real = (REAL a, b) REAL: (a> b | a | b);
Der Rückgabewert von a Proc
ist der Wert des letzten Ausdrucks im Verfahren bewertet. Verweise auf Verfahren (Ref Proc) sind auch erlaubt. Call-by-Reference Parameter werden durch Angabe von Referenzen bereitgestellt (z. Ref Real
) in der formalen Argumentationsliste. Das folgende Beispiel definiert eine Prozedur, die eine Funktion (als Parameter angegeben) für jedes Element eines Arrays anwendet:
Proc anwenden = ((Ref [] REAL a, Proc (REAL) REAL f): ZUM i AUS LWB a ZU UPB a TUN a [i]: = f (a [i]) Od
Diese Einfachheit des Code war im Vorgänger von Algol 68 unerreichbar Algol 60.
OP: Operatoren
Der Programmierer kann neu definieren Betreiber und beide diese und die vordefinierten können sein überladen und ihre Prioritäten können vom Coder geändert werden. Das folgende Beispiel definiert den Operator Max
mit dyadischen und monadischen Versionen (Scannen über die Elemente eines Arrays).
PRIO Max = 9; Op Max = (Int a, b) Int: (a> b | a | b); Op Max = (REAL a, b) REAL: (a> b | a | b); Op Max = (Compl a, b) Compl: ( Abs a> Abs B | a | b ); Op Max = ([]REAL a) REAL: (REAL out: = a [LWB a]; ZUM i AUS LWB A + 1 ZU UPB a TUN (a [i]> out | out: = a [i]) Od; aus)
Array, Verfahren, Dereferenz- und Zwangsoperationen
PRIORität | Betrieb R0&R1 | +Algol68R0 | +Algol68G |
---|---|---|---|
Effektiv 12 (Primär) | Derercencing, depressieren (~, ~), Abonnement [~], Rudern [~,], schneiden [~: ~], Größenbezeichnungen LANG & KURZ | Verfahren | Currying (~ ,,,), Diag, Trnsp, DIE ZEILE, Col |
Effektiv 11 (Sekundär) | VON (Auswahl), Loc & HAUFEN (Generatoren) | → (Auswahl) | NEU (Generatoren) |
Dies sind technisch nicht Operatoren, sondern sie werden als sie betrachtet “mit Namen verbundene Einheiten"
Monadische Operatoren
PRIORität (Tertiär) | Algol68 "würdige Charaktere[6]"R0&R1 | +Algol68R0&R1 | +Algol68C, g | +Algol68R0 |
---|---|---|---|---|
10 | NICHT ~, HOCH, NIEDER, LWB, UPBAnwesend -,, Abs, Arg, BEHÄLTER, Vorhanden, Leng, EBEN, SELTSAM, Reprieren, RUNDEN, VERKÜRZEN | ¬, ↑, ↓, ⌊, ⌈ | NORM, VERFOLGEN, T, Det, Inv | LWS, UPS, ⎩, ⎧,, BTB, CTB |
Dyadische Operatoren mit damit verbundenen Prioritäten
PRIORität (Tertiär) | Algol68 "würdige Charaktere"R0&R1 | +Algol68R0&R1 | +Algol68C, g | +Algol68R0 |
---|---|---|---|---|
9 | +*, I | +×, ⊥ | ! | |
8 | Shl, Shr, **, HOCH, NIEDER, LWB, UPB | ↑, ↓, ⌊, ⌈ | × x, ^,, LWS, UPS, ⎩, ⎧ | |
7 | *, /,%, ÜBER,%*, Mod, Elem | ×, ÷, ÷ ×, ÷*,%×, □ | ÷: | |
6 | -, + | |||
5 | <, Lt, <=, Le,> =, Ge,>, Gt | ≤, ≥ | ||
4 | Gl =, Ne ~ = /= | ≠ ¬ = | ||
3 | &,, UND | ∧ | /\ | |
2 | ODER | ∨ | \/ | |
1 | Minusab, Plusab, Timesab, Divab, Überab, Modab, PlustoAnwesend -: =, +: =, *: =, /: =,%: =,% *: =, +=: | ×: =, ÷: =, ÷ ×: =, ÷*: =,%×: = | MINUS, PLUS, Div, Overb, Modb, ÷ :: =, PRUS |
Spezifische Details:
- Tertariare enthalten Namen NULL und ○.
- LWS: In Algol68R0 die Betreiber LWS und ⎩ ... beide kehren zurück STIMMT Wenn die niedrigerer Zustand der Dimension eines Arrays ist festgelegt.
- Das UPS und ⎧ Operatoren sind ähnlich auf der oberer Zustand.
- Das LWB und UPB Die Betreiber sind automatisch verfügbar UNIONs von verschiedenen Bestellungen (und MODUSs) von Arrays. z.B. UPB von Union ([] int, [,] Real, Flex [,,] Char)
Zuordnung und Identitätsbeziehungen usw.
Dies sind technisch nicht Operatoren, sondern sie werden als sie betrachtet “mit Namen verbundene Einheiten"
PRIORität (Quaternaries) | Algol68 "würdige Charaktere"R0&R1 | +Algol68R0&R1 | +Algol68C, g, r | +Algol68R0 |
---|---|---|---|---|
Effektiv 0 | : =, IST: = :, Nicht:/= :: ~ = :, BEI @, ":", ";" | : ≠ :: ¬ =: | : =: =C, =: =R | .. =,. =, Ct, ::, CTAB, :: =, ..,, ist nicht, "..", "." |
Hinweis: Quaternäre enthalten Namen ÜBERSPRINGEN und ~.
": =:" (Alternativ "IST") Tests, wenn zwei Zeiger gleich sind;":/=: "(Alternativ"Nicht") Tests, wenn sie ungleich sind.
Warum: =: und:/=: werden benötigt: Überlegen Sie, ob Sie zwei Zeigerwerte vergleichen können, z.
Ref int IP, JP
Überlegen Sie nun, wie Sie entscheiden können, ob diese beiden auf denselben Ort zeigen oder ob einer von ihnen zeigt NULL. Der folgende Ausdruck
IP = JP
Wird beide Hinweise auf Werte des Typs herabgesetzt Intund vergleichen Sie diese, da der Operator "=" für definiert ist für Int, aber nicht Ref Int. es ist nicht legal zu definieren "=" für Operanden vom Typ Ref Int und Int Gleichzeitig, da Anrufe aufgrund der impliziten Zwang, die angewendet werden können Ref Int Und diese Version des Bedieners angerufen? Oder sollten sie weiter gelernt werden zu Int Und diese Version verwendet stattdessen? Daher kann der folgende Ausdruck niemals legal gemacht werden:
ip = nil
Daher ist die Notwendigkeit separater Konstrukte, die nicht den normalen Zwangsregeln für Operanden für Operatoren unterliegen. Aber es gibt einen Gotcha. Die folgenden Ausdrücke:
IP: =: JP
IP: =: nil
Obwohl es legal ist, wird es wahrscheinlich nicht tun, was zu erwarten ist. Sie werden immer zurückkehren FALSCH, weil sie das vergleichen Tatsächliche Adressen der Variablen IP
und JP
eher auf das, worauf sie hinweisen. Um den richtigen Effekt zu erzielen, müsste man schreiben
IP: =: Ref int (JP)
IP: =: ref int (nil)
Spezielle Charaktere
Der größte Teil der "speziellen" Zeichen von Algol (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ und □) können auf der gefunden werden IBM 2741 Tastatur mit dem Apl "Golfball" Druckkopf eingefügt; Diese wurden Mitte der 1960er Jahre erhältlich, während Algol 68 eingezogen wurde. Diese Charaktere sind auch Teil der Unicode Standard und die meisten von ihnen sind in mehreren beliebten erhältlich Schriftarten.
Transport: Eingang und Ausgang
Transport Wird der Begriff verwendet, der sich auf die Eingangs- und Ausgangsanlagen von Algol 68 bezieht. Es enthält vordefinierte Verfahren für nicht formatierte, formatierte und binäre Unterschiede. Dateien und andere Transport-Geräte werden konsistent und maschinenunabhängig behandelt. Das folgende Beispiel druckt eine nicht formatierte Ausgabe in die aus Standardausgabe Gerät:
print ((Newpage, "Titel", Newline, "Wert von I is", i, "und x [i] is", x [i], Newline))
Beachten Sie die vordefinierten Verfahren neue Seite
und Neue Zeile
als Argumente bestanden.
Bücher, Kanäle und Dateien
Das Transport gilt als von BÜCHER, Kanäle und Dateien:
- Bücher bestehen aus Seiten, Zeilen und Zeichen und können durch Dateien gesichert werden.
- Ein bestimmtes Buch kann namentlich mit einem Anruf an gefunden werden
passen
.
- Ein bestimmtes Buch kann namentlich mit einem Anruf an gefunden werden
- KANALs entsprechen physischen Geräten. z.B. Kartenschläge und Drucker.
- Drei Standardkanäle werden unterschieden: drin stehen Kanal, auffallen Kanal, treten Sie zurück Kanal.
- A DATEI ist ein Mittel zur Kommunikation zwischen einem Programm und einem Buch, das über einen Kanal geöffnet wurde.
- Das STIMMUNG einer Datei kann gelesen, schreiben, char, bin und geöffnet werden.
- Zu den zuquerischen Verfahren gehören:
etablieren, erstellen, öffnen, assoziieren, sperren, schließen, kratzen
. - Positionsanfragen:
Zeichennummer, Zeilennummer, Seitennummer
. - Layout -Routinen umfassen:
-
Platz
,Rücktaste
,Neue Zeile
,neue Seite
. -
Holen Sie sich eine gute Linie, holen Sie sich eine gute Seite, holen Sie sich gutes Buch
, undProc set = (Ref -Datei F, int Seite, Zeile, Zeichen) Leere:
-
- Eine Datei hat Ereignisroutinen. z.B.
am Ende der logischen Datei, am Ende der physischen Datei, am Ende des Seitenende, On -Line -Ende, am Formatende, auf Wertfehler, auf Zeichenfehler
.
formatiertes Unterschied
"Formatiertes Transport" im Algol 68 -Betrieb FORMATs zwischen zwei $ Zeichen eingebettet.[49]
Beispiele:
printf (($ 2l "Die Summe lautet:" x, g (0) $, m + n)); ¢ druckt dasselbe wie: ¢ print ((neue Zeile, neue Zeile, "Die Summe ist:", Raum, ganz (M + n, 0)).
Par: Parallele Verarbeitung
Algol 68 Unterstützt die Programmierung der parallelen Verarbeitung. Verwenden des Schlüsselworts PAR, a Sicherheitenklausel wird in a konvertiert Parallelklausel, wo die Synchronisation von Aktionen verwendet wird Semaphoren. In A68G werden die parallele Aktionen auf Threads abgebildet, wenn sie im Hosting verfügbar sind Betriebssystem. In A68 wurde ein anderes Paradigma der parallelen Verarbeitung implementiert (siehe unten).
Proc essen = LEERE: (Muffins-: = 1; print (("Yum!", New Line))), sprechen = LEERE: (Wörter-: = 1; print (("yak ...", neue Zeile)));Int Muffins: = 4, Wörter: = 8;Sema Mund = EBEN 1;PAR START WÄHREND Muffins> 0 TUN NIEDER Mund; Essen; HOCH Mund OdAnwesend WÄHREND Wörter> 0 TUN NIEDER Mund; sprechen; HOCH Mund Od ENDE
Beispiele für die Verwendung
Code Beispiel
Dieses Beispielprogramm implementiert die Sieb von Eratosthenes um alle zu finden Primzahlen das sind weniger als 100. NULL ist das Algol 68 Analog der Null Zeiger in anderen Sprachen. Die Notation x VON y Zugriff auf ein Mitglied x von a Struktur y.
START # Algol-68 Primzahl Sieb, funktionaler Stil # Proc Fehler = ((Saite s) LEERE: (print ((newline, "error:", s, newline)); GEHE ZU Pause); Proc eins zu = ((Int n) AUFFÜHREN: (Proc f = ((Int m, n) AUFFÜHREN: (m> n | NULL | Nachteile (m, f (m+1, n))); f (1, n)); MODUS AUFFÜHREN = Ref KNOTEN; MODUS KNOTEN = Struktur (Int h, AUFFÜHREN t); Proc cons = ((Int n, AUFFÜHREN l) AUFFÜHREN: HAUFEN KNOTEN: = (n, l); Proc hd = (AUFFÜHREN l) Int: (l IST NULL | Fehler ("HD NULL"); ÜBERSPRINGEN | h VON l); Proc tl = ((AUFFÜHREN l) AUFFÜHREN: (l IST NULL | Fehler ("TL NULL"); ÜBERSPRINGEN | t VON l); Proc Show = ((AUFFÜHREN l) LEERE: (l Nicht NULL | DRUCKEN(("", ganz (hd (l), 0))); Show (tl (l))); Proc filter = (Proc (Int) Bool p, AUFFÜHREN l) AUFFÜHREN: WENN l IST NULL DANN NULL Elif P (HD (l)) DANN Nachteile (HD (l), Filter (p, tl (l))) ANDERS Filter (p, tl (l)) Fi; Proc Sieb = ((AUFFÜHREN l) AUFFÜHREN: WENN l IST NULL DANN NULL ANDERS Proc nicht multiple = ((Int n) Bool: n Mod hd (l) ≠ 0; Nachteile (HD (l), Sieb (Filter (nicht mehrfache, tl (l)))) Fi; Proc Primes = ((Int n) AUFFÜHREN: Sieb (tl (eins zu (n))); Show (Primes (100))ENDE
Betriebssysteme in Algol 68 geschrieben
- Cambridge Cap Computer - Alle Verfahren, die das Betriebssystem ausmachen, wurden geschrieben Algol 68c, obwohl mehrere andere eng assoziierte geschützte Verfahren wie ein Paginator geschrieben sind BCPL.[50]
- Eldon 3 - entwickelt bei Leeds University für die ICL 1900 wurde geschrieben Algol 68-R.[51]
- Flexmaschine - Die Hardware war kundenspezifisch und mikroprogrammierbar, mit einem Betriebssystem, einem (modularen) Compiler, Editor, Müllsammler und einem Einreichungssystem in allen geschrieben Algol 68Rs. Der Befehlsschale Curt[52] wurde entwickelt, um typisierte Daten ähnlich wie die Algol-68-Modi.
- Vme – S3 war die Implementierungssprache der Betriebssystem Vme. S3 basierte auf Algol 68, aber mit Datentypen und Betreibern, die auf die von der angebotenen Angaben ausgerichtet waren ICL 2900 -Serie.
HINWEIS: Die Computer der sowjetischen Ära Эльбрус-1 (Elbrus-1) und эээббруches-2 wurden unter Verwendung von Sprachen auf hoher Ebene эль-76 (Al-76) und nicht unter der traditionellen Montage erstellt. Эль-76 ähnelt Algol-68, der Hauptunterschied sind die dynamischen Bindungstypen in ээ--76, die auf Hardwareebene unterstützt werden. Эль-76 wird für Anwendung, Jobsteuerung und Systemprogrammierung verwendet.[53]
Anwendungen
Beide Algol 68c und Algol 68-R sind in Algol 68 geschrieben, was Algol 68 effektiv zu einer Anwendung von sich selbst macht. Andere Anwendungen umfassen:
- Ella - Eine Hardware -Beschreibung Sprache und Support Toolset. Entwickelt von der Königliche Signale und Radareinrichtung In den 1980er und 1990er Jahren.
- RAF Strike Command System-"... 400 k. fehlerfrei Algol 68-RT Der Code wurde mit drei Mannjahren Arbeit produziert. ... "[54]
Bibliotheken und APIs
- Nag numerische Bibliotheken - a Softwarebibliothek von numerische Analyse Routinen. Lieferung in Algol 68 in den 1980er Jahren.
- Torrix - Ein Programmiersystem für Operationen auf Vektoren und Matrizen über willkürliche Felder und von variabler Größe von S. G. van der Meulen und M. Veldhorst.[55]
Programmdarstellung
Ein Merkmal von Algol 68, geerbt von der Algol Tradition ist ihre unterschiedlichen Darstellungen. Da ist ein Repräsentationssprache Wird verwendet, um Algorithmen in gedruckten Arbeiten zu beschreiben, a strenge Sprache (im Bericht streng definiert) und ein Beamter Referenzsprache in dem Compiler -Eingang verwendet werden. Die Beispiele enthalten FETT GEDRUCKT Schriftwörter, das ist das STRIKT Sprache. Die reservierten Wörter von Algol 68 sind effektiv in einem anderen Namespace Aus Kennungen und Räumen sind in Kennungen erlaubt, daher ist dieses nächste Fragment legal:
Int ein echtes int = 3;
Der Programmierer, der ausführbarer Code schreibt, hat nicht immer eine Option von FETT GEDRUCKT Schriftart oder unterstreichen In dem Code, da dies von Hardware und kulturellen Problemen abhängt. Es wurden verschiedene Methoden zur Bezeichnung dieser Kennungen entwickelt. Dies wird a genannt Stropping Regime. Zum Beispiel können alle oder einige der folgenden Aussagen verfügbar sein Programmierdarstellungen:
Int ein echtes int = 3; # das STRIKT Sprache # 'int'a Real int = 3; # Zitat Stropping -Stil # .Int a echtes int = 3; # Point Stropping Style # int a echte int = 3; # Oberer Stropping -Stil # int a_real_int = 3; # Res Stropping -Stil, es gibt 61 akzeptierte reservierte Wörter # #
Alle Implementierungen müssen in Pragmat -Abschnitten mindestens Punkt, Ober und RES erkennen. Von diesen sind Punkte und oberes Stropping weit verbreitet, während das Stroping der Spezifikation ein Widerspruch ist (da es keine reservierten Wörter gibt). Das Zitat (einzelne Apostrophe -Zitat) war die ursprüngliche Empfehlung, während in Algol 68 nicht viel in Algol 60 häufig verwendet wird, während das Apostrophe -Zitat häufig verwendet wird.[56]
Die folgenden Zeichen wurden für die Portabilität empfohlen und als "würdige Charaktere" bezeichnet Bericht über die Standard -Hardware -Darstellung von Algol 68 Archiviert 2014-01-02 bei der Wayback -Maschine:
- ^ Würdige Zeichen: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'()*+,-./:; <=>@[] _ |
Dies spiegelte ein Problem in den 1960er Jahren wider, bei dem einige Hardware weder niedrigerer Fall noch andere Nicht-Nicht-Nicht-Fall unterstützt habenASCII Charaktere, in der Tat im Bericht von 1973 wurde geschrieben: "Vier würdige Zeichen -" | "," _ "," ["und"] " - werden oft unterschiedlich codiert, selbst bei Installationen, die nominell denselben Zeichen verwenden."
- Basisfiguren: "Worthy Charaktere" sind eine Teilmenge von "Basiszeichen".
Beispiel für verschiedene Programmdarstellungen
Darstellung | Code |
---|---|
Algol68 "streng" Wie normalerweise veröffentlicht | ¢ unterstreichen oder fettes Schrift ¢ MODUS Xint = Int; Xint Sum SQ: = 0; ZUM i WÄHREND Sum SQ ≠ 70 × 70 TUN Sum SQ+: = i ↑ 2 Od |
Zitat Stropping (wie Wikitext)) | 'PR' QUOTE 'PR' 'Modus' 'xint' = 'int'; 'xint' sum SQ: = 0; 'I' i 'während' sum SQ ≠ 70 × 70 'do' sum SQ+: = i ↑ 2 'OD' |
Für ein 7-Bit Zeichencode Compiler | .Pr OBERER, HÖHER .Pr Modus xint = int; Xint Sum SQ: = 0; Für i während sum SQ/= 70*70 |
Für ein 6-Bit Zeichencode Compiler | .Pr PUNKT .Pr .MODUS .Xint = .Int; .Xint SUMME SQ: = 0; .ZUM I .WÄHREND Sum Sq .ne 70*70.TUN Sum Sq .plusab i .up 2.Od |
Algol68 Verwenden Res Stropping (reserviertes Wort) | .Pr Res .Pr Modus .xint = int; .Xint Summe SQ: = 0; für i während sum SQ ≠ 70 × 70 |
Algol 68 ermöglicht es, dass jede natürliche Sprache ihre eigenen Schlüsselwörter-Algol-68 definiert. Infolgedessen können Programmierer Programme mit Schlüsselwörtern aus ihrer Muttersprache schreiben. Im Folgenden finden Sie ein Beispiel für ein einfaches Verfahren, das "den folgenden Tag" berechnet wird, der Code in zwei Sprachen: Englisch und Deutsch.
# Datum am nächsten Tag - Englische Variante # MODUS DATUM = Struktur(Int Tag, Saite Monat, Int Jahr); Proc Der Tag folgt = ((DATUM x) DATUM: WENN Tag VON x <Länge des Monats (Monat VON x, Jahr VON x) DANN (Tag VON x + 1, Monat VON x, Jahr VON x) Elif Monat VON x = "Dezember" DANN (1, "Januar", Jahr VON x + 1) ANDERS (1, Nachfolger des Monats (Monat VON x), Jahr VON x) Fi;
# Nachfolgetag - Deutsche Variante # Menge DATUM = Tupel(Ganz Schild, WÜRZE Monat, Ganz Jahr); Funkwerk Naechster Tag nach = (DATUM x) DATUM: Wenn Schild Von x <monatslaenge (Monat Von X, Jahr Von x) Dann (Schild Von x + 1, Monat Von X, Jahr Von x) Wennaber Monat Von x = "Dezember" Dann (1, "Januar", Jahr Von x + 1) Ansonsten (1, nachfolgemonat (Monat Von x), Jahr Von x) Endwenn;
Russisch/sowjetisches Beispiel: In englischer Algol68s Fallserklärung liest sich FALL ~ IN ~ AUS ~ ESAC, in kyrillisch Das heißt ыыб ~ в ~ либо ~ ыы.
Einige Vanitas
Für seine technischen Feinheiten benötigt Algol 68 eine Füllhorn mit Methoden, um die Existenz von etwas zu leugnen:
ÜBERSPRINGEN, "~" oder "?"C - Ein undefinierter Wert immer syntaktisch gültig,LEER - der einzige Wert zulässig für LEEREfür die Auswahl benötigt LEERE in einem UNIONAnwesendLEERE - syntaktisch wie a MODUS, aber nicht eins,NULL oder "○" - Ein Name, der nichts bezeichnet, eines nicht spezifizierten Referenzmodus () oder spezifisch [1: 0]Int - a Vakuum ist ein leeres Array (hier speziell von MODUS []Int).nicht definiert - A Standards berichtet von Verfahren, in denen eine Ausnahme im Laufzeitsystem aufgenommen wird. ℵ - verwendet im Standardbericht zur Hemmung Selbstbeobachtung bestimmter Typen. z.B. Sema
C.F. unten für andere Beispiele von ℵ.
Der Begriff NULL IST var Bewertet immer zu STIMMT für jede Variable (siehe oben für die korrekte Verwendung von IST:/= :), während es nicht bekannt ist, welchen Wert ein Vergleich x < ÜBERSPRINGEN bewertet für jede Ganzzahl x.
Algol 68 verlässt absichtlich undefiniert, was im Fall von passiert Ganzzahlüberlauf, die Ganzzahl -Bit -Darstellung und der Grad der numerischen Genauigkeit für den schwimmenden Punkt. Im Gegensatz dazu die Sprache Java wurde wegen überspezifischer letzterer kritisiert.
Beide offiziellen Berichte enthielten einige fortgeschrittene Funktionen, die nicht Teil der Standardsprache waren. Diese wurden mit einem ℵ angezeigt und als effektiv als privat angesehen. Beispiele sind "≮" und "≯" für Vorlagen, die Outtype/Intype für Rohöl Ententypisierung, und die GERADE HERAUS und Glatter Betreiber für die "Glätten" verschachtelte Arrays und Strukturen.
Auszug aus dem Bericht von 1973:
§10.3.2.2. Bündungsmodi a) MODUS ℵ Einfach = UNION (≮ℒInt≯, ≮ℒREAL≯, ≮ℒCompl≯, Bool, ≮ℒ Bits≯, VERKOHLEN, [] VERKOHLEN); b) MODUS ℵ Outtype = ¢ Ein tatsächlicher Deklarer, der einen Modus angibt, der aus einer ausreichenden Modi vereint ist, von denen keiner von "ungültig" ist oder "flexibel", "Referenz auf", "Verfahren" oder "Vereinigung von" ¢ enthält; c) MODUS ℵ Einfach = UNION (≮Ref ℒInt≯, ≮Ref ℒREAL≯, ≮Ref ℒ Compl≯, Ref Bool, ≮Ref ℒBits≯, Ref VERKOHLEN, Ref [ ] VERKOHLEN, Ref Saite); d) MODUS ℵ Intype = ¢ ... ¢; §10.3.2.3. Glätten a) Op ℵ GERADE HERAUS = (Outtype x) [ ] Einfach: ¢ Das Ergebnis von "Glattung" 'x' ¢; b) Op ℵ Glatter = (Intype x) [ ] Einfach: ¢ Das Ergebnis von "X" ¢ ¢;
Vergleiche mit anderen Sprachen
- 1973 – Vergleichsnotizen zu Algol 68 und PL/i - S. H. Valentine - Februar 1973
- 1973 - B. R. Alexander und G. E. Hedrick. Ein Vergleich von PL/1 und Algol 68. Internationales Symposium auf Computern und chinesischen Eingangs-/Ausgangssystemen. S. 359–368.
- 1976 - Bewertung von Algol 68, Fröhlich J3B, Pascal, Simula 67 und Tacpol Versus Tinman - Anforderungen an eine gemeinsame Programmiersprache mit hoher Ordnung.
- 1976 – Ein Sprachvergleich -Ein Vergleich der Eigenschaften der Programmiersprachen Algol 68, Camac-IML, Koralle 66, Pas 1, PERLE, PL/1, Procol, RTL/2 im Verhältnis zu Echtzeit -Programmierung - R. Roessler; K. Schenk - Oktober 1976 [7]
- 1976 - Bewertung von Algol 68, Jovial J3B, Pascal, Simula 67 und TACPOL gegenüber [Steelman Language Anforderungen | Tinman] Anforderungen für eine gemeinsame Programmiersprache mit hoher Ordnung. Oktober 1976 [8]
- 1977 – Bericht an die hochrangigsprachige Arbeitsgruppe (HOLWG) - Zusammenfassung der Exekutive - Koordinierungskomitee für Sprachbewertung - Bewertung von Pl/i, Pascal, Algol 68, Hal/s, PERLE, Spl/i, Pdl/2, ltr,, CS-4, Lis, Euklid, ECL, Moralisch, RTL/2, Forran, Cobol, Algol 60, Tacpol, CMS-2, Simula 67, Jovial J3B, Jovial J73 & Koralle 66.
- 1977 – Ein Vergleich von Pascal und Algol 68[57] – Andrew S. Tanenbaum - Juni 1977.
- 1980 – Ein kritischer Vergleich mehrerer Programmiersprache Implementierungen - Algol 60, Forran, Pascal und Algol 68.
- 1993 – Fünf kleine Sprachen und wie sie wuchsen – WONNE, Pascal, Algol 68, BCPL & C – Dennis M. Ritchie - April 1993.
- 1999 – Über Orthogonalität: Algol68, Pascal und C.
- 2000 – Ein Vergleich von Arrays in Algol 68 und WONNE – Universität von Virginia - Michael Walker - Frühling 2000
- 2009 – On Go - Oh, mach weiter - Wie gut wird Google's gehen gegen die Brand X -Programmiersprache stehen? - David gegeben - November 2009
- 2010 – Algol und Pascal Aus "Konzepte in Programmiersprachen-blockstrukturierte prozedurale Sprachen"-von Marcelo Fiore
- Vergleich von Algol 68 und C ++
Überarbeitungen
Außer wo notiert (mit a Superscript), die oben beschriebene Sprache ist die des "überarbeiteten Berichts"(R1)".
Die Sprache des nicht überarbeiteten Berichts
Die Originalsprache (gemäß dem "Abschlussbericht"R0) unterscheidet sich in der Syntax der Modusgegossenund es hatte das Merkmal von Verfahren, d.h. Verfahren wäre, um Bewertungen vorzunehmen faul. Die nützlichste Anwendung könnte die kurzfristige Bewertung von Booleschen Betreibern gewesen sein. Im:
Op Undf = (Bool a,Proc Bool b)Bool: (a | b | FALSCH);Op Orf = (Bool a,Proc Bool b)Bool: (a | STIMMT | b);
b wird nur bewertet, wenn a ist wahr.
Wie in Algol 68 definiert, funktionierte es nicht wie erwartet, beispielsweise im Code:
WENN FALSCH Undf CO Proc Bool: CO (print ("sollte nicht ausgeführt werden"); STIMMT))DANN ...
gegen die Programmierer naive Erwartungen der Druck möchten ausgeführt werden, da es nur das ist Wert des ausgearbeiteten geschlossenen Klausel danach Undf das war verarbeitet. Textinsertion des kommentierten Aussagens Proc Bool: macht es funktioniert.
Einige Implementierungen emulieren das erwartete Verhalten für diesen Sonderfall durch Erweiterung der Sprache.
Vor der Überarbeitung konnte der Programmierer entscheiden, die Argumente eines Verfahrens mit Semikolonen anstelle von Kommas seriell anstelle von kollateral bewertet zu haben (anstelle von Kommas (Gommas).
Zum Beispiel in:
Proc Test = ((REAL a; REAL B): ... ... Test (x PLUS 1, x);
Das erste Argument zum Testen wird garantiert vor dem zweiten bewertet, jedoch im üblichen:
Proc Test = ((REAL a, b): ... ... test (x PLUS 1, x);
Dann konnte der Compiler die Argumente in jeder Reihenfolge bewerten, wie er sich anfühlte.
Verlängerungsvorschläge von IFIP WG 2.1
Nach der Überarbeitung des Berichts wurden einige Erweiterungen der Sprache vorgeschlagen, um die Anwendbarkeit zu erweitern:
- Teilparametriation (AKA Currying): Erstellung von Funktionen (mit weniger Parametern) durch Spezifikation einiger, jedoch nicht aller Parameter für einen Aufruf, z. Ein Funktionslogarithmus von zwei Parametern, Basis und Argument, könnte auf natürliches, binäres oder dekadisches Protokoll spezialisiert sein.
- Modulerweiterung: Zur Unterstützung der externen Verknüpfung wurden zwei Mechanismen vorgeschlagen, Bottom-up Definitionsmodule, eine leistungsfähigere Version der Einrichtungen von Algol 68-R und oben nach unten Löcher, ähnlich wie
Umwelt
undVerwendung
Klauseln von Algol 68c[58] - Modusparameter: Für die Implementierung begrenzter parametrischer Polymorphismus (die meisten Operationen auf Datenstrukturen wie Listen, Bäume oder andere Datencontainer können ohne Berührung der Gehaltslast angegeben werden).
Bisher wurde in Algol 68 Genie nur eine teilweise Parametriation implementiert.
TRUE ALGOL 68S -Spezifikation und Implementierungszeitleiste
Name | Jahr | Zweck | Bundesland | Beschreibung | Ziel -CPU | Lizenzierung | Implementierungssprache |
---|---|---|---|---|---|---|---|
Verallgemeinerter Algol | 1962 | Wissenschaftlich | Nl | Algol für verallgemeinerte Grammatiken | |||
Algol yY | 1966 | Entwurfsvorschlag | Intl | Erste Version von Algol 68 | Spezifikation | ACM | |
Algol 68DR | 1968 | Entwurfsvorschlag | Intl | IFIP WG 2.1 Berichtsbericht | Spezifikation - März | ACM | |
Algol 68R0 | 1968 | Standard | Intl | IFIP WG 2.1 Abschlussbericht | Spezifikation - August | ACM | |
Algol 68-RR | 1970 | Militär | Vereinigtes Königreich | ICL 1900 | Algol 60 | ||
EposalgolE | 1971 | Wissenschaftlich | |||||
Algol 68RsRs | 1972 | Militär | Vereinigtes Königreich | Tragbares Compiler -System | ICL 2900/Serie 39, Multics, VMs & C Generator (1993) | Kronen -Urheberrecht | Algol 68Rs |
Algol 68 mit Bereichen | 1972 | Experimentell & andere | Vereinigtes Königreich | Zugabe von Bereichen zu Algol 68 | |||
Mini -Algol 68 | 1973 | Forschung | Nl | "Ein Dolmetscher für einfache Algol 68 -Programme" Archiviert 2011-07-18 bei der Wayback -Maschine | Tragbarer Dolmetscher | Mathematisch Centrum | Algol 60 |
OREGANO | 1973 | Forschung | UNS | "Die Bedeutung von Implementierungsmodellen." | UCLA | ||
Algol 68cC | 1975 | Wissenschaftlich | Vereinigtes Königreich | Cambridge Algol 68 | ICL, IBM 360, PDP 10 & Unix, Telefunkeln, Tesla & Z80 (1980)[59] | Cambridge | Algol 68c |
Überarbeiteter Algol 68 -BerichtR1 | 1975 | Standard | Intl | IFIP WG 2.1 Überarbeiteter Bericht | Spezifikation | ACM | |
Algol hH | 1975 | Experimentell & andere | Vereinigtes Königreich | Vorgeschlagene Erweiterungen zum Modussystem von Algol 68 | Spezifikation | Algol w | |
Odra Algol 68 | 1976 | Praktische Verwendungen | UdSSR/Polen | Odra 1204/il | Sowjet | Algol 60 | |
Oklahoma Algol 68 | 1976 | Programmieranweisung | Vereinigte Staaten von Amerika | Oklahoma State University Implementierung[60] | IBM 1130 und System/370/158 | Unbekannt | Ansi Forran 66. |
Berlin Algol 68 | 1977 | Forschung | De | "Das Berlin Algol 68 Implementierung" &[61] | Ein abstrakter Algol 68 -Maschinenmaschinen -unabhängiger Compiler | Technische Universität Berlin | CDL 2 |
FlacF | 1977 | Mehrzweck | Ca. | Überarbeiteter Bericht Vollständige Implementierung mit Debug -Funktionen | System/370 | Mietvertrag, Chion Corporation | Assembler |
Algol 68-RTRt | 1979 | Wissenschaftlich | Vereinigtes Königreich | Parallelalgol 68-R | |||
RS AlgolRs | 1979 | Wissenschaftlich | Vereinigtes Königreich | ||||
Algol 68+ | 1980 | Wissenschaftlich | Nl | Vorgeschlagene Superliste von Algol 68[62] | |||
M-220 Algol 68 | UdSSR | M-220 | Sowjet | EPSILON | |||
Leningrad Algol 68L | 1980 | Telekommunikation | UdSSR | Vollständige Sprache + Module | IBM, Dez, Camcoh, PS 1001 & PC | Sowjet | |
Interaktives Algol 68I | 1983 | Vereinigtes Königreich | Inkrementelle Zusammenstellung | PC | Nicht kommerziell Shareware | ||
Algol 68sS | 1985 | Wissenschaftlich | Intl | Sonne Version von Algol 68 | Sun-3, Sonne Sparc (unter Sonnenos 4.1 & Solaris 2), Atari ST (unter Gemdos), Acorn Archimedes (unter RISC OS), Vax-11 unter Ultrix-32 | ||
Algol68toc[63] (Ctrans) | 1985 | Elektronik | Vereinigtes Königreich | Ctrans von Ella Algol 68Rs | Tragbarer C -Generator | Quelloffene Software 1995 | Algol 68Rs |
Mk2 Interaktives Algol 68 | 1992 | Vereinigtes Königreich | Inkrementelle Zusammenstellung | PC | Nichtkommerziell Shareware[64] | ||
Algol 68 GenieG | 2001 | Volle Sprache | Nl | Beinhaltet Standard -Sicherheitenklausel | Tragbarer Dolmetscher | Gpl | C |
Algol 68 Genie Version 2.0.0 | 2010 | Volle Sprache | Nl | Tragbarer Dolmetscher; Optionale Zusammenstellung ausgewählter Einheiten | Gpl | C |
Das S3 Sprache Das wurde verwendet, um das zu schreiben ICL VME Betriebssystem und viel andere Systemsoftware auf der ICL 2900 -Serie war ein direktes Derivat von Algol 68. Es wurde jedoch viele der komplexeren Funktionen weggelassen und die Grundmodi durch eine Reihe von Datentypen ersetzt, die direkt auf die Hardware -Architektur der Serie 2900 zugeordnet wurden.
Implementierungsspezifische Erweiterungen
Algol 68R(R) aus Rre war die erste Algol 68 -Untergruppe implementiert, die auf dem ausgeführt wurde ICL 1900. Basierend auf der Originalsprache waren die Hauptunterbrecherbeschränkungen Definition vor der Verwendung und keine parallele Verarbeitung. Dieser Compiler war beliebt in Vereinigtes Königreich Universitäten in den 1970er Jahren, wo viele Informatik Die Schüler lernten Algol 68 als erste Programmiersprache; Der Compiler war bekannt für gute Fehlermeldungen.
Algol 68Rs(Rs) aus RSRE war ein tragbares Compiler -System, das in Algol 68RS (Bootstrap aus Algol 68R) geschrieben wurde und auf verschiedenen Systemen implementiert wurde, einschließlich der ICL 2900/Serie 39, Mehrheit und Dec vax/vms. Die Sprache basierte auf dem überarbeiteten Bericht, jedoch mit ähnlichen Untergruppenbeschränkungen wie Algol 68R. Dieser Compiler überlebt in Form eines Algol68-zu-C-Compilers.
In Algol 68s(S) aus Carnegie Mellon Universität Die Leistung der parallele Verarbeitung wurde durch Hinzufügen einer orthogonalen Erweiterung verbessert. Ereignis. Jede variable Deklaration mit Schlüsselwort VERANSTALTUNG Zuordnungen für diese variable, die für die parallele Bewertung in Frage kamen C.MMP Multiprozessorsystem. Der Zugriff auf solche Variablen wurde nach Beendigung der Zuordnung verzögert.
Cambridge Algol 68c(C) war ein tragbarer Compiler, der eine Teilmenge von Algol 68 implementierte, die die Definitionen des Bedieners und die Auslassung von Müllsammlung, flexible Zeilen und formatierte Unterschiede einschränkte.
Algol 68 Genie(G) Von M. van der Veer ist eine Algol 68 -Implementierung für heutige Computer und Betriebssysteme.
"Trotz guter Absichten kann ein Programmierer gegen die Portabilität verstoßen, indem er versehentlich eine lokale Erweiterung einsetzt. Um sich dagegen zu schützen Verstoß gegen eine Einschränkung der Portabilität. "[65]
Zitate
- ... Das von C verabschiedete Schema der Typuszusammensetzung schuldet Algol 68 beträchtliche Schulden, obwohl es möglicherweise nicht in einer Form entstand, die Algols Anhänger zustimmen würden. Der zentrale Begriff, den ich aus Algol erfasst hatte, war eine Typstruktur, die auf Atomtypen (einschließlich Strukturen) basiert und in Arrays, Zeiger (Referenzen) und Funktionen (Verfahren) zusammengesetzt war. Das Konzept der Gewerkschaften und Casts von Algol 68 hatte ebenfalls einen Einfluss, der später erschien. Dennis Ritchie Apr 1993.[2]
- ... C stammt nicht von Algol 68 ab, aber es gab Einfluss, viel davon so subtil, dass es schwierig ist, sich zu erholen, selbst wenn ich fest denke. Insbesondere der Gewerkschaftstyp (eine späte Ergänzung zu C) schuldet A68 nicht in Einzelheiten, sondern in der Idee, einen solchen Typ überhaupt zu haben. Tiefer war die Typstruktur im Allgemeinen und in gewisser Weise die Deklarationssyntax (der Typ-Constructor-Teil) inspiriert von A68. Und ja, natürlich "lang". Dennis Ritchie, 18. Juni 1988[4]
- "Herzlichen Glückwunsch, Ihr Meister hat es geschafft" - - Niklaus Wirth[66]
- Je mehr ich es sehe, desto unglücklicher werde ich - E. W. Dijkstra, 1968[67]
- [...] Es wurde gesagt, dass die Popularität von A68 umgekehrt proportional zu [...] von Amsterdam war – Guido van Rossum[68]
- [...] Das Beste, was wir tun konnten, war, einen Minderheitenbericht mitzunehmen, in dem wir unsere überlegte Ansicht besagen, dass "... als Instrument für die zuverlässige Schaffung hochentwickelter Programme die Sprache ein Misserfolg war." [...] – C. A. R. Hoare In seinem Oktober 1980 Turing Award Vorlesung[69]
- "[...] Mehr denn je wird es von einem angemessenen Programmierwerkzeug erforderlich sein, das es durch Struktur hilft, den Programmierer in den schwierigsten Aspekten seines Jobs, nämlich bei der zuverlässigen Schaffung hochentwickelter Programm Nicht sehen, wie die hier vorgeschlagene Sprache ein bedeutender Schritt nach vorne ist: Im Gegenteil, wir sind der Meinung, dass ihre implizite Sicht auf die Aufgabe des Programmierers sehr ähnlich ist wie Als Programmierwerkzeug muss die Sprache als veraltet angesehen werden. [...] " 1968 Arbeitsgruppe Minderheitenbericht am 23. Dezember 1968.[70]
Siehe auch
Verweise
Zitate
- ^ Van Wijngaarden, Adriaan; Mailloux, Barry James; Peck, John Edward Lancelot; Koster, Cornelis Hermanus Antonius; Sintzoff, Michel; Lindsey, Charles Hodgson; Meertens, Lambert Guillaume Louis Théodore; Fisker, Richard G., Hrsg. (1976). Überarbeiteter Bericht über das algorithmische Sprachalgol 68 (PDF). Springer-Verlag. ISBN 978-0-387-07592-1. OCLC 1991170. Archiviert (PDF) vom Original am 2019-04-19. Abgerufen 2019-05-11.
- ^ a b Dennis Ritchie (April 1993). "Die Entwicklung der C -Sprache" (PDF). Archiviert von das Original (PDF) Am 2005-11-06. Abgerufen 2007-04-26.
- ^ Einfluss auf C: Typen, Strukturen, Arrays, Zeiger und Verfahren - Dennis Ritchie[2]
- ^ a b Dennis Ritchie (Juni 1988). "C und Algol 68". Abgerufen 2006-09-15.
- ^ Einfluss auf C: Union, Struktur, Syntax und lange Präzision - Dennis Ritchie[4]
- ^ "Eine Geschichte von C ++: 1979–1991" (PDF). März 1993. Seite 12, 2. Absatz: Algol68 [Angaben] Operator -Überladen (§3.3.3), Referenzen (§3.3.4) und die Fähigkeit, Variablen überall in einem Block (§3.3.1) zu deklarieren (§3.3.1). Abgerufen 2008-05-06.
- ^ "Interview mit Guido van Rossum". Juli 1998. archiviert von das Original am 2007-05-01. Abgerufen 2007-04-29.
- ^ "Eine kürzere Geschichte von Algol 68". Archiviert von das Original am 2006-08-10. Abgerufen 2006-09-15.
- ^ Vollständigkeit und Klarheit der Beschreibung Archiviert 2013-03-17 bei der Wayback -Maschine
- ^ Orthogonales Design Archiviert 2013-03-17 bei der Wayback -Maschine
- ^ Sicherheit Archiviert 2013-03-17 bei der Wayback -Maschine
- ^ Effizienz Archiviert 2013-03-17 bei der Wayback -Maschine
- ^ "Gommas?".
- ^ Überarbeiteter Bericht über das algorithmische Sprachalgol 68 Archiviert 2013-03-17 bei der Wayback -Maschine. jmvdveer.home.xs4all.nl (1968-12-20). Abgerufen am 2013-07-21.
- ^ Terekhov, Andrey (2014). "Algol 68 und seine Auswirkungen auf die UdSSR- und russische Programmierung". 2014 Dritte internationale Konferenz über Computertechnologie in Russland und in der ehemaligen Sowjetunion. S. 97–106. doi:10.1109/sorucom.2014.29. ISBN 978-1-4799-1799-0. S2CID 16097093.
- ^ http://toc.proceedings.com/25445Webbtoc.pdf "А? л 68 и е о вwirkungen
- ^ Lindsey 1996.
- ^ a b Lindsey, Charles H. (1996). Bergin, T. J.; Gibson, R. G. (Hrsg.). Eine Geschichte von Algol 68. ACM Sigplan nennt. Geschichte der Programmiersprachen-IIs. Vol. 28. Auch in ACM Sigplan Mitteilungen 28 (3), März 1993 (beinhaltet eine umfassende Bibliographie der Besprechungen und Diskussionen vor, während und nach der Entwicklung von Algol 68). ACM -Presse. S. 97–132. doi:10.1145/155360.155365. ISBN 978-0-201-89502-5.
- ^ Programmieralgol 68 erleichtert einfach
- ^ Lernalgol 68 Genie
- ^ Lindsey 1993, p. 7.
- ^ a b c d Lindsey 1993, p. 9.
- ^ Lindsey 1993, p. 24.
- ^ a b Lindsey 1993, p. 10.
- ^ "Das Algol Bulletin".
- ^ a b Lindsey 1993, p. 12.
- ^ Lindsey 1993, p. 13.
- ^ Lindsey 1993, p. fünfzehn.
- ^ Hoare, C. a. R. (November 1968). "Kritik von Algol 68". Algol Bulletin. 29: 27–29.
- ^ a b Peck, J. E. L., ed. (1970), Verfahren der IFIP -Arbeitskonferenz zur Implementierung von Algol 68, München: Nordholland, ISBN 0-7204-2045-8
- ^ a b c d Koster, C. H. A. "Eine kürzere Geschichte von Algol 68". Archiviert von das Original Am 2007-12-17.
- ^ Van der Veer, Marcel. "Open Source Algol 68 Implementierungen". Algol68.SourceForge.net.
- ^ E. Marchessi, Jose. "Algol68 Frontend für GCC". Jemarch.net.
- ^ Berichtsentwurf(DR) Veröffentlicht
- ^ Sidney Marshall, "Algol 68 Implementierung", Verfahren der IFIP -Arbeitskonferenz zur Implementierung von Algol 68, München, 20. bis 24. Juli 1970, J. E. L. Peck, Herausgeber, North Holland, Seiten 239–243.
- ^ Sidney Marshall, Bei der Implementierung von Algol 68, Doktorarbeit, Dartmouth College, 1972.
- ^ Überarbeiteter Algol 68 -Bericht
- ^ Vorschläge für Algol H - Eine Superliste von Algol 68
- ^ "Algol68 s(S) im Internet veröffentlicht ". Archiviert von das Original Am 2005-12-03. Abgerufen 2004-08-30.
- ^ Algol 68 Genie(G)
- ^ "Bericht über den Algorithmic Language Algol 68". März 1968. Archiviert vom Original am 2007-09-30. Abgerufen 2007-06-22.
- ^ "Vorletzter Bericht über das algorithmische Sprachalgol 68-Kapitel 1-9" (PDF). Oktober 1968. Abgerufen 2007-06-22.[Permanent Dead Link]
- ^ "Vorletzter Bericht über das algorithmische Sprachalgol 68-Kapitel 10-12" (PDF). Oktober 1968. Abgerufen 2007-06-22.[Permanent Dead Link]
- ^ "Bericht über das algorithmische Sprachalgol 68" (PDF). Dezember 1968. archiviert von das Original (PDF) am 2008-04-06. Abgerufen 2007-12-30.
- ^ "Überarbeiteter Bericht über das algorithmische Sprachalgol 68". September 1973. Archiviert vom Original am 2007-09-27. Abgerufen 2007-04-30.
- ^ Lu Hu-Quan (1971). "Die Übersetzung von Algol 68 in Chinesisch" (PDF). Peking, China: Institut für Mathematik, Wissenschaft Sinica. Abgerufen 2012-08-17.
- ^ "GOST 27974-88 Programmiersprachalgol 68-язык прораарования алго 68" (PDF) (auf Russisch). Gost. 1988. archiviert von das Original (PDF) am 2008-11-15. Abgerufen 2008-11-15.
- ^ "GOST 27975-88 Programmiersprache Algol 68 Erweitert-язык пwor (PDF) (auf Russisch). Gost. 1988. archiviert von das Original (PDF) Am 2011-04-29. Abgerufen 2008-11-15.
- ^ Formatsyntax in Algol 68G Archiviert 2008-01-09 im Wayback -Maschine
- ^ Needham, R. M.; Wilkes, M. V. (Januar 1979). "Der Cambridge Cap Computer und sein Betriebssystem" (PDF). Microsoft Research.
- ^ David Holdsworth (Winter 2009–2010). "KDF9 TEILE TRAGING: Eldon 2 ist nicht Egdon!". Computerauferstehung - Nummer 49. Computer Conservation Society. Abgerufen 2010-10-03.
- ^ http://www.vitanuova.com/dist/doc/rsre-3522-curt.pdf[Bare URL PDF]
- ^ Эльбрус бабаяна и pentium пентковског. Ixbt.com. Abgerufen am 2013-07-21.
- ^ Oliver, J. R.; Newton, R. S. (1979). "Praktische Erfahrung mit Algol 68-RT". Das Computerjournal. 22 (2): 114–118. doi:10.1093/comjnl/22.2.114.
- ^ Anwendungen, Bibliotheken und Testsuiten - Software -Konservierungsgruppe. SoftwarePeservation.org. Abgerufen am 2013-07-21.
- ^ Überarbeiteter Bericht, Seite 123, Fußnote
- ^ "Vrije Universität Amsterdam" (PDF).
- ^ Lindsey, C. H.; Boom, H. J. (Dezember 1978). "Eine Module und separate Kompilierungsanlage für Algol 68". Algol Bulletin (43): 19–53. Abgerufen 2020-01-29. Kommentare Errata
- ^ "Archivierte Kopie" (PDF). Archiviert von das Original (PDF) Am 2010-04-15. Abgerufen 2010-03-20.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) - ^ http://htportal.acm.org/ft_gateway.cfm?id=803425&type=pdf[Permanent Dead Link]
- ^ Eine abstrakte Algol 68 -Maschine und ihre Anwendung in einem maschinenunabhängigen Compiler - Springer. Springerlink.com. Abgerufen am 2013-07-21.
- ^ "Archivierte Kopie". Archiviert von das Original Am 2011-03-10. Abgerufen 2010-03-20.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) - ^ Open Source Algol 68 Implementierungen - Durchsuchen Sie Dateien bei. SourceForge.net. Abgerufen am 2013-07-21.
- ^ [1] Archiviert 2006-08-29 bei der Wayback -Maschine
- ^ "Archivierte Kopie" (PDF). Archiviert von das Original (PDF) Am 2014-01-02. Abgerufen 2005-08-27.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) - ^ C. H. A. Koster (1993). "Die Herstellung von Algol 68". Vorlesungsnotizen in Informatik. Citeseerx 10.1.1.76.2072.
- ^ Dijkstra, E. W. "Zum Herausgeber Algol 68 Mathematische Centrum". Archiviert vom Original am 2007-04-21. Abgerufen 2007-04-28.
- ^ Van Rossum, Guido (Juni 2005). "Python-dev Wunschliste: Dowhile". Abgerufen 2007-04-28.
- ^ Hoare, C. A. R. (Februar 1981) [basierend auf seiner 1980 Turing Award Vorlesung]. "Die alten Kleider des Kaisers". Kommunikation der ACM. 24 (2): 75–83. doi:10.1145/358549.358561. S2CID 97895. Archiviert von das Original Am 2013-05-08. Alt URL Archiviert 2017-10-02 im Wayback -Maschine
- ^ "Algol Bulletin (genannt in AB30.1.1.1)". März 1970. Archiviert vom Original am 2007-09-30. Abgerufen 2007-03-01.
Werke zitiert
- Brailsford, D. F. und Walker, A. N.,, Einführungsalgol 68 Programmierung, Ellis Horwood/Wiley, 1979
- Lindsey, C. H. und van der Meulen, S. G.,, Informelle Einführung in Algol 68, North-Holland, 1971
- Lindsey, C. H. (1993-03-02). "Eine Geschichte von Algol 68". ACM Sigplan nennt. 28 (3): 97–132. doi:10.1145/155360.155365.
- McGettrick, A. D.,, Algol 68, ein erster und zweiter Kurs, Cambridge Univ. Press, 1978
- Peck, J. E. L.,, Ein Algol 68 Begleiter, Univ. von British Columbia, Oktober 1971
- Tanenbaum, A. S.,, Ein Tutorial über Algol 68, Computerumfragen 8, 155-190, Juni 1976 und 9, 255-256, September 1977, [9][Permanent Dead Link]
- Woodward, P. M. und Bond, S. G.,, Algol 68-R-Benutzersic Führen, London, Schreibwarenbüro Ihrer Majestät, 1972
Externe Links
- Überarbeiteter Bericht über das algorithmische Sprachalgol 68 Die offizielle Referenz für Benutzer und Implementierer der Sprache (große PDF -Datei, gescannt aus Algol Bulletin)
- Überarbeiteter Bericht über das algorithmische Sprachalgol 68 Hyperlinde HTML -Version des überarbeiteten Berichts
- Ein Tutorial über Algol 68, durch Andrew S. Tanenbaum, in Computerumfragen, Vol. 8, Nr. 2, Juni 1976, mit Corrigenda (Band 9, Nr. 3, September 1977)
- Algol 68 Genie-Ein GNU GPL-Algol 68 Compiler-Interpreter
- Open Source Algol 68 Implementierungen auf Sourceforge
- Algol68 Standard -Hardware -Darstellung (.pdf) Archiviert 2014-01-02 bei der Wayback -Maschine
- З и и и & тkunft
- Algol 68 - 25 Jahre in der UdSSR
- Систеgst прораizin динаkunft меской поддержки дUN
- C Geschichte mit Algol68 Erbe
- McJones, Paul, "Algol 68 Implementierungen und Dialekte", Software -Konservierungsgruppe, Computergeschichte Museum, 2011-07-05
- Webaktiviertes Algol 68 Compiler für kleine Experimente