Simula - Simula

Simula
Simula - logo.svg
Paradigme Multi-paradigmă : procedurală , imperativă , structurată , orientată spre obiect
Familie ALGOL
Proiectat de Ole-Johan Dahl
Dezvoltator Kristen Nygaard
A apărut prima dată 1962 ; Acum 59 de ani ( 1962 )
Versiune stabila
Simula 67, Simula I
Disciplina de tastare Static , nominativ
Domeniul de aplicare Lexical
Limbajul de implementare ALGOL 60 (în principal; unele componente Simscript )
OS Unix-like , Windows , z / OS , TOPS-10 , MVS
Site-ul web www .simula67 .info
Influențată de
ALGOL 60 , Simscript
Influențat
Limbaje de programare orientate pe obiecte

Simula este numele a două limbaje de programare de simulare , Simula I și Simula 67, dezvoltate în anii 1960 la Centrul de Calcul Norvegian din Oslo , de Ole-Johan Dahl și Kristen Nygaard . Din punct de vedere sintactic , este un superset destul de fidel al ALGOL 60 , influențat și de designul Simscript .

Simula 67 a introdus obiecte , clase , moștenire și subclasă , proceduri virtuale , coroutine și simulare de evenimente discrete și prezintă colectarea gunoiului . De asemenea, alte forme de subtipare (în afară de moștenirea subclaselor) au fost introduse în derivatele Simula.

Simula este considerat primul limbaj de programare orientat pe obiecte . După cum sugerează și numele, prima versiune Simula din 1962 a fost concepută pentru a face simulări ; Totuși, Simula 67 a fost conceput pentru a fi un limbaj de programare cu scop general și a oferit cadrul pentru multe dintre caracteristicile limbajelor orientate obiect în prezent.

Simula a fost utilizat într-o gamă largă de aplicații, cum ar fi simularea proiectărilor de integrare la scară foarte mare (VLSI), modelarea proceselor , protocoale de comunicații , algoritmi și alte aplicații, cum ar fi tipărirea , grafica computerizată și educația . Influența lui Simula este adesea subevaluată, iar obiectele de tip Simula sunt reimplementate în C ++ , Object Pascal , Java , C # și multe alte limbaje. Informaticieni precum Bjarne Stroustrup , creatorul C ++ și James Gosling , creatorul Java, au recunoscut Simula ca fiind o influență majoră.

Istorie

Următorul cont se bazează pe eseul istoric al lui Jan Rune Holmevik.

Kristen Nygaard a început să scrie programe de simulare pe computer în 1957. Nygaard a văzut nevoia unei modalități mai bune de a descrie eterogenitatea și funcționarea unui sistem. Pentru a merge mai departe cu ideile sale despre un limbaj informatic formal pentru descrierea unui sistem, Nygaard și-a dat seama că are nevoie de cineva cu mai multe abilități de programare pe computer decât avea. Ole-Johan Dahl i s-a alăturat lucrării sale în ianuarie 1962. Decizia de a lega limba de ALGOL 60 a fost luată la scurt timp. Până în mai 1962, au fost stabilite principalele concepte pentru un limbaj de simulare . SIMULA I s-a născut, un limbaj de programare special pentru simularea sistemelor discrete de evenimente.

Kristen Nygaard a fost invitată să viziteze Eckert – Mauchly Computer Corporation la sfârșitul lunii mai 1962 în legătură cu comercializarea noului computer UNIVAC 1107 . La acea vizită, Nygaard i-a prezentat ideile lui Simula lui Robert Bemer , directorul programării sistemelor de la Univac . Bemer a fost un mare fan ALGOL și a găsit convingător proiectul Simula. Bemer a fost, de asemenea, președintele unei sesiuni la cea de-a doua conferință internațională privind prelucrarea informațiilor găzduită de Federația Internațională pentru Prelucrarea Informației (IFIP). El l-a invitat pe Nygaard, care a prezentat lucrarea „SIMULA - An Extension of ALGOL to the Description of Discrete-Event Networks”.

Centrul norvegian de calcul a primit un UNIVAC 1107 în august 1963 cu o reducere considerabilă, pe care Dahl a implementat SIMULA I în contract cu UNIVAC. Implementarea sa bazat pe compilatorul UNIVAC ALGOL 60 . SIMULA I a fost pe deplin operațional pe UNIVAC 1107 până în ianuarie 1965. În următorii câțiva ani, Dahl și Nygaard au petrecut mult timp predând Simula. Simula s-a răspândit în mai multe țări din întreaga lume și SIMULA I a fost ulterior implementat pe alte computere, inclusiv Burroughs B5500 și Russian Ural-16 .

În 1966, CAR Hoare a introdus conceptul de construcție de clasă record, pe care Dahl și Nygaard l-au extins cu conceptul de prefixare și alte caracteristici pentru a îndeplini cerințele lor pentru un concept de proces generalizat. Dahl și Nygaard și-au prezentat lucrarea privind declarațiile de clasă și subclasă la Conferința de lucru IFIP privind limbajele de simulare din Oslo , mai 1967. Această lucrare a devenit prima definiție formală a Simula 67. În iunie 1967, a avut loc o conferință pentru standardizarea limbii și inițierea o serie de implementări. Dahl a propus să unifice tipul și conceptul de clasă. Acest lucru a dus la discuții serioase, iar propunerea a fost respinsă de consiliu. Simula 67 a fost standardizat în mod oficial la prima întâlnire a Grupului de standarde Simula (SSG) din februarie 1968.

Simula a influențat în dezvoltarea Smalltalk și ulterior limbaje de programare orientate pe obiecte . De asemenea, a ajutat la inspirarea modelului actoric de calcul simultan, deși Simula acceptă doar coroutine și nu concurență adevărată .

La sfârșitul anilor șaizeci și începutul anilor șaptezeci, au existat patru implementări principale ale Simula:

Aceste implementări au fost portate pe o gamă largă de platforme. Cele TOPS-10 a implementat conceptul de public, protected și variabile și proceduri de membru privat, care a fost ulterior integrate în Simula 87. Simula 87 este cel mai recent standard și este portat la o gamă largă de platforme. Există în principal patru implementări:

  • Simula AS
  • Lund Simula
  • GNU Cim
  • Simula portabil revizuit

În noiembrie 2001, Dahl și Nygaard au primit Medalia IEEE John von Neumann de către Institutul Inginerilor Electrici și Electronici „Pentru introducerea conceptelor care stau la baza programării orientate pe obiecte prin proiectarea și implementarea SIMULA 67”. În aprilie 2002, au primit premiul AM Turing 2001 de către Association for Computing Machinery (ACM), cu mențiunea: „Pentru idei fundamentale pentru apariția programării orientate pe obiecte, prin proiectarea limbajelor de programare Simula I și Simula 67. " Din păcate, nici Dahl, nici Nygaard nu au putut participa la Conferința ACM Turing Award, programată pentru a fi susținută la conferința OOPSLA din noiembrie 2002 de la Seattle, deoarece au murit în iunie și, respectiv, în luna august a acelui an.

Laboratorul de cercetare Simula este un institut de cercetare numit după limba Simula, iar Nygaard a deținut o funcție cu jumătate de normă acolo de la deschiderea din 2001. Noua clădire de informatică de la Universitatea din Oslo poartă numele de Casa lui Ole Johan Dahl, în onoarea lui Dahl și auditoriul principal se numește Simula.

Cod simplu

Program minim

Fișierul gol al computerului este programul minim din Simula, măsurat prin mărimea codului sursă . Constă dintr-un singur lucru; o declarație falsă .

Cu toate acestea, programul minim este reprezentat mai convenabil ca un bloc gol:

Begin
End;

Începe să se execute și se termină imediat. Limba nu are nici o valoare de returnare din program.

Clasică Hello world

Un exemplu de program Hello world în Simula:

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

Simula nu distinge majuscule și minuscule .

Clasele, subclasele și procedurile virtuale

Un exemplu mai realist cu utilizarea claselor, subclaselor și procedurilor virtuale:

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;

Exemplul de mai sus are o super-clasă (Glif) cu două subclase ( Charși Line). Există o procedură virtuală cu două implementări . Execuția începe prin executarea programului principal. Lui Simula îi lipsește conceptul de clase abstracte , deoarece pot fi instanțiate clase cu proceduri virtuale pure . Aceasta înseamnă că, în exemplul de mai sus, toate clasele pot fi instantaneate. Apelarea unei proceduri virtuale pure va produce totuși o eroare în timpul rulării .

Sunați după nume

Simula acceptă apelul după nume, astfel încât dispozitivul Jensen să poată fi implementat cu ușurință. Cu toate acestea, modul de transmisie implicit pentru parametrul simplu este apelul după valoare , spre deosebire de ALGOL care a folosit apelul după nume . Codul sursă pentru dispozitivul Jensen trebuie, prin urmare, să specifice apelul după nume pentru parametri atunci când este compilat de un compilator Simula.

Un alt exemplu mult mai simplu este funcția de însumare care poate fi implementată după cum urmează:

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;

Codul de mai sus folosește apelul după nume pentru variabila de control (k) și expresia (u). Aceasta permite ca variabila de control să fie utilizată în expresie.

Rețineți că standardul Simula permite anumite restricții asupra variabilei de control într-o buclă for . Prin urmare, codul de mai sus utilizează o buclă while pentru portabilitate maximă.

Următoarele:

poate fi apoi implementat după cum urmează:

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

Simulare

Simula include un pachet de simulare pentru efectuarea de simulări de evenimente discrete . Acest pachet de simulare se bazează pe caracteristicile orientate obiect ale Simula și pe conceptul său de coroutină .

Sam, Sally și Andy cumpără haine. Aceștia trebuie să împartă o singură cameră. Fiecare dintre ei navighează în magazin timp de aproximativ 12 minute și apoi folosește camera de amenajare exclusiv timp de aproximativ trei minute, fiecare urmând o distribuție normală. O simulare a experienței lor de cabină este după cum urmează:

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;

Blocul principal este prefixat Simulationpentru a permite simularea. Pachetul de simulare poate fi utilizat pe orice bloc și simulările pot fi chiar imbricate atunci când se simulează cineva care face simulări.

Obiectul camerei de amenajare folosește o coadă ( door) pentru a obține acces la camera de amenajare. Când cineva solicită sala de amenajare și este în uz, trebuie să aștepte în această coadă ( Wait (door)). Când cineva părăsește sala de amenajare, primul (dacă există) este eliberat din coadă ( Activate door.first) și, în consecință, este scos din coada ușii ( door.First.Out).

Persoana este o subclasă a Processacesteia și activitatea sa este descrisă folosind așteptarea (timpul pentru răsfoirea magazinului și timpul petrecut în camera de amenajare) și apelează proceduri în obiectul camerei de amenajare pentru a solicita și a părăsi camera de amenajare.

Programul principal creează toate obiectele și activează toate obiectele persoanei pentru a le pune în coada de evenimente. Programul principal reține 100 de minute de timp simulat înainte ca programul să se termine.

Vezi si

Note

Surse

Lecturi suplimentare

linkuri externe