Simula - Simula

Simula
Simula - logo.svg
Paradigmák Multi-paradigma : eljárási , imperatív , strukturált , objektum-orientált
Család ALGOL
Tervezte Ole-Johan Dahl
Fejlesztő Kristen Nygaard
Először jelent meg 1962 ; 59 évvel ezelőtt ( 1962 )
Stabil kiadás
67. sz., I. sz
Gépelési fegyelem Statikus , névleges
Hatály Lexikális
Végrehajtási nyelv ALGOL 60 (elsősorban; egyes összetevők Simscript )
OS Unix-szerű , Windows , z / OS , TOPS-10 , MVS
Weboldal www .simula67 .info
Befolyásolta
ALGOL 60 , Simscript
Befolyásolt
Objektumorientált programozási nyelvek

Simula a neve két szimulációs programozási nyelvek , Simula I. és Simula 67, kialakult az 1960-as években a norvég Computing Center in Oslo , a Ole-Johan Dahl és Kristen Nygaard . Szintaktikailag , ez egy meglehetősen hű felülbírálja a ALGOL 60 , szintén befolyásolja a design Simscript .

A Simula 67 bemutatott objektumokat , osztályokat , öröklődési és alosztályokat , virtuális eljárásokat , korutinokat és diszkrét eseményszimulációkat , valamint szemétszedést tartalmaz . A szubtípusok más formáit (az alosztályok öröklése mellett) vezették be a Simula-származékokban.

A Simulát tekintik az első objektum-orientált programozási nyelvnek . Ahogy a neve is mutatja, az első Simula verziót 1962-re szimulációk készítésére tervezték ; A Simula 67-et úgy tervezték, hogy általános célú programozási nyelv legyen, és az objektum-orientált nyelvek számos jellemzőjének keretet biztosított.

A Simulát számos alkalmazásban alkalmazták, például a nagyon nagyszabású integrációs (VLSI) tervek szimulálásában , folyamatmodellezésben , kommunikációs protokollokban , algoritmusokban és más alkalmazásokban, például a szedés , a számítógépes grafika és az oktatás területén . A Simula hatása gyakran alulértékelt, és a Simula típusú objektumokat C ++ , Object Pascal , Java , C # és még sok más nyelven hajtják végre . Számítástechnikusok, mint például Bjarne Stroustrup , a C ++ készítője és James Gosling , a Java alkotója, elismerték, hogy Simula jelentős hatással van.

Történelem

A következő beszámoló Jan Rune Holmevik történelmi esszéjén alapul.

Kristen Nygaard 1957-ben kezdett el számítógépes szimulációs programokat írni. Nygaard szükségét látta a rendszer heterogenitásának és működésének jobb leírására . Ahhoz, hogy menjen tovább az ő elképzeléseit a hivatalos számítógépes nyelv leírására egy olyan rendszer, Nygaard rájött, hogy szüksége van valakire, több számítógépes programozási ismeretek, mint neki. Ole-Johan Dahl 1962 januárjában csatlakozott hozzá a munkájához. Nem sokkal később meghozták a döntést a nyelv és az ALGOL 60 összekapcsolásáról . 1962 májusáig meghatározták a szimulációs nyelv fő fogalmait . SIMULA Születtem , egy speciális programozási nyelv diszkrét eseményrendszerek szimulálására.

Kristen Nygaard meghívást kapott az Eckert – Mauchly Computer Corporation látogatására 1962. május végén az új UNIVAC 1107 számítógépük marketingjével kapcsolatban . Ezen a látogatáson Nygaard bemutatta Simula ötleteit Robert Bemernek , az Univac rendszerprogramozási igazgatójának . Bemer nagyszerű rajongó volt az ALGOL-ban, és meggyőzőnek találta a Simula projektet. Bemer a Nemzetközi Információs Feldolgozási Szövetség (IFIP) által szervezett, az információfeldolgozásról szóló második nemzetközi konferencia egyik elnöke volt . Meghívta Nygaardot, aki bemutatta a "SIMULA - Az ALGOL kiterjesztése a diszkrét eseményhálózatok leírásához" című cikket.

A norvég számítástechnikai központ 1963 augusztusában jelentős kedvezménnyel kapott egy UNIVAC 1107- et, amelyen Dahl az UNIVAC-val kötött szerződés alapján megvalósította a SIMULA I-t. A megvalósítás az UNIVAC ALGOL 60 fordítón alapult . SIMULA I. 1965 januárjáig teljes mértékben működőképes voltam az UNIVAC 1107-en. A következő években Dahl és Nygaard sok időt töltött Simula tanításával. A Simula elterjedt a világ több országában, és a SIMULA I-t később más számítógépeken is megvalósították, beleértve a Burroughs B5500-at és az orosz Ural-16-ot .

1966-ban a CAR Hoare bevezette a rekord osztályú konstrukció fogalmát, amelyet Dahl és Nygaard kiterjesztett az előtag és más jellemzők koncepciójával, hogy megfeleljenek az általános folyamatkoncepció követelményeinek. Dahl és Nygaard az osztály- és alosztály- nyilatkozatokról szóló tanulmányukat az IFIP szimulációs nyelvek munkakonferenciáján , Oslóban , 1967 májusában mutatták be . Ez a tanulmány a Simula 67 első hivatalos definíciója lett. 1967 júniusában konferenciát tartottak a nyelv egységesítésére és a számos megvalósítás. Dahl javasolta a típus és az osztály koncepciójának egységesítését . Ez komoly vitákhoz vezetett, a javaslatot a testület elutasította. A Simula 67-et hivatalosan szabványosították a Simula Standards Group (SSG) első találkozóján, 1968 februárjában.

Simula nagy hatással volt a Smalltalk és később az objektumorientált programozási nyelvek fejlesztésére. Ez segített inspirálni az egyidejű számítás színész modelljét is , bár a Simula csak a koroutinokat támogatja, és nem a valódi egyidejűséget .

A hatvanas évek végén és a hetvenes évek elején a Simula négy fő megvalósítását valósították meg:

Ezeket a megvalósításokat számos platformra portálták. A TOPS-10 a nyilvános, a védett és a magán tagok változóinak és eljárásainak koncepcióját valósította meg, amelyet később a Simula 87-be integráltak. A Simula 87 a legújabb szabvány, és sokféle platformra hordozható. Főleg négy megvalósítás létezik:

  • Simula AS
  • Lund Simula
  • GNU Cim
  • Hordozható Simula Revisited

2001 novemberében Dahl és Nygaard kapott a IEEE Neumann János-érem az IEEE „Az fogalmának bevezetése alapjául szolgáló objektum-orientált programozás kialakításával és végrehajtásával Simula 67”. 2002 áprilisában megkapták a 2001-es AM Turing-díj A Association for Computing Machinery (ACM), a idézet: „Az ötleteket alapvető megjelenése a objektumorientált programozás, kialakításuk a programozási nyelvek Simula I. és Simula 67. " Sajnos sem Dahl, sem Nygaard nem tudott bekerülni az ACM Turing Award előadására, amelyet a tervek szerint a 2002. novemberi OOPSLA konferencián tartottak Seattle-ben, mivel az adott év júniusában és augusztusában elhunytak.

Simula Research Laboratory egy kutatóintézet elnevezett Simula nyelv és Nygaard tartott részmunkaidőben helyzetben van, a nyitás 2001-ben az új Computer Science épületben University of Oslo nevű Ole Johan Dahl House, a Dahl tisztesség és a fő előadóterem neve Simula.

Minta kód

Minimális program

Az üres számítógépes fájl a Simula minimális programja , a forráskód méretével mérve . Csak egy dologból áll; dummy nyilatkozat .

A minimális programot azonban kényelmesebb üres blokkként ábrázolni:

Begin
End;

Megkezdi a végrehajtást és azonnal leáll. A nyelv nem tartalmaz semmilyen visszatérési értéket a programból.

Klasszikus Hello világ

Példa a Hello világ Simula programjára :

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

Simula nem érzékeny a kis- és nagybetűkre .

Osztályok, alosztályok és virtuális eljárások

Reálisabb példa osztályok, alosztályok és virtuális eljárások használatával:

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;

A fenti példának van egy szuper osztálya (Glyph), két alosztályával ( Charés Line). Egy virtuális eljárás létezik , két megvalósítással . A végrehajtás a fő program futtatásával kezdődik. Simula hiányzik a koncepció absztrakt osztályok , mivel osztályok tiszta virtuális eljárásokat lehet példányai . Ez azt jelenti, hogy a fenti példában minden osztály példányosítható. A tiszta virtuális eljárás meghívása azonban futásidejű hibát eredményez .

Hívás név szerint

A Simula név szerint támogatja a hívást, így a Jensen készüléke egyszerűen megvalósítható. Azonban az alapértelmezett átviteli mód az egyszerű paraméter hívás érték ellentétben ALGOL amely korábban hívás név szerint . A Jensen-eszköz forráskódjának ezért név szerint kell megadnia a paraméterek számára a Simula fordító által összeállított hívást .

Egy másik sokkal egyszerűbb példa az összegző függvény, amely a következőképpen valósítható meg:

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;

A fenti kód név szerint hívja a vezérlő változót (k) és az (u) kifejezést. Ez lehetővé teszi a vezérlő változó használatát a kifejezésben.

Ne feledje, hogy a Simula szabvány bizonyos korlátozásokat engedélyez a vezérlő változóra a for ciklusban . A fenti kód tehát egy while ciklust használ a maximális hordozhatóság érdekében.

A következő:

ezután a következőképpen lehet megvalósítani:

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

Szimuláció

A Simula tartalmaz egy szimulációs csomagot diszkrét eseményszimulációk elvégzéséhez . Ez a szimulációs csomag a Simula objektum-orientált szolgáltatásain és koroutin koncepcióján alapszik .

Sam, Sally és Andy ruhákat vásárol. Egy közös szobával kell rendelkezniük. Mindegyikük kb. 12 percig böngészi az üzletet, majd csak kb. Három percig használja az öltözőt, normál eloszlást követve. Az illeszkedő helyiség tapasztalata a következő:

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;

A fő blokk előtagja a Simulationszimuláció engedélyezéséhez. A szimulációs csomag bármely blokkon használható, és a szimulációk akár egymásba is ágyazódhatnak, ha szimulálunk valakit, aki szimulációkat végez.

Az illesztőhelyi objektum egy várólistát ( door) használ a bejárathoz az illesztőszobába. Amikor valaki igényli az illesztőhelyiséget, és az használatban van, várnia kell ebben a sorban ( Wait (door)). Amikor valaki elhagyja az idomító helyiséget, az első (ha van ilyen) felszabadul a sorból ( Activate door.first), és ennek megfelelően eltávolításra kerül az ajtó sorából ( door.First.Out).

A személy egy alosztály, Processés tevékenységét a hold (az üzlet böngészéséhez szükséges idő és az öltözőben töltött idő) és az illesztőhelyiségben történő behívási eljárások segítségével írják le az illesztőhely igénylésére és elhagyására.

A fő program létrehozza az összes objektumot, és aktiválja az összes személy objektumot, hogy az eseménysorba kerüljön. A fő program 100 perc szimulált ideig tart, mielőtt a program befejeződik.

Lásd még

Megjegyzések

Források

További irodalom

Külső linkek