Simula - Simula

Simula
Simula - logo.svg
Paradigmen Multiparadigma : prozedural , zwingend , strukturiert , objektorientiert
Familie ALGOL
Entworfen von Ole-Johan Dahl
Entwickler Kristen Nygaard
Erstmals erschienen 1962 ; Vor 59 Jahren ( 1962 )
Stabile Version
Simula 67, Simula I
Schreibdisziplin Statisch , Nominativ
Umfang Lexikalisches
Implementierungssprache ALGOL 60 (hauptsächlich; einige Komponenten Simscript )
Betriebssystem Unix-ähnlich , Windows , z/OS , TOPS-10 , MVS
Webseite www .simula67 .info
Beeinflusst von
ALGOL 60 , Simskript
Beeinflusst
Objektorientierte Programmiersprachen

Simula ist der Name von zwei Simulations Programmiersprachen , Simula I und Simula 67, an der in den 1960er Jahren entwickelt Norwegian Computing Center in Oslo , von Ole-Johan Dahl und Kristen Nygaard . Syntaktisch ist es eine ziemlich originalgetreue Obermenge von ALGOL 60 , auch beeinflusst vom Design von Simscript .

Simula 67 führte Objekte , Klassen , Vererbung und Unterklassen , virtuelle Prozeduren , Coroutinen und diskrete Ereignissimulation ein und bietet Garbage Collection . Auch andere Formen der Subtypisierung (neben der Vererbung von Unterklassen) wurden in Simula-Derivaten eingeführt.

Simula gilt als die erste objektorientierte Programmiersprache . Wie der Name schon sagt, war die erste Simula-Version von 1962 für Simulationen konzipiert ; Simula 67 wurde jedoch als Allzweck-Programmiersprache konzipiert und bot den Rahmen für viele der Funktionen objektorientierter Sprachen heute.

Simula wurde in einer Vielzahl von Anwendungen eingesetzt, wie z. B. bei der Simulation von Designs mit sehr großer Integration (VLSI), Prozessmodellierung , Kommunikationsprotokollen , Algorithmen und anderen Anwendungen wie Schriftsatz , Computergrafik und Bildung . Der Einfluss von Simula wird oft unterschätzt und Objekte vom Typ Simula werden in C++ , Object Pascal , Java , C# und vielen anderen Sprachen neu implementiert. Informatiker wie Bjarne Stroustrup , Schöpfer von C++, und James Gosling , Schöpfer von Java, haben Simula als großen Einfluss anerkannt.

Geschichte

Der folgende Bericht basiert auf dem historischen Essay von Jan Rune Holmevik.

Kristen Nygaard begann 1957 mit dem Schreiben von Computersimulationsprogrammen. Nygaard sah die Notwendigkeit, die Heterogenität und den Betrieb eines Systems besser zu beschreiben . Um seine Ideen zu einer formalen Computersprache zur Beschreibung eines Systems weiter zu verfolgen, erkannte Nygaard, dass er jemanden mit mehr Programmierkenntnissen brauchte, als er hatte. Ole-Johan Dahl schloss sich ihm im Januar 1962 bei seiner Arbeit an. Kurz darauf wurde die Entscheidung getroffen, die Sprache an ALGOL 60 anzubinden . Bis zum Mai 1962 die wichtigsten Konzepte für eine Simulationssprache wurden eingestellt. SIMULA I war geboren, eine spezielle Programmiersprache zur Simulation diskreter Ereignissysteme.

Kristen Nygaard wurde Ende Mai 1962 im Zusammenhang mit der Vermarktung ihres neuen Computers UNIVAC 1107 zu einem Besuch bei der Eckert-Mauchly Computer Corporation eingeladen . Bei diesem Besuch präsentierte Nygaard die Ideen von Simula Robert Bemer , dem Direktor für Systemprogrammierung bei Univac . Bemer war ein großer ALGOL- Fan und fand das Simula-Projekt überzeugend. Bemer war auch Vorsitzender einer Sitzung auf der zweiten internationalen Konferenz zur Informationsverarbeitung, die von der International Federation for Information Processing (IFIP) veranstaltet wurde. Er lud Nygaard ein, der das Paper "SIMULA – An Extension of ALGOL to the Description of Discrete-Event Networks" vorstellte.

Das norwegische Rechenzentrum bekam im August 1963 eine UNIVAC 1107 zu einem erheblichen Preisnachlass, auf der Dahl im Auftrag von UNIVAC die SIMULA I implementierte. Die Implementierung basierte auf dem Compiler UNIVAC ALGOL 60 . SIMULA I war bis Januar 1965 auf der UNIVAC 1107 voll einsatzfähig. In den folgenden Jahren verbrachten Dahl und Nygaard viel Zeit damit, Simula zu unterrichten. Simula verbreitete sich in mehreren Ländern auf der ganzen Welt und SIMULA I wurde später auf anderen Computern implementiert, darunter dem Burroughs B5500 und dem russischen Ural-16 .

1966 führte CAR Hoare das Konzept des Datensatzklassenkonstrukts ein, das Dahl und Nygaard um das Konzept der Präfixierung und anderer Merkmale erweiterten, um ihre Anforderungen an ein verallgemeinertes Prozesskonzept zu erfüllen. Dahl und Nygaard stellten ihr Papier über Klassen- und Unterklassendeklarationen auf der IFIP-Arbeitskonferenz über Simulationssprachen in Oslo im Mai 1967 vor. Dieses Papier wurde die erste formale Definition von Simula 67. Im Juni 1967 wurde eine Konferenz abgehalten, um die Sprache zu standardisieren und zu initiieren eine Reihe von Implementierungen. Dahl schlug vor, den Typ und das Klassenkonzept zu vereinheitlichen . Dies führte zu ernsthaften Diskussionen und der Vorschlag wurde vom Vorstand abgelehnt. Simula 67 wurde auf der ersten Sitzung der Simula Standards Group (SSG) im Februar 1968 offiziell standardisiert.

Simula war einflussreich bei der Entwicklung von Smalltalk und später objektorientierten Programmiersprachen . Es hat auch dazu beigetragen , das Akteurmodell der gleichzeitigen Berechnung zu inspirieren , obwohl Simula nur Koroutinen und keine echte Parallelität unterstützt .

In den späten sechziger und frühen siebziger Jahren gab es vier Hauptimplementierungen von Simula:

Diese Implementierungen wurden auf eine Vielzahl von Plattformen portiert. Das TOPS-10 implementierte das Konzept der öffentlichen, geschützten und privaten Member-Variablen und -Prozeduren, das später in Simula 87 integriert wurde. Simula 87 ist der neueste Standard und wird auf eine Vielzahl von Plattformen portiert. Es gibt hauptsächlich vier Implementierungen:

  • Simula AS
  • Lund-Simula
  • GNU-Cim
  • Tragbare Simulation erneut besucht

Im November 2001 wurde Dahl und Nygaard vom Institut für Elektro- und Elektronikingenieure die IEEE John von Neumann-Medaille "Für die Einführung der Konzepte der objektorientierten Programmierung durch das Design und die Implementierung von SIMULA 67" verliehen. Im April 2002 erhielten sie den AM Turing Award 2001 der Association for Computing Machinery (ACM) mit dem Zitat: „Für Ideen, die grundlegend für die Entstehung der objektorientierten Programmierung sind, durch ihr Design der Programmiersprachen Simula I und Simula 67. " Leider konnten es weder Dahl noch Nygaard zur ACM Turing Award Lecture schaffen, die im November 2002 auf der OOPSLA- Konferenz in Seattle gehalten werden sollte, da sie im Juni bzw. August dieses Jahres starben.

Das Simula Research Laboratory ist ein nach der Simula-Sprache benanntes Forschungsinstitut , an dem Nygaard seit seiner Eröffnung im Jahr 2001 eine Teilzeitstelle innehatte. Das neue Informatikgebäude an der Universität Oslo trägt den Namen Ole Johan Dahl's House, zu Ehren von Dahl, und das Hauptauditorium heißt Simula.

Beispielcode

Minimalprogramm

Die leere Computerdatei ist das minimale Programm in Simula, gemessen an der Größe des Quellcodes . Es besteht nur aus einer Sache; eine Dummy- Anweisung .

Das Minimalprogramm wird jedoch bequemer als leerer Block dargestellt:

Begin
End;

Es beginnt mit der Ausführung und wird sofort beendet. Der Sprache fehlt jeglicher Rückgabewert des Programms.

Klassische Hallo Welt

Ein Beispiel für ein Hello-World-Programm in Simula:

Begin
   OutText ("Hello, World!");
   Outimage;
End;

Bei Simula wird die Groß-/Kleinschreibung nicht beachtet .

Klassen, Unterklassen und virtuelle Prozeduren

Ein realistischeres Beispiel mit Verwendung von Klassen, Unterklassen und virtuellen Prozeduren:

Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;;
   Begin
   End;
   
   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;
   
   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i:= 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;
   
   Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);
   
   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;

Das obige Beispiel hat eine Superklasse (Glyph) mit zwei Unterklassen ( Charund Line). Es gibt ein virtuelles Verfahren mit zwei Implementierungen . Die Ausführung beginnt mit der Ausführung des Hauptprogramms. Simula fehlt der Begriff der abstrakten Klassen , da Klassen mit rein virtuellen Verfahren werden instanziiert . Das bedeutet, dass im obigen Beispiel alle Klassen instanziiert werden können. Eine rein virtuelle Prozedur aufrufen wird jedoch eine erzeugen Laufzeitfehler .

Rufen Sie mit Namen an

Simula unterstützt Call by Name, so dass das Jensen's Device einfach implementiert werden kann. Der Standardübertragungsmodus für einfache Parameter ist jedoch call by value , im Gegensatz zu ALGOL , das call by name verwendet . Der Quellcode für das Jensen's Device muss daher beim Kompilieren durch einen Simula-Compiler einen Aufruf mit Namen für die Parameter angeben .

Ein weiteres viel einfacheres Beispiel ist die Summenfunktion, die wie folgt implementiert werden kann:

Real Procedure Sigma (k, m, n, u);
   Name k, u;
   Integer k, m, n; Real u;
Begin
   Real s;
   k:= m;
   While k <= n Do Begin s:= s + u; k:= k + 1; End;
   Sigma:= s;
End;

Der obige Code verwendet Call by Name für die steuernde Variable (k) und den Ausdruck (u). Dadurch kann die steuernde Variable im Ausdruck verwendet werden.

Beachten Sie, dass der Simula-Standard bestimmte Einschränkungen für die steuernde Variable in einer for-Schleife zulässt . Der obige Code verwendet daher eine while-Schleife für maximale Portabilität.

Folgende:

kann dann wie folgt umgesetzt werden:

Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);

Simulation

Simula enthält ein Simulationspaket für diskrete Ereignissimulationen . Dieses Simulationspaket basiert auf den objektorientierten Funktionen von Simula und seinem Coroutinen- Konzept.

Sam, Sally und Andy kaufen Klamotten. Sie müssen sich eine Umkleidekabine teilen. Jeder von ihnen stöbert ca. 12 Minuten durch den Store und nutzt dann nach jeweils einer Normalverteilung ca. 3 Minuten exklusiv die Umkleidekabine. Eine Simulation ihrer Erfahrung in der Umkleidekabine sieht wie folgt aus:

Simulation Begin
   Class FittingRoom; Begin
      Ref (Head) door;
      Boolean inUse;
      Procedure request; Begin
         If inUse Then Begin
             Wait (door);
             door.First.Out;
         End;
         inUse:= True;
      End;
      Procedure leave; Begin
         inUse:= False;
         Activate door.First;
      End;
      door:- New Head;
   End;
   
   Procedure report (message); Text message; Begin
      OutFix (Time, 2, 0); OutText (": " & message); OutImage;
   End;
   
   Process Class Person (pname); Text pname; Begin
      While True Do Begin
         Hold (Normal (12, 4, u));
         report  (pname & " is requesting the fitting room");
         fittingroom1.request;
         report (pname & " has entered the fitting room");
         Hold (Normal (3, 1, u));
         fittingroom1.leave;
         report (pname & " has left the fitting room");
      End;
   End;
   
   Integer u;
   Ref (FittingRoom) fittingRoom1;
   
   fittingRoom1:- New FittingRoom;
   Activate New Person ("Sam");
   Activate New Person ("Sally");
   Activate New Person ("Andy");
   Hold (100);
End;

Der Hauptblock wird mit vorangestellt, Simulationum die Simulation zu ermöglichen. Das Simulationspaket kann auf jedem Block verwendet werden und Simulationen können sogar verschachtelt werden, wenn jemand simuliert, der Simulationen durchführt.

Das Umkleideobjekt verwendet eine Warteschlange ( door), um Zugang zur Umkleidekabine zu erhalten. Wenn jemand den Umkleideraum anfordert und dieser genutzt wird, muss er in dieser Warteschlange ( Wait (door)) warten . Wenn jemand die Umkleidekabine verlässt, wird der Erste (sofern vorhanden) aus der Warteschlange ( Activate door.first) und dementsprechend aus der Türwarteschlange ( door.First.Out) entfernt.

Person ist eine Unterklasse von Processund ihre Aktivität wird durch Halten (Zeit zum Durchsuchen des Ladens und in der Umkleide verbrachte Zeit) beschrieben und ruft Prozeduren im Umkleideobjekt zum Anfordern und Verlassen der Umkleide auf.

Das Hauptprogramm erstellt alle Objekte und aktiviert alle Personenobjekte, um sie in die Ereigniswarteschlange zu stellen. Das Hauptprogramm hält 100 Minuten simulierte Zeit, bevor das Programm beendet wird.

Siehe auch

Anmerkungen

Quellen

Weiterlesen

Externe Links