Simula - Simula

Simula
Simula - logo.svg
Paradigmer Multi-paradigm : procedurellt , imperativt , strukturerat , objektorienterat
Familj ALGOL
Designad av Ole-Johan Dahl
Utvecklare Kristen Nygaard
Uppträdde först 1962 ; För 59 år sedan ( 1962 )
Stabil frisättning
Simula 67, Simula I
Skrivdisciplin Statisk , nominativ
Omfattning Lexikalisk
Implementeringsspråk ALGOL 60 (främst; vissa komponenter Simscript )
OS Unix-liknande , Windows , z / OS , TOPS-10 , MVS
Hemsida www .simula67 .info
Påverkad av
ALGOL 60 , Simscript
Påverkad
Objektorienterade programmeringsspråk

Simula är namnet på två simulering programmeringsspråk , Simula I och Simula 67, som utvecklats under 1960-talet på norska Computing Center i Oslo , med Ole-Johan Dahl och Kristen Nygaard . Syntaktiskt är det en ganska trogen superset av ALGOL 60 , även påverkad av utformningen av Simscript .

Simula 67 introducerade objekt , klasser , arv och underklasser , virtuella procedurer , coroutines och diskret händelsesimulering och har skräpsamling . Även andra former av undertypning (förutom att ärva underklasser) introducerades i Simula-derivat.

Simula anses vara det första objektorienterade programmeringsspråket . Som namnet antyder var den första Simula-versionen från 1962 avsedd för simuleringar ; Simula 67 var dock utformad för att vara ett allmänt programmeringsspråk och gav ramen för många av funktionerna i objektorienterade språk idag.

Simula har använts i ett brett spektrum av applikationer, såsom simulering av VLSI-design i mycket stor skala , processmodellering , kommunikationsprotokoll , algoritmer och andra applikationer som typsättning , datorgrafik och utbildning . Simulas inflytande är ofta underskattad och objekt av Simula-typ implementeras på nytt i C ++ , Object Pascal , Java , C # och många andra språk. Dataforskare som Bjarne Stroustrup , skapare av C ++, och James Gosling , skapare av Java, har erkänt Simula som ett stort inflytande.

Historia

Följande redogörelse är baserad på Jan Rune Holmeviks historiska uppsats.

Kristen Nygaard började skriva datasimuleringsprogram 1957. Nygaard såg ett behov av ett bättre sätt att beskriva heterogeniteten och driften av ett system. För att gå vidare med sina idéer om ett formellt datorspråk för att beskriva ett system insåg Nygaard att han behövde någon med mer datorprogrammeringsförmåga än han hade. Ole-Johan Dahl gick med i hans arbete i januari 1962. Beslutet att koppla språket till ALGOL 60 fattades strax efter. I maj 1962 de viktigaste begreppen för en simulering språk sattes. SIMULA I was born, ett speciellt programmeringsspråk för simulering av diskreta händelsessystem.

Kristen Nygaard blev inbjuden att besöka Eckert – Mauchly Computer Corporation i slutet av maj 1962 i samband med marknadsföringen av deras nya UNIVAC 1107- dator. Vid det besöket presenterade Nygaard Simulas idéer för Robert Bemer , chef för systemprogrammering på Univac . Bemer var ett stort ALGOL- fan och fann Simula-projektet övertygande. Bemer var också ordförande för en session vid den andra internationella konferensen om informationsbehandling av International Federation for Information Processing (IFIP). Han bjöd in Nygaard, som presenterade tidningen "SIMULA - An Extension of ALGOL to the Description of Discrete-Event Networks".

Den norska Computing Center fick en UNIVAC 1107 i augusti 1963 vid en betydande rabatt, som Dahl genomfört Simula I under kontrakt med UNIVAC. Implementeringen baserades på UNIVAC ALGOL 60- kompilatorn. SIMULA I var fullt operativ på UNIVAC 1107 i januari 1965. Under de följande åren tillbringade Dahl och Nygaard mycket tid på att lära Simula. Simula spred sig till flera länder runt om i världen och SIMULA I implementerades senare på andra datorer inklusive Burroughs B5500 och ryska Ural-16 .

1966 introducerade CAR Hoare konceptet rekordklasskonstruktion, som Dahl och Nygaard utvidgade med begreppet prefix och andra funktioner för att möta deras krav på ett generaliserat processkoncept. Dahl och Nygaard presenterade sin uppsats om klass- och underklassdeklarationer vid IFIP: s arbetskonferens om simuleringsspråk i Oslo , maj 1967. Denna uppsats blev den första formella definitionen av Simula 67. I juni 1967 hölls en konferens för att standardisera språket och initiera ett antal implementeringar. Dahl föreslog att man skulle förena typen och klasskonceptet. Detta ledde till allvarliga diskussioner och förslaget avvisades av styrelsen. Simula 67 standardiserades formellt vid det första mötet i Simula Standards Group (SSG) i februari 1968.

Simula var inflytelserik i utvecklingen av Smalltalk och senare objektorienterade programmeringsspråk . Det hjälpte också till att inspirera skådespelarmodellen för samtidig beräkning även om Simula bara stöder coroutines och inte sann samtidighet .

I slutet av sextiotalet och början av sjuttiotalet fanns det fyra huvudimplementeringar av Simula:

Dessa implementeringar portades till ett brett spektrum av plattformar. De TOPS-10 genomförs begreppet allmän, skyddad och privata medlemsvariabler och förfaranden, som senare integreras i Simula 87. Simula 87 är den senaste standarden och portas till ett brett spektrum av plattformar. Det finns huvudsakligen fyra implementeringar:

  • Simula AS
  • Lund Simula
  • GNU Cim
  • Portable Simula Revisited

I november 2001 tilldelades Dahl och Nygaard IEEE John von Neumann-medaljen av Institute of Electrical and Electronics Engineers "För introduktionen av begreppen bakom objektorienterad programmering genom design och implementering av SIMULA 67". I april 2002 fick de 2001 års Turing Award av Association for Computing Machinery (ACM), med citatet: "För idéer som är grundläggande för framväxten av objektorienterad programmering, genom sin design av programmeringsspråken Simula I och Simula 67. " Tyvärr kunde varken Dahl eller Nygaard nå fram till ACM Turing Award Lecture, som planeras levereras vid OOPSLA- konferensen i Seattle i november 2002 , eftersom de dog i juni respektive augusti samma år.

Simula Research Laboratory är ett forskningsinstitut uppkallat efter Simula-språket och Nygaard hade en deltidsställning där från öppningen 2001. Den nya datavetenskapliga byggnaden vid Universitetet i Oslo heter Ole Johan Dahls hus, till Dahls ära, och huvudsalongen heter Simula.

Exempelkod

Minimalt program

Den tomma datafilen är det minimala programmet i Simula, mätt med källkodens storlek . Den består bara av en sak; ett dummy uttalande .

Det minimala programmet representeras dock mer bekvämt som ett tomt block:

Begin
End;

Det börjar köra och upphör omedelbart. Språket saknar något returvärde från programmet.

Klassisk Hejvärld

Ett exempel på ett Hello-världsprogram i Simula:

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

Simula är skiftlägeskänslig .

Klasser, underklasser och virtuella procedurer

Ett mer realistiskt exempel med användning av klasser, underklasser och virtuella procedurer:

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;

Ovanstående exempel har en superklass (Glyph) med två underklasser ( Charoch Line). Det finns ett virtuellt förfarande med två implementeringar . Körningen börjar med att köra huvudprogrammet. Simula saknar begreppet abstrakta klasser , eftersom klasser med rena virtuella procedurer kan instansieras . Detta betyder att i ovanstående exempel kan alla klasser instansieras. Ringa en ren virtuell förfarande kommer dock fram en run-time fel .

Ring efter namn

Simula stöder anrop med namn så att Jensens enhet enkelt kan implementeras. Standardöverföringsläget för enkel parameter är emellertid samtal efter värde , i motsats till ALGOL som använde samtal med namn . Källkoden för Jensens enhet måste därför ange anrop efter namn för parametrarna när de sammanställs av en Simula-kompilator.

Ett annat mycket enklare exempel är summeringsfunktionen som kan implementeras enligt följande:

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;

Ovanstående kod använder anrop efter namn för den styrande variabeln (k) och uttrycket (u). Detta gör att den kontrollerande variabeln kan användas i uttrycket.

Observera att Simula-standarden tillåter vissa begränsningar för den kontrollerande variabeln i en for-loop . Ovanstående kod använder därför en stundslinga för maximal bärbarhet.

Det följande:

kan sedan implementeras enligt följande:

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

Simulering

Simula innehåller ett simuleringspaket för att göra diskreta händelsesimuleringar . Detta simuleringspaket är baserat på Simulas objektorienterade funktioner och dess coroutine- koncept.

Sam, Sally och Andy handlar kläder. De måste dela ett inredningsrum. Var och en av dem surfar i butiken i cirka 12 minuter och använder sedan inredningsrummet uteslutande i cirka tre minuter, var och en följer en normal distribution. En simulering av deras passande rumsupplevelse är som följer:

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;

Huvudblocket är prefixat Simulationför att möjliggöra simulering. Simuleringspaketet kan användas i alla block och simuleringar kan till och med kapslas när man simulerar någon som gör simuleringar.

Inredningsrummet använder en kö ( door) för att få tillgång till inredningsrummet. När någon begär inredningsrummet och det är i bruk måste de vänta i den här kön ( Wait (door)). När någon lämnar inredningsrummet släpps den första (om någon) från kön ( Activate door.first) och tas därefter bort från dörrkön ( door.First.Out).

Personen är en underklass av Processoch dess aktivitet beskrivs med hjälp av håll (tid för att bläddra i butiken och tid i tillpassningsrummet) och anropar procedurer i inredningsrummet för att begära och lämna inredningsrummet.

Huvudprogrammet skapar alla objekt och aktiverar alla personobjekt för att placera dem i händelsekön. Huvudprogrammet håller i 100 minuter simulerad tid innan programmet avslutas.

Se även

Anteckningar

Källor

Vidare läsning

externa länkar