occam (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa


NoFonti.svg
Este artigo ou se(c)ção cita fontes confiáveis e independentes, mas que não cobrem todo o conteúdo (desde janeiro de 2011). Por favor, adicione mais referências e insira-as corretamente no texto ou no rodapé. Material sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)
occam
Surgido em 1983
Criado por INMOS
Dialetos: occam-π (pi)
Influenciada por CSP
Influenciou Ease

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 é 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 | editar código-fonte]

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 | editar código-fonte]

occam 1[editar | editar código-fonte]

occam 1[2] (released 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 | editar código-fonte]

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 | editar código-fonte]

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 "[1]".</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 | editar código-fonte]

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. occam 2.1 Reference Manual. Formato PDF. [S.l.: s.n.]. INMOS document 72 occ 45 03
  2. INMOS. occam Programming Manual. [S.l.: s.n.]. ISBN 0-13-629296-8.
  3. Ericsson-Zenith. occam 2 Reference Manual. [S.l.: s.n.]. ISBN 0-13-629312-3.
  4. Fred Barnes and Peter Welch (2006-01-14). occam-pi: blending the best of CSP and the pi-calculus. Visitado em 2006-11-24.

Bibliografia[editar | editar código-fonte]

  • INMOS Limited. Occam 2 Reference Manual. New York: Prentice Hall, 1988. 1330 pp. ISBN 0-13-629312-3.


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