occam (linguagem de programação)

linguagem de programação
 Nota: Não confundir com OCaml, veja Objective Caml. Para outros significados, veja Occam.

occam (de William de Ockham, da Navalha de Occam) é uma linguagem de programação utilizada em computação paralela que constrói uma seqüência de processos seqüenciais de comunicação (CSPs) que compartilham muitas de suas características[1]. Desta forma, é uma implementação prática do CSP.

occam
Surgido em 1983
Criado por INMOS
Dialetos: occam-π (pi)
Influenciada por CSP
Influenciou Ease

Occam é uma linguagem imperativa processual (como o Pascal). Ela foi desenvolvida por David May e outros da INMOS, aconselhada por Tony Hoare, como a língua nativa de programação para os seus microprocessadores, embora implementações para outras plataformas estão disponíveis. A versão mais conhecida é Occam 2; O manual da linguagem de programação Occam 2 foi feito em conjunto por Steven Ericsson-Zenith e outros em INMOS.

Visão geral editar

Nos exemplos a seguir a indentação e a formatação são aspectos críticos para se analisar o código: expressões são terminadas por um fim de linha, listas de expressões precisam estar no mesmo nível de indentação (esse recurso, também conhecido como a regra de off-side, também é encontrado em outras linguagens).

Comunicação entre processos trabalham através dos chamados canais. Um processo emite saídas de dados para um canal através de um "!" enquanto outro fornece entradas de dados com um "?". Entrada e saída irão bloquear até que a outra extremidade esteja pronta para aceitar ou oferecer dados. Exemplos (c é uma variável):

 keyboard ? c
 screen ! c

SEQ introduz uma lista de expressões que são avaliadas sequencialmente. Isto não está implícito como na maioria das outras linguagens de programação. Exemplo:

 SEQ
   x := x + 1
   y := x * x

PAR inicia uma lista de expressões que podem ser avaliadas concorrentemente. Exemplo:

 PAR
   p()
   q()

ALT especifica uma lista de comandos guardas. Os guardas são uma combinação de condições booleanas e uma expressão de entrada (ambos opcionais). Cada guarda para o qual tanto a condição é verdadeira quanto o canal de entrada está pronto é bem sucedido. Uma das alternativas bem sucedidas é selecionada para a execução. Exemplo:

 ALT
   count1 < 100 & c1 ? data
     SEQ
       count1 := count1 + 1
       merged ! data
   count2 < 100 & c2 ? data
     SEQ
       count2 := count2 + 1
       merged ! data
   status ? request
     SEQ
       out ! count1
       out ! count2

Isto irá ler dados a partir de canais C1 ou C2 (dependendo do que está pronto) e passá-lo em um canal fundido. Se countN alcançar a 100, leituras do canal correspondente serão desabilitadas. Um pedido sobre a condição do canal é atendido enviando a contagem de saída para out.

Revisões da linguagem editar

occam 1 editar

occam 1[2] (lançada em 1983) foi uma versão preliminar da linguagem. Suportava apenas o tipo de dados VAR , que era um tipo integral correspondente ao comprimento da palavra nativa da arquitetura objeto, e matrizes de apenas uma dimensão.

occam 2 editar

occam 2[3] é uma extensão produzida pela INMOS Ltd, em 1987, que acrescenta suporte a ponto flutuante, funções, arrays multi-dimensionais e mais tipos de dados, tais como inteiros de tamanhos variados (INT16, Int32) e bytes.

Com esta revisão, Occam tornou-se uma linguagem capaz de expressar programas úteis, enquanto que Occam 1 foi mais adequada para análise de algoritmos e exploração da nova linguagem (embora deve-se notar que o compilador Occam 1 foi escrito em Occam 1, para que haja uma prova de que se podia escrever programas úteis em Occam 1, apesar das suas limitações).

Occam 2.1 editar

occam 2.1[1] foi o último da série de desenvolvimentos da linguagem Occam de contribuição da INMOS. Definida em 1994, foi influenciada por uma proposta anterior para uma linguagem 'Occam 3' (também referenciada como "occam91" durante os estágios iniciais de desenvolvimento) criada por Geoff Barrett na INMOS no início dos anos 90. Um Manual de Referência revisado descrevendo Occam 3 foi distribuído para a comunidade tecer comentários Geoff Barrett and Steven Ericsson-Zenith (31 de março de 1992). «occam 3 Reference Manual» (PDF). INMOS. Consultado em 24 de março de 2008 </ref>, mas a linguagem nunca foi plenamente implementada em um compilador.

occam 2.1 introduziu vários novos recursos na linguagem Occam 2, incluindo:

  • Tipos de Dados nomeados (DATA TYPE x IS y)
  • Registros Nomeados
  • Packed Records
  • Relaxação de algumas regras do tipo conversão
  • Novos operadores (e.g. BYTESIN)
  • Channel retyping e channel arrays
  • Capacidade para retornar arrys de tamanho fixo de uma função

Para uma lista completa das mudanças ver apêndice do P INMOS occam 2.1 Reference Manual.

occam-π editar

occam-π[4] é o nome comum para a variante Occam implementada através de versões tardias de KRoC, um compilador Occan para Kent. A adição do símbolo "π" (pi) ao nome de Occan é uma alusãoao fato de que o KRoC occam inclui diversas idéias inspiradaspelo cálculo Pi. Ela contém um número significativo de extensões para o compilador Occam 2.1, por exemplo:

  • Protocolos aninhados
  • Criação de processos em Run-time
  • Canais móveis, dados e processos
  • Recursão
  • Herança de protocolos

Referências

  1. a b INMOS (12 de maio de 1995). occam 2.1 Reference Manual (PDF). [S.l.]: SGS-THOMSON Microelectronics Ltd  INMOS document 72 occ 45 03
  2. INMOS (1984). occam Programming Manual. [S.l.]: Prentice-Hall. ISBN 0-13-629296-8 
  3. Ericsson-Zenith (1988). occam 2 Reference Manual. Prentice-Hall. [S.l.: s.n.] ISBN 0-13-629312-3 
  4. Fred Barnes and Peter Welch (14 de janeiro de 2006). «occam-pi: blending the best of CSP and the pi-calculus». Consultado em 24 de novembro de 2006 

Bibliografia editar

  • INMOS Limited (1988). Occam 2 Reference Manual. New York: Prentice Hall. 1330 páginas. ISBN 0-13-629312-3 


  Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.