Simula

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar
Simula
Simula - logo.svg
ParadigmasMultiparadigma : procedimental , imperativo , estruturado , orientado a objetos.
FamíliaALGOL
Projetado porOle-Johan Dahl
DesenvolvedorKristen Nygaard
Apareceu pela primeira vez1962 ; 60 anos atrás ( 1962 )
Versão estável
Simula 67, Simula I
Disciplina de digitaçãoEstático , nominativo
AlcanceLexical
Linguagem de implementaçãoALGOL 60 (principalmente; alguns componentes Simscript )
SOTipo Unix , Windows , z/OS , TOPS-10 , MVS
Local na rede Internetwww.simula67.info _ _
Influenciado por
ALGOL 60 , Simscript
Influenciado
Todas as linguagens de programação orientadas a objetos subsequentes

Simula é o nome de duas linguagens de programação de simulação , Simula I e Simula 67, desenvolvidas na década de 1960 no Norwegian Computing Center em Oslo , por Ole-Johan Dahl e Kristen Nygaard . Sintaticamente , é um superconjunto aproximado de ALGOL 60 , [1] : 1.3.1  e também foi influenciado pelo design do Simscript . [2]

O Simula 67 introduziu objetos , [1] : 2, 5.3  classes , [1] : 1.3.3, 2  herança e subclasses , [1] : 2.2.1  procedimentos virtuais , [1] : 2.2.3  corrotinas , [1] : 9.2  e simulação de eventos discretos , [1] : 14.2  e coleta de lixo em destaque . [1] : 9.1  Outras formas de subtipagem (além de subclasses herdadas) foram introduzidas nas derivadas do Simula. [ citação necessária ]

O Simula é considerado a primeira linguagem de programação orientada a objetos . Como o próprio nome sugere, a primeira versão do Simula em 1962 foi projetada para fazer simulações ; O Simula 67, no entanto, foi projetado para ser uma linguagem de programação de uso geral [3] e forneceu a estrutura para muitos dos recursos das linguagens orientadas a objetos atuais.

O Simula tem sido usado em uma ampla variedade de aplicativos, como simulação de projetos de integração em grande escala (VLSI), modelagem de processos , protocolos de comunicação , algoritmos e outros aplicativos, como composição tipográfica , computação gráfica e educação . A influência do Simula é geralmente subestimada, e os objetos do tipo Simula são reimplementados em C++ , Object Pascal , Java , C# e muitas outras linguagens. Cientistas da computação como Bjarne Stroustrup , criador do C++, e James Gosling, criador do Java, reconheceram o Simula como uma grande influência. [4]

História

O relato a seguir é baseado no ensaio histórico de Jan Rune Holmevik. [5] [6]

Kristen Nygaard começou a escrever programas de simulação de computador em 1957. Nygaard viu a necessidade de uma maneira melhor de descrever a heterogeneidade e a operação de um sistema. Para ir mais longe com suas ideias sobre uma linguagem de computador formal para descrever um sistema, Nygaard percebeu que precisava de alguém com mais habilidades de programação de computador do que ele. Ole-Johan Dahl juntou-se a ele em seu trabalho em janeiro de 1962. A decisão de vincular a linguagem ao ALGOL 60 foi tomada pouco depois. Em maio de 1962, os principais conceitos para uma linguagem de simulação foram definidos. SIMULA I nasceu, uma linguagem de programação de propósito especial para simular sistemas de eventos discretos.

Kristen Nygaard foi convidada a visitar a Eckert–Mauchly Computer Corporation no final de maio de 1962 em conexão com a comercialização de seu novo computador UNIVAC 1107 . Nessa visita, Nygaard apresentou as ideias de Simula a Robert Bemer , diretor de programação de sistemas da Univac . Bemer era um grande fã do ALGOL e achou o projeto Simula atraente. Bemer também foi presidente de uma sessão na segunda conferência internacional sobre processamento de informações organizada pela Federação Internacional de Processamento de Informações (IFIP). Convidou Nygaard, que apresentou o paper "SIMULA – An Extension of ALGOL to the Description of Discrete-Event Networks".

O Norwegian Computing Center obteve um UNIVAC 1107 em agosto de 1963 com um desconto considerável, no qual Dahl implementou o SIMULA I sob contrato com o UNIVAC. A implementação foi baseada no compilador UNIVAC ALGOL 60 . SIMULA I estava totalmente operacional no UNIVAC 1107 em janeiro de 1965. Nos anos seguintes, Dahl e Nygaard passaram muito tempo ensinando Simula. O Simula se espalhou por vários países ao redor do mundo e o SIMULA I foi posteriormente implementado em outros computadores, incluindo o Burroughs B5500 e o russo Ural-16 .

Em 1966 , a CAR Hoare introduziu o conceito de construção de classe de registro, que Dahl e Nygaard estenderam com o conceito de prefixação e outros recursos para atender aos seus requisitos para um conceito de processo generalizado. Dahl e Nygaard apresentaram seu artigo sobre declarações de Classe e Subclasse na Conferência de Trabalho da IFIP sobre linguagens de simulação em Oslo , maio de 1967. Este artigo se tornou a primeira definição formal do Simula 67. Em junho de 1967, uma conferência foi realizada para padronizar a linguagem e iniciar uma série de implementações. Dahl propôs unificar o tipoe o conceito de classe. Isso levou a sérias discussões, e a proposta foi rejeitada pelo conselho. O Simula 67 foi formalmente padronizado na primeira reunião do Simula Standards Group (SSG) em fevereiro de 1968.

Simula foi influente no desenvolvimento de Smalltalk e linguagens de programação orientadas a objetos posteriores . Também ajudou a inspirar o modelo de ator de computação concorrente, embora o Simula suporte apenas corrotinas e não simultaneidade verdadeira . [7]

No final dos anos sessenta e início dos anos setenta, havia quatro implementações principais do Simula:

Essas implementações foram portadas para uma ampla variedade de plataformas. O TOPS-10 implementou o conceito de variáveis ​​e procedimentos de membros públicos, protegidos e privados, que posteriormente foi integrado ao Simula 87. O Simula 87 é o padrão mais recente e é portado para uma ampla variedade de plataformas. Existem basicamente quatro implementações:

  • Simula AS
  • Lund Simula
  • GNU Cim [8]
  • Simula portátil revisitada [9]

Em novembro de 2001, Dahl e Nygaard foram premiados com a Medalha IEEE John von Neumann pelo Instituto de Engenheiros Elétricos e Eletrônicos "Pela introdução dos conceitos subjacentes à programação orientada a objetos através do projeto e implementação do SIMULA 67". Em abril de 2002, eles receberam o AM Turing Award 2001 pela Association for Computing Machinery (ACM), com a citação: "Por ideias fundamentais para o surgimento da programação orientada a objetos, através do design das linguagens de programação Simula I e Simula 67. " Dahl e Nygaard morreram em junho e agosto daquele ano, respectivamente, [10] antes da palestra do ACM Turing Award [11]que estava programado para ser entregue na conferência OOPSLA de novembro de 2002 em Seattle.

O Simula Research Laboratory é um instituto de pesquisa com o nome da linguagem Simula, e Nygaard ocupou um cargo de meio período lá desde a abertura em 2001. O novo prédio de Ciência da Computação da Universidade de Oslo é chamado de Ole Johan Dahl's House, em homenagem a Dahl, e o auditório principal chama-se Simula.

Código de exemplo

Programa mínimo

O arquivo de computador vazio é o programa mínimo no Simula, medido pelo tamanho do código-fonte . Consiste em apenas uma coisa; uma declaração fictícia .

No entanto, o programa mínimo é mais convenientemente representado como um bloco vazio:

Início 
Fim ;

Ele começa a ser executado e termina imediatamente. A linguagem não possui nenhum valor de retorno do programa.

Clássico Olá mundo

Um exemplo de um programa Hello world no Simula:

Begin 
   OutText ("Olá, Mundo!");
   Outimage ;
Fim ;

O Simula não diferencia maiúsculas de minúsculas .

Classes, subclasses e procedimentos virtuais

Um exemplo mais realista com uso de classes, [1] : 1.3.3, 2  subclasses [1] : 2.2.1  e procedimentos virtuais: [1] : 2.2.3 

Iniciar
    Glifo
       de Classe ; Virtual : Impressão do procedimento É  impressão do procedimento ;;
   Início 
   Fim ;
   
   Glyph Class Char (c);
      Caractere c;
   Iniciar
       impressão do procedimento ;
        OutChar(c);
   Fim ;
   Linha
       de classe de 
   glifo (elementos); Ref (Glyph) Elementos
    de matriz ; Iniciar
       impressão
       do procedimento ; Iniciar 
         inteiro i;
         Para i:= 1 Passo 1 Até UpperBound (elementos, 1) Faça
            elementos (i).print;
         OutImage;
      Fim ;
   Fim ;
   
   Ref (Glifo) rg;
   Ref (Glyph) Array rgs (1:4);
   
   ! Programa principal; 
   rgs(1):- Novo Char('A');
   rgs(2):- Novo Char('b');
   rgs(3):- Novo Char('b');
   rgs(4):- Novo Char('a');
   rg:- Nova Linha (rgs);
   rg.print;
Fim ;

O exemplo acima tem uma superclasse (Glyph) com duas subclasses ( Chare Line). Existe um procedimento virtual com duas implementações . A execução começa executando o programa principal. O Simula carece do conceito de classes abstratas , pois classes com procedimentos virtuais puros podem ser instanciadas . Isso significa que no exemplo acima, todas as classes podem ser instanciadas. No entanto, chamar um procedimento virtual puro produzirá um erro em tempo de execução .

Chamar pelo nome

O Simula suporta chamada por nome [1] : 8.2.3  para que o Dispositivo do Jensen possa ser facilmente implementado. No entanto, o modo de transmissão padrão para parâmetro simples é call by value , ao contrário do ALGOL que usava call by name . O código fonte do Jensen's Device deve, portanto, especificar a chamada por nome para os parâmetros quando compilados por um compilador Simula.

Outro exemplo muito mais simples é a função de soma que pode ser implementado da seguinte forma:

 Sigma de Procedimento Real (k, m, n, u);
   Nome k, u;
   Inteiro k, m, n; você real ;
Comece 
   Real s;
   k:= m;
   Enquanto k <= n Comece s  := s + u; k:= k + 1; Fim ;
   Sigma:= s;
Fim ;

O código acima usa a chamada pelo nome para a variável de controle (k) e a expressão (u). Isso permite que a variável de controle seja usada na expressão.

Observe que o padrão Simula permite certas restrições na variável de controle em um loop for . O código acima, portanto, usa um loop while para máxima portabilidade.

A seguir:

pode então ser implementado da seguinte forma:

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

Simulação

Simula inclui um pacote de simulação [1] : 14.2  para fazer simulações de eventos discretos . Este pacote de simulação é baseado nos recursos orientados a objetos do Simula e sua corrotina [1] : conceito 9.2  .

Sam, Sally e Andy estão comprando roupas. Eles devem compartilhar um provador. Cada um deles está navegando na loja por cerca de 12 minutos e depois usa o provador exclusivamente por cerca de três minutos, cada um seguindo uma distribuição normal. Uma simulação de sua experiência no provador é a seguinte:

Simulação Início da aula 
   FittingRoom ; Comece a porta de 
      referência (cabeça);
      Boolean inUse;
      Solicitação de procedimento ; Begin 
         If inUse Then  Begin
             Espere (porta);
             porta.Primeiro.Saída;
         Fim ;
         inUse:= True ;
      Fim ;
      Licença de procedimento ; Begin 
         inUse:= False ;
         Ative a porta. Primeiro;
      Fim ;
      porta:- Cabeça
    Nova ; Fim ;
   
   Relatório de procedimento (mensagem); Mensagem de texto ; Começar
      OutFix (Tempo, 2, 0); OutText (": " & mensagem); OutImage;
   Fim ;
   
   Process Class Person (pname); Texto pname; Comece 
      Enquanto  Verdadeiro  Comece _ 
         Segure (Normal (12, 4, u));
         relatório (pname & " está solicitando o provador");
         provador1.pedido;
         relatório (pname & " entrou no provador");
         Segure (Normal (3, 1, u));
         sala de montagem1.sair;
         relatório (pname & " saiu do provador");
      Fim ;
   Fim ;
   
   u
    inteiro ; Ref (FittingRoom) montagem1;
   
   FittingRoom1:- Novo FittingRoom;
   Ativar  Nova Pessoa ("Sam");
   Ativar  Nova Pessoa ("Sally");
   Ativar  Nova Pessoa ("Andy");
   Segure (100);
Fim ;

O bloco principal é prefixado com Simulationpara habilitar a simulação. O pacote de simulação pode ser usado em qualquer bloco e as simulações podem até ser aninhadas ao simular alguém fazendo simulações.

O objeto provador usa uma fila ( door) para obter acesso ao provador. Quando alguém solicita o provador e ele está em uso, deve aguardar nessa fila ( Wait (door)). Quando alguém sai do provador, o primeiro (se houver) é liberado da fila ( Activate door.first) e consequentemente retirado da fila da porta ( door.First.Out).

Person é uma subclasse de Processe sua atividade é descrita usando hold (tempo para navegar na loja e tempo gasto no provador) e chama procedimentos no objeto provador para solicitar e sair do provador.

O programa principal cria todos os objetos e ativa todos os objetos pessoa para colocá-los na fila de eventos. O programa principal é mantido por 100 minutos de tempo simulado antes que o programa termine.

Veja também

Notas

  1. ^ a b c d e f g h i j k l m n Dahl, Ole-Johan ; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Common Base Language (PDF) (Relatório). Centro de Computação Norueguês. Arquivado a partir do original em 25/12/2013 . Recuperado em 17 de novembro de 2020 .{{cite report}}: CS1 maint: URL imprópria ( link )
  2. ^ Nygaard, Kristen (1978). "O Desenvolvimento das Linguagens Simula" (PDF) . O desenvolvimento do .. SIMULA I e SIMULA 67... foi influenciado pelo design do SIMSCRIPT ...
  3. ^ Kristen Nygaard e Ole-Johan Dahl. 1978. O desenvolvimento das linguagens SIMULA. História das linguagens de programação. Association for Computing Machinery, Nova York, NY, EUA, 439–480. DOI: https://doi.org/10.1145/800025.1198392
  4. ^ Wong, William. "Antes de C, o que você usou?" . Projeto Eletrônico . Recuperado em 22 de maio de 2017 .
  5. ^ Holmevik, Jan Rune (1994). "Compilando Simula: Um estudo histórico da gênese tecnológica" (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi : 10.1109/85.329756 . S2CID 18148999 . Recuperado em 12 de maio de 2010 .  
  6. ^ Holmevik, Jan Rune. "Compilando Simula" . Oslo, Noruega: Instituto de Estudos em Pesquisa e Ensino Superior. Arquivado a partir do original em 20 de abril de 2009 . Recuperado em 19 de abril de 2017 .
  7. ^ Lehrmann Madsen, Ole (2014). "Construindo abstrações de simultaneidade seguras". Em Agha, Gul; Igarashi, Atsushi; Kobayashi, Naoki; Masuhara, Hidehiko; Matsuoka, Satoshi; Shibayama, Etsuya; Taura, Kenjiro (eds.). Objetos simultâneos e além . Notas de aula em Ciência da Computação. Vol. 8665. Berlim: Springer. pág. 68. doi : 10.1007/978-3-662-44471-9 . ISBN 978-3-662-44471-9. S2CID  1000741 .
  8. ^ "GNU Cim" .
  9. ^ "Simula portátil revisitada" . GitHub . Recuperado em 17 de junho de 2019 .
  10. ^ "ACM Ole-Johan Dahl e Kristen Nygaard - Obituário" . Acm.org. Arquivado a partir do original em 19 de julho de 2011 . Recuperado em 14 de janeiro de 2012 .
  11. ^ "Palestras do Prêmio ACM Turing" . Informatik.uni-trier.de . Recuperado em 14 de janeiro de 2012 .

Fontes

Leitura adicional

Links externos