Simula
![]() | |
Paradigmen | Multi-Paradigma: prozedural, Imperativ, strukturiert, objektorientierter |
---|---|
Familie | Algol |
Entworfen von | Ole-Johan Dahl |
Entwickler | Kristen Nygaard |
Erstmals erschienen | 1962 |
Stabile Version | Simula 67, Simula I. |
Disziplin tippen | Statisch, Nominativ |
Zielfernrohr | Lexikalisch |
Implementierungssprache | Algol 60 (in erster Linie; einige Komponenten Simscript) |
OS | Unix-artig, Fenster, Z/OS, Tops-10, MVS |
Webseite | www |
Beeinflusst von | |
Algol 60, Simscript | |
Beeinflusst | |
Alle nachfolgend objektorientierte Programmiersprachen |
Simula ist der Name von zwei Simulation Programmiersprachen, Simula I und Simula 67, entwickelten sich in den 1960er Jahren in der Norwegisches Computerzentrum in Oslo, durch Ole-Johan Dahl und Kristen Nygaard. Syntaktisch, es ist eine ungefähre Superset von Algol 60,[1]: 1.3.1 und wurde auch durch das Design von beeinflusst Simscript.[2]
Simula 67 eingeführt Objekte,[1]: 2, 5.3 Klassen,[1]: 1.3.3, 2 Nachlass und Unterklassen,[1]: 2.2.1 Virtuelle Verfahren,[1]: 2.2.3 Coroutinen,[1]: 9.2 und Diskrete Ereignissimulation,[1]: 14.2 und vorgestellt Müllsammlung.[1]: 9.1 Andere Formen von Subtyping (Neben der Erben von Unterklassen) wurden in Simula -Derivaten eingeführt.
Simula wird als die angesehen Erste objektorientierte Programmiersprache. Wie der Name schon sagt, wurde die erste Simula -Version von 1962 für das Tun entwickelt Simulationen; Simula 67 wurde jedoch als allgemeine Programmiersprache entwickelt[3] und lieferte den Rahmen für viele der Merkmale objektorientierter Sprachen heute.
Simula wurde in einer Vielzahl von Anwendungen wie Simulation verwendet Sehr große Integration (VLSI) Designs, Prozessmodellierung, Kommunikationsprotokolle, Algorithmenund andere Anwendungen wie z. Artensett, Computergrafik, und Ausbildung. Der Einfluss von Simula ist oft untertrieben, und Simula-Typ-Objekte werden in neu implementiert C ++, Objekt Pascal, Java, C#und viele andere Sprachen. Informatiker wie Bjarne Stroustrup, Schöpfer von C ++, und James GoslingDer Schöpfer von Java hat Simula als einen großen Einfluss anerkannt.[4]
Geschichte
Der folgende Bericht basiert auf Jan Rune Holmeviks historischer Aufsatz.[5][6]
Kristen Nygaard 1957 mit dem Schreiben von Computersimulationsprogrammen begann. Nygaard sah einen besseren Weg, um die Heterogenität und die zu beschreiben Betrieb eines Systems. Mit seinen Ideen auf einem weiterzugehen formell Computer Sprache Für die Beschreibung eines Systems erkannte Nygaard, dass er jemanden mit mehr brauchte Computerprogrammierung Fähigkeiten als er hatte. Ole-Johan Dahl schloss sich ihm in seiner Arbeit Januar 1962 an. Die Entscheidung, die Sprache miteinander zu verbinden Algol 60 wurde kurz darauf gemacht. Bis Mai 1962 die Hauptkonzepte für a Simulation Sprache wurden eingestellt. Simula i wurde geboren, eine spezielle Programmiersprache für die Simulation diskreter Ereignissysteme.
Kristen Nygaard wurde eingeladen, die zu besuchen Eckert -ähly Computer Corporation Ende Mai 1962 im Zusammenhang mit der Vermarktung ihrer neuen Univac 1107 Computer. Bei diesem Besuch präsentierte Nygaard die Ideen von Simula zu Robert Bemer, der Director of Systems Programming bei Univac. Bemer war großartig Algol Fan und fanden das Simula -Projekt überzeugend. Bemer war auch Vorsitzender einer Sitzung auf der zweiten internationalen Konferenz zur Informationsverarbeitung von der von gehosteten Informationsverarbeitung Internationale Föderation für Informationsverarbeitung (IFIP). Er lud Nygaard ein, der das Papier "Simula-eine Erweiterung des Algols zur Beschreibung diskreter Event-Netzwerke" präsentierte.
Das Norwegisches Computerzentrum hat ein Univac 1107 Im August 1963 mit einem beträchtlichen Rabatt, auf dem Dahl die Simula I unter Vertrag mit Univac umsetzte. Die Umsetzung basierte auf dem Univac Algol 60 Compiler. Simula I war bis Januar 1965 im Univac 1107 voll funktionsfähig. In den folgenden Jahren verbrachten Dahl und Nygaard viel Zeit damit, Simula zu unterrichten. Simula verbreitete sich auf mehrere Länder auf der ganzen Welt und Simula, die ich später auf anderen Computern einschließlich der implementiert wurde Burroughs B5500 und der Russisch Ural-16.
1966 C. A. R. Hoare stellte das Konzept der Plattenklassenkonstrukt vor, das Dahl und Nygaard mit dem Konzept des Präfixings und anderer Merkmale erweiterten, um ihre Anforderungen für ein verallgemeinertes Prozesskonzept zu erfüllen. Dahl und Nygaard präsentierten ihre Zeitung auf Klasse und Unterklasse Erklärungen auf der IFIP -Arbeitskonferenz am Simulationssprachen in OsloMai 1967. Dieses Papier wurde die erste formale Definition von Simula 67. Im Juni 1967 wurde eine Konferenz abgehalten, um die Sprache zu standardisieren und eine Reihe von Implementierungen zu initiieren. Dahl schlug vor, die zu vereinen Typ und das Klassenkonzept. Dies führte zu ernsthaften Diskussionen, und der Vorschlag wurde vom Vorstand abgelehnt. Simula 67 wurde beim ersten Treffen der Simula Standards Group (SSG) im Februar 1968 offiziell standardisiert.
Simula war einflussreich bei der Entwicklung von Smalltalk und später Objekt orientierte Programmierung Sprachen. Es hat auch dazu beigetragen, die zu inspirieren Schauspielermodell von gleichzeitiger Berechnung, obwohl Simula nur unterstützt Coroutinen und nicht wahr Parallelität.[7]
In den späten sechziger und frühen siebziger Jahren gab es vier Hauptimplementierungen von Simula:
- Univac 1100 von Norwegisches Computerzentrum (NCC)
- System/360 und System/370 von NCC
- CDC 3000 durch Universität von OsloDie gemeinsame Computerinstallation bei Kjeller
- Tops-10 durch Schwedisches National Defense Research Institute (FOA)
Diese Implementierungen wurden auf eine breite Palette von Plattformen portiert. Das Tops-10 Implementierte das Konzept der Variablen und Verfahren für öffentliche, geschützte und private Mitgliedsmitglieder, die später in Simula 87 integriert wurde. Simula 87 ist der neueste Standard und ist auf eine breite Palette von Plattformen portiert. Es gibt hauptsächlich vier Implementierungen:
Im November 2001 erhielten Dahl und Nygaard die IEEE John von Neumann -Medaille bis zum Institut für Elektro- und Elektronikingenieure "Für die Einführung der Konzepte, die die objektorientierte Programmierung durch das Design und die Implementierung von Simula 67 zugrunde liegen". Im April 2002 erhielten sie 2001 A. M. Turing Award bis zum Verband für Rechenmaschinen (ACM) mit dem Zitat: "Für Ideen, die für die Entstehung objektorientierter Programmierung von grundlegender Bedeutung sind, durch die Gestaltung der Programmiersprachen Simula I und Simula 67." Dahl und Nygaard starben im Juni und August dieses Jahres. [10] Vor dem ACM Turing Award Lecture[11] Das sollte im November 2002 geliefert werden Oopsla Konferenz in Seattle.
Simula Research Laboratory ist ein Forschungsinstitut benannt nach der Simula-Sprache, und Nygaard hatte dort eine Teilzeitposition von der Eröffnung im Jahr 2001 innehatte Universität von Oslo wird zum Haus von Ole Johan Dahl zu Dahls Ehren genannt, und das Haupt Auditorium heißt Simula.
Beispielcode
Minimales Programm
Die leere Computerdatei ist das minimale Programm in Simula, gemessen an der Größe der Quellcode. Es besteht nur aus einer Sache; Ein Dummy Aussage.
Das minimale Programm ist jedoch bequemer als leerer Block dargestellt:
Start Ende;
Es beginnt auszuführen und endet sofort. Der Sprache fehlt keine Rückgabewert Aus dem Programm.
Klassische Hallo Welt
Ein Beispiel für a Hallo Weltprogramm in Simula:
Start Outtext ("Hallo Welt!"); Outimage;Ende;
Simula ist Fall-unempfindlich.
Klassen, Unterklassen und virtuelle Verfahren
Ein realistischeres Beispiel bei der Verwendung von Klassen,[1]: 1.3.3, 2 Unterklassen[1]: 2.2.1 und virtuelle Verfahren:[1]: 2.2.3
Start Klasse Glyphe; Virtuell: Verfahren drucken Ist Verfahren drucken;; Start Ende; Glyphe Klasse Char (c); Charakter c; Start Verfahren drucken; Outchar (c); Ende; Glyphe Klasse Linie (Elemente); Ref (Glyphe) Array Elemente; Start Verfahren drucken; Start Ganze Zahl ich; Zum I: = 1 Schritt 1 Bis um Oberfläche (Elemente, 1) Tun Elemente (i) .Print; Ausfall; Ende; Ende; Ref (Glyphe) Rg; Ref (Glyphe) Array RGS (1: 4); ! Hauptprogramm; rgs (1):- Neu Char ('a'); rgs (2):- Neu Char ('b'); RGS (3):- Neu Char ('b'); rgs (4):- Neu Char ('a'); RG:- Neu Linie (RGS); rg.print;Ende;
Das obige Beispiel hat eins Superklasse (Glyphe) mit zwei Unterklassen (Verkohlen
und Linie
). Da ist einer Virtuelle Prozedur mit zwei Implementierungen. Die Ausführung beginnt mit der Ausführung des Hauptprogramms. Simula fehlt das Konzept von Abstrakte KlassenDa Klassen mit reinem Unterricht Virtuelle Verfahren kann sein instanziiert. Dies bedeutet, dass im obigen Beispiel alle Klassen instanziiert werden können. Das Aufrufen eines reinen virtuellen Verfahrens erzeugt jedoch a Laufzeit Error.
Rufen Sie mit dem Namen an
Simula unterstützt Rufen Sie mit dem Namen an[1]: 8.2.3 Also die Jensens Gerät kann leicht implementiert werden. Der Standardübertragungsmodus für einfachen Parameter ist jedoch Rufen Sie nach Wert an, gegensätzlich zu Algol die verwendete Rufen Sie mit dem Namen an. Der Quellcode für das Gerät des Jensen muss daher angeben Rufen Sie mit dem Namen an für die Parameter, wenn sie von einem Simula -Compiler kompiliert werden.
Ein weiteres viel einfacheres Beispiel ist das Summierungsfunktion die wie folgt implementiert werden können:
Real Verfahren Sigma (K, M, N, U); Name k, u; Ganze Zahl K, M, n; Real u;Start Real s; k: = m; Während k <= n Tun Start S: = S + U; K: = K + 1; Ende; Sigma: = s;Ende;
Der obige Code verwendet verwendet Rufen Sie mit dem Namen an für die Kontrollvariable (k) und den Ausdruck (u). Auf diese Weise kann die Steuervariable im Ausdruck verwendet werden.
Beachten Sie, dass der Simula -Standard bestimmte Einschränkungen für die Steuervariable in a ermöglicht Für Schleife. Der obige Code verwendet daher eine while -Schleife für maximale Portabilität.
Folgende:
kann dann wie folgt implementiert werden:
Z: = Sigma (i, 1, 100, 1 / (i + a) ** 2);
Simulation
Simula enthält a Simulation[1]: 14.2 Paket für das Tun Diskrete Ereignissimulationen. Dieses Simulationspaket basiert auf den objektorientierten Funktionen von Simula und deren Coroutine[1]: 9.2 Konzept.
Sam, Sally und Andy kaufen Kleidung ein. Sie müssen einen Umkleidekabine teilen. Jeder von ihnen stöbert das Geschäft etwa 12 Minuten lang und verwendet dann den Umkleidekabine ausschließlich etwa drei Minuten, wobei jeweils eine Normalverteilung folgt. Eine Simulation ihres Umkleidekabinenerlebnisses ist wie folgt:
Simulation Start Klasse Umkleidekabine; Start Ref (Kopf) Tür; Boolesche in Benutzung; Verfahren Anfrage; Start Wenn in Benutzung Dann Start Warte (Tür); Tür.First.out; Ende; Inverseus: = WAHR; Ende; Verfahren verlassen; Start Inverseus: = FALSCH; aktivieren Sie Tür.Firste; Ende; Tür:- Neu Kopf; Ende; Verfahren Bericht (Nachricht); Text Botschaft; Start Outfix (Zeit, 2, 0); Outtext (":" & message); Ausfall; Ende; Verfahren Klasse Person (Pname); Text pname; Start Während WAHR Tun Start Hold (normal (12, 4, u)); Bericht (PNAME & "fordert den Umkleidekabine an"); Förderraum1.Request; Bericht (PNAME & "hat in die Umkleidekabine eingegeben"); Hold (normal (3, 1, u)); Förderraum1.Leave; Bericht (PNAME & "hat den Umkleidekabine verlassen"); Ende; Ende; Ganze Zahl u; Ref (Förderzimmer) Einrichtungsraum1; Einrichtenraum1:- Neu Umkleidekabine; aktivieren Sie Neu Person ("Sam"); aktivieren Sie Neu Person ("Sally"); aktivieren Sie Neu Person ("Andy"); Hold (100);Ende;
Der Hauptblock ist mit vorangestellt Simulation
zum Aktivieren von Simulation. Das Simulationspaket kann in jedem Block verwendet werden, und Simulationen können sogar verschachtelt werden, wenn jemand Simulationen durchführt.
Das Umkleideraumobjekt verwendet eine Warteschlange (Tür
) für den Zugang zum Umkleidekabine. Wenn jemand die Umkleidekabine anfordert und es verwendet wird, muss er in dieser Warteschlange warten (Warten Sie (Tür)
). Wenn jemand den Umkleidekabine verlässt, wird der erste (falls vorhanden) aus der Warteschlange freigesetzt (Tür aktivieren.First
) und dementsprechend aus der Türwarteschlange entfernt (Tür.First.out
).
Person ist eine Unterklasse von Verfahren
und seine Aktivität wird mit Hold beschrieben (Zeit zum Durchsuchen des Geschäfts und der Zeit, die im Umkleideraum verbracht werden) und die Verfahren im Umkleidekabine zum Anfordern und Verlassen des Umkleideraums aufrufen.
Das Hauptprogramm erstellt alle Objekte und aktiviert alle Personenobjekte, um sie in die Ereigniswarteschlange zu bringen. Das Hauptprogramm hält sich 100 Minuten simulierter Zeit, bevor das Programm endet.
Siehe auch
- Beta (Programmiersprache), ein moderner Nachfolger von Simula
Anmerkungen
- ^ a b c d e f g h i j k l m n Dahl, Ole-Johan; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Gemeinsame Basissprache (PDF) (Bericht). Norwegisches Computerzentrum. Archiviert vom Original am 2013-12-25. Abgerufen 17. November 2020.
{{}}
: CS1 Wartung: Ungeeignete URL (Link) - ^ Nygaard, Kristen (1978). "Die Entwicklung der Simula -Sprachen" (PDF).
Die Entwicklung von .. Simula I und Simula 67 ... wurden durch das Design von Simscript beeinflusst ...
- ^ Kristen Nygaard und Ole-Johan Dahl. 1978. Die Entwicklung der Simula -Sprachen. Geschichte der Programmiersprachen. Vereinigung für Computermaschinen, New York, NY, USA, 439–480. Doi:https://doi.org/10.1145/800025.1198392
- ^ Wong, William. "Vor C, was hast du benutzt?". Elektronisches Design. Abgerufen 22. Mai 2017.
- ^ Holmevik, Jan Rune (1994). "Simula zusammenstellen: Eine historische Studie der technologischen Genesis" (PDF). IEEE Annals of the History of Computing. 16 (4): 25–37. doi:10.1109/85.329756. S2CID 18148999. Abgerufen 12. Mai 2010.
- ^ Holmevik, Jan Rune. "Simula zusammenstellen". Oslo, Norwegen: Institut für Studien in Forschung und Hochschulbildung. Archiviert von das Original am 20. April 2009. Abgerufen 19. April 2017.
- ^ Lehrmann Madsen, Ole (2014)."Aufbau sicherer Parallelitätsabstraktionen".In Agha, Gul;Igarashi, Atsushi;Kobayashi, Naoki;Masuhara, HideHiko;Matsuoka, Satoshi;Shibayama, Etsuya;Taura, Kenjiro (Hrsg.). Gleichzeitige Objekte und darüber hinaus.Vorlesungsnotizen in Informatik.Vol.8665. Berlin: Springer.p.68. doi:10.1007/978-3-662-44471-9. ISBN 978-3-662-44471-9. S2CID 1000741.
- ^ "GNU CIM".
- ^ "Tragbare Simula überarbeitet". GitHub. Abgerufen 17. Juni 2019.
- ^ "ACM Ole -Johan Dahl und Kristen Nygaard - Nachruf". ACM.org. Archiviert von das Original am 19. Juli 2011. Abgerufen 14. Januar 2012.
- ^ "ACM Turing Award Lectures".Informatik.uni-Trier.de. Abgerufen 14. Januar 2012.
Quellen
- Sylvester, Peter. "IBM System 360/370 Compiler und historische Dokumentation" (Der Simula -Standard und andere historische Dokumentation).
Weitere Lektüre
- Pooley, Rob (1987), Eine Einführung in die Programmierung in SimulaAlfred Waller Ltd, ISBN 0632016116, archiviert von das Original Am 2004-09-19