Pai

Pai
Paradigmaorientado a objetos , funcional
Projetado porSteve Omohundro
DesenvolvedorUniversidade da Califórnia, Berkeley , Universidade de Waikato , projeto GNU
Apareceu pela primeira vez1990
Versão estável
1.2.3 [1] /7 de julho de 2007 ; 16 anos atrás ( 7 de julho de 2007 )
Disciplina de digitaçãoestático , forte
Local na rede Internetwww.gnu.org/software/sather/
Principais implementações
ICSI Sather, GNU Sather
Influenciado por
Eiffel , CLU , Common Lisp , Esquema
Influenciado
Legal

Sather é uma linguagem de programação orientada a objetos . Originou-se por volta de 1990 no Instituto Internacional de Ciência da Computação (ICSI) da Universidade da Califórnia, Berkeley , desenvolvido por uma equipe internacional liderada por Steve Omohundro . Suporta coleta de lixo e genéricos por subtipos .

Originalmente, foi baseado em Eiffel , mas divergiu, e agora inclui vários recursos de programação funcional .

O nome é inspirado em Eiffel; a Torre Sather é um marco reconhecível em Berkeley, em homenagem a Jane Krom Sather , a viúva de Peder Sather , que doou grandes somas para a fundação da universidade.

Sather também se inspira em outras linguagens de programação e paradigmas: iteradores , design por contrato , classes abstratas , herança múltipla , funções anônimas , sobrecarga de operador , sistema de tipo contravariante .

A implementação original de Berkeley (a última versão estável 1.1 foi lançada em 1995, não é mais mantida [2] ) foi adotada pela Free Software Foundation tornando-se, portanto, GNU Sather. A última versão estável do GNU (1.2.3) foi lançada em julho de 2007 [3] e o software atualmente não é mantido. Houve diversas outras variantes: Sather-K da Universidade de Karlsruhe ; [4] [5] Sather-W da Universidade de Waikato [6] (implementação do Sather versão 1.3); Porta de Peter Naulls do ICSI Sather 1.1 para RISC OS ; [7] e pSather, [8] [9] uma versão paralela do ICSI Sather abordando arquiteturas de multiprocessadores de acesso à memória não uniformes , mas apresentando um modelo de memória compartilhada ao programador.

O antigo compilador ICSI Sather (agora GNU Sather) é implementado como um compilador para C , ou seja, o compilador não produz código objeto ou de máquina , mas pega o código-fonte Sather e gera o código-fonte C como uma linguagem intermediária . A otimização é deixada para o compilador C.

O compilador GNU Sather, escrito no próprio Sather, tem licença dupla sob a GNU GPL e LGPL .

Olá Mundo

 classe HELLO_WORLD é  
  principal é  
   # OUT + "Olá Mundo\n" ; 
  fim ; 
 fim ;

Algumas observações:

  • Os nomes das classes são TODOS EM MAIÚSCULAS; isso não é apenas uma convenção, mas é aplicado pelo compilador.
  • O método chamado mainé o ponto de entrada para execução. Pode pertencer a qualquer classe, mas se for diferente de MAIN, deve ser especificado como uma opção do compilador.
  • #é o símbolo do construtor: chama o createmétodo da classe cujo nome segue o operador. Neste exemplo, é usado para instanciar a OUTclasse, que é a classe da saída padrão .
  • O +operador foi sobrecarregado pela classe para anexar a string passada como argumento ao fluxo.
  • Operadores como +são açúcar sintático para chamadas de métodos com nomes convencionais: a + bsignifica a.plus(b). As convenções usuais de precedência aritmética são usadas para resolver a ordem de chamada de métodos em fórmulas complexas.

Exemplo de iteradores

Este programa imprime números de 1 a 10.

 classe PRINCIPAL é  
   principal é 
     laço
      eu := 1. até ! ( 10 );  
      # FORA + i + "\n" ;    
     fim ;
   fim ;
 fim ;

A construção loop... endé o meio preferido de definir loops, embora whilee repeat- untiltambém estejam disponíveis. Dentro da construção, um ou mais iteradores podem ser usados. Os nomes dos iteradores sempre terminam com um ponto de exclamação. (Esta convenção é imposta pelo compilador.) upto!é um método da INTclasse que aceita um onceargumento, o que significa que seu valor não mudará à medida que o iterador for produzido. upto!poderia ser implementado na INTclasse com código semelhante ao seguinte.

  até ! ( uma vez m : INT ): MESMO é i : INT := self ; -- inicializa i com o valor de self, -- esse é o número inteiro do qual este método é chamado loop if i > m then quit ; -- sai do loop quando eu ultrapassar m end ; rendimento eu ; -- senão use i como valor de retorno e permaneça no loop i := i + 1 ; -- e final do incremento ; fim ;  
        
                    
    
         
          
      
        
           
    
  

As informações de tipo para variáveis ​​são indicadas pela sintaxe pós-fixada variable:CLASS. O tipo muitas vezes pode ser inferido e, portanto, as informações de digitação são opcionais, como em anInteger::=1. SAMEé uma pseudoclasse referente à classe atual.

Referências

  1. ^ https://directory.fsf.org/wiki/sather. {{cite web}}: Ausente ou vazio |title=( ajuda )
  2. ^ "Planos futuros do ICSI Sather" . Arquivado do original em 05/02/2012 . Recuperado em 02/03/2012 .
  3. ^ "Downloads GNU Sather" . Arquivado do original em 05/04/2012 . Recuperado em 02/03/2012 .
  4. ^ Página do projeto Sather-K (arquivo do ano 2001)
  5. ^ "Download do Sather-K 0.9, versão do ano 1994" . Arquivado do original em 29/04/2024 . Recuperado em 02/03/2012 .
  6. ^ Página do projeto Sather-W 1.3 (link arquivado do ano de 2002)
  7. ^ A versão de Peter Naulls não está mais disponível na web.
  8. ^ "descrição pSather" . Arquivado do original em 05/02/2012 . Recuperado em 02/03/2012 .
  9. ^ "download pSather" . Arquivado do original em 06/07/2017 . Obtido em 11/10/2021 .{{cite web}}: CS1 maint: bot: status do URL original desconhecido ( link )

links externos

  • Página inicial do Sather
Obtido em "https://en.wikipedia.org/w/index.php?title=Sather&oldid=1221290083"