Simulateur - Simula

Simulateur
Simulateur - logo.svg
Paradigmes Multi-paradigme : procédural , impératif , structuré , orienté objet
Famille ALGOL
Conçu par Ole-Johan Dahl
Développeur Kristen Nygaard
Première apparition 1962 ; il y a 59 ans ( 1962 )
Version stable
Simulateur 67, Simulateur I
Discipline de frappe Statique , nominatif
Portée Lexical
Langage d'implémentation ALGOL 60 (principalement ; certains composants Simscript )
Système d'exploitation De type Unix , Windows , z/OS , TOPS-10 , MVS
Site Internet www .simula67 .info
Influencé par
ALGOL 60 , Simscript
Influencé
Langages de programmation orientés objet

Simula est le nom de deux langages de programmation de simulation , Simula I et Simula 67, développés dans les années 1960 au Norwegian Computing Center d' Oslo , par Ole-Johan Dahl et Kristen Nygaard . D'un point de vue syntaxique , il s'agit d'un surensemble assez fidèle d' ALGOL 60 , également influencé par la conception de Simscript .

Simula 67 a introduit les objets , les classes , l' héritage et les sous - classes , les procédures virtuelles , les coroutines et la simulation d'événements discrets , ainsi que le ramasse-miettes . D'autres formes de sous - typage (en plus des sous-classes d'héritage) ont également été introduites dans les dérivés de Simula.

Simula est considéré comme le premier langage de programmation orienté objet . Comme son nom l'indique, la première version de Simula de 1962 a été conçue pour faire des simulations ; Simula 67 a cependant été conçu pour être un langage de programmation à usage général et a fourni le cadre de nombreuses fonctionnalités des langages orientés objet d'aujourd'hui.

Simula a été utilisé dans un large éventail d'applications telles que la simulation de conceptions d' intégration à très grande échelle (VLSI), la modélisation de processus , les protocoles de communication , les algorithmes et d'autres applications telles que la composition , l'infographie et l' éducation . L'influence de Simula est souvent sous-estimée, et les objets de type Simula sont réimplémentés en C++ , Object Pascal , Java , C# et de nombreux autres langages. Des informaticiens tels que Bjarne Stroustrup , créateur de C++, et James Gosling , créateur de Java, ont reconnu Simula comme une influence majeure.

Histoire

Le récit suivant est basé sur l'essai historique de Jan Rune Holmevik.

Kristen Nygaard a commencé à écrire des programmes de simulation informatique en 1957. Nygaard a vu le besoin d'une meilleure façon de décrire l'hétérogénéité et le fonctionnement d'un système. Pour aller plus loin dans ses idées sur un langage informatique formel pour décrire un système, Nygaard s'est rendu compte qu'il avait besoin de quelqu'un avec plus de compétences en programmation informatique que lui. Ole-Johan Dahl le rejoint sur son travail en janvier 1962. La décision de lier la langue à l' ALGOL 60 est prise peu de temps après. En mai 1962, les principaux concepts d'un langage de simulation étaient définis. SIMULA I est né, un langage de programmation à usage spécial pour simuler des systèmes à événements discrets.

Kristen Nygaard a été invitée à visiter la Eckert-Mauchly Computer Corporation fin mai 1962 dans le cadre de la commercialisation de leur nouvel ordinateur UNIVAC 1107 . Lors de cette visite, Nygaard a présenté les idées de Simula à Robert Bemer , le directeur de la programmation système chez Univac . Bemer était un grand fan d' ALGOL et a trouvé le projet Simula convaincant. Bemer a également présidé une session de la deuxième conférence internationale sur le traitement de l'information organisée par la Fédération internationale pour le traitement de l'information (IFIP). Il a invité Nygaard, qui a présenté le document « SIMULA – An Extension of ALGOL to the Description of Discrete-Event Networks ».

Le centre de calcul norvégien a obtenu un UNIVAC 1107 en août 1963 avec une remise considérable, sur laquelle Dahl a mis en œuvre le SIMULA I sous contrat avec UNIVAC. L'implémentation était basée sur le compilateur UNIVAC ALGOL 60 . SIMULA I était pleinement opérationnel sur l'UNIVAC 1107 en janvier 1965. Au cours des années suivantes, Dahl et Nygaard ont consacré beaucoup de temps à l'enseignement de Simula. Simula s'est répandu dans plusieurs pays du monde et SIMULA I a ensuite été implémenté sur d'autres ordinateurs, notamment le Burroughs B5500 et le russe Ural-16 .

En 1966, CAR Hoare a introduit le concept de construction de classe d'enregistrement, que Dahl et Nygaard ont étendu avec le concept de préfixe et d'autres caractéristiques pour répondre à leurs exigences pour un concept de processus généralisé. Dahl et Nygaard ont présenté leur article sur les déclarations de classe et de sous - classe à la conférence de travail de l'IFIP sur les langages de simulation à Oslo , en mai 1967. Cet article est devenu la première définition formelle de Simula 67. En juin 1967, une conférence a eu lieu pour normaliser le langage et initier un certain nombre d'implémentations. Dahl a proposé d'unifier le concept de type et de classe. Cela a conduit à de sérieuses discussions et la proposition a été rejetée par le conseil d'administration. Simula 67 a été officiellement normalisé lors de la première réunion du Simula Standards Group (SSG) en février 1968.

Simula a joué un rôle important dans le développement de Smalltalk et plus tard dans les langages de programmation orientés objet . Cela a également contribué à inspirer le modèle d'acteur du calcul simultané, bien que Simula ne prenne en charge que les coroutines et non la vraie concurrence .

À la fin des années 60 et au début des années 70, il y avait quatre implémentations principales de Simula :

Ces implémentations ont été portées sur un large éventail de plates-formes. Le TOPS-10 a implémenté le concept de variables et de procédures de membre public, protégé et privé, qui a ensuite été intégré à Simula 87. Simula 87 est la dernière norme et est porté sur un large éventail de plates-formes. Il existe principalement quatre implémentations :

  • Simula AS
  • Lund Simula
  • GNU Cim
  • Simulateur portable revisité

En novembre 2001, Dahl et Nygaard ont reçu la médaille IEEE John von Neumann de l' Institute of Electrical and Electronics Engineers « Pour l'introduction des concepts sous-jacents à la programmation orientée objet via la conception et la mise en œuvre de SIMULA 67 ». En avril 2002, ils ont reçu le prix AM Turing 2001 de l' Association for Computing Machinery (ACM), avec la citation : « Pour des idées fondamentales à l'émergence de la programmation orientée objet, à travers leur conception des langages de programmation Simula I et Simula 67. " Malheureusement, ni Dahl ni Nygaard n'ont pu se rendre à la conférence ACM Turing Award, qui devait être prononcée lors de la conférence OOPSLA de novembre 2002 à Seattle, car ils sont décédés respectivement en juin et août de cette année.

Le Simula Research Laboratory est un institut de recherche nommé d'après la langue Simula, et Nygaard y a occupé un poste à temps partiel depuis son ouverture en 2001. Le nouveau bâtiment informatique de l' Université d'Oslo s'appelle Ole Johan Dahl's House, en l'honneur de Dahl, et l'auditorium principal s'appelle Simula.

Exemple de code

Programme minimal

Le fichier informatique vide est le programme minimal dans Simula, mesuré par la taille du code source . Il se compose d'une seule chose ; une déclaration factice .

Cependant, le programme minimal est plus commodément représenté comme un bloc vide :

Begin
End;

Il commence à s'exécuter et se termine immédiatement. La langue n'a aucune valeur de retour du programme.

Bonjour tout le monde classique

Un exemple de programme Hello world dans Simula :

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

Simula est insensible à la casse .

Classes, sous-classes et procédures virtuelles

Un exemple plus réaliste avec utilisation de classes, sous-classes et procédures virtuelles :

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;

L'exemple ci-dessus a une super classe (Glyph) avec deux sous-classes ( Charet Line). Il existe une procédure virtuelle avec deux implémentations . L'exécution commence par l'exécution du programme principal. Simula n'a pas le concept de classes abstraites , puisque les classes avec des procédures virtuelles pures peuvent être instanciées . Cela signifie que dans l'exemple ci-dessus, toutes les classes peuvent être instanciées. L'appel d'une procédure virtuelle pure produira cependant une erreur d' exécution .

Appel par nom

Simula prend en charge l' appel par nom afin que l'appareil Jensen puisse être facilement mis en œuvre. Cependant, le mode de transmission par défaut pour le paramètre simple est l' appel par valeur , contrairement à ALGOL qui utilisait l' appel par nom . Le code source du Jensen's Device doit donc spécifier l' appel par nom pour les paramètres lorsqu'ils sont compilés par un compilateur Simula.

Un autre exemple beaucoup plus simple est la fonction de sommation qui peut être implémentée comme suit :

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;

Le code ci-dessus utilise l' appel par nom pour la variable de contrôle (k) et l'expression (u). Cela permet à la variable de contrôle d'être utilisée dans l'expression.

Notez que la norme Simula autorise certaines restrictions sur la variable de contrôle dans une boucle for . Le code ci-dessus utilise donc une boucle while pour une portabilité maximale.

Le suivant:

peut alors être implémenté comme suit :

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

Simulation

Simula comprend un package de simulation pour faire des simulations d'événements discrets . Ce package de simulation est basé sur les fonctionnalités orientées objet de Simula et son concept de coroutine .

Sam, Sally et Andy achètent des vêtements. Ils doivent partager une cabine d'essayage. Chacun d'eux parcourt le magasin pendant environ 12 minutes, puis utilise la cabine d'essayage exclusivement pendant environ trois minutes, chacun suivant une distribution normale. Voici une simulation de leur expérience en cabine d'essayage :

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;

Le bloc principal est précédé de Simulationpour permettre la simulation. Le package de simulation peut être utilisé sur n'importe quel bloc et les simulations peuvent même être imbriquées lors de la simulation d'une personne faisant des simulations.

L'objet cabine d'essayage utilise une file d'attente ( door) pour accéder à la cabine d'essayage. Lorsque quelqu'un demande la cabine d'essayage et qu'elle est utilisée, il doit attendre dans cette file d'attente ( Wait (door)). Lorsque quelqu'un quitte la cabine d'essayage, le premier (le cas échéant) est libéré de la file d'attente ( Activate door.first) et par conséquent retiré de la file d'attente de la porte ( door.First.Out).

Person est une sous-classe de Processet son activité est décrite à l'aide de hold (temps de navigation dans le magasin et temps passé dans la cabine d'essayage) et appelle des procédures dans l'objet cabine d'essayage pour demander et quitter la cabine d'essayage.

Le programme principal crée tous les objets et active tous les objets personne pour les mettre dans la file d'attente des événements. Le programme principal dure 100 minutes de temps simulé avant la fin du programme.

Voir également

Remarques

Sources

Lectures complémentaires

Liens externes