Pergunta

O href="http://en.wikipedia.org/wiki/Effect_system" rel="noreferrer"> artigo sistema Effect é atualmente apenas a uma curta stub e eu estive pensando por um tempo, como o que é um sistema de efeito.

  • Existem idiomas que têm um sistema de efeito, além de um sistema do tipo?
  • O que seria uma possível notação (hipotética) em um convencional linguagem, que você está familiarizado, com olhar como com efeitos?
Foi útil?

Solução

A "tipo e sistema de efeito" descreve não só os tipos de valores em um programa, mas as mudanças nesses valores. "Typestate" verificação é uma ideia relacionada.

Um exemplo pode ser um tipo de sistema que identificadores de arquivo faixas: em vez de ter um close função com tipo de retorno void, o sistema de tipo iria gravar o efeito de close como descartar o arquivo de recurso-any tentar ler ou escrever para o arquivo depois de chamar close se tornaria um erro de tipo.

Eu não estou ciente de qualquer sistema de tipo e efeito aparecendo em uma linguagem de programação mainstream. Eles têm sido usados ??para definir análises estáticas (por exemplo, é bastante natural para definir uma análise para travamento adequado / desbloqueio em termos de efeitos). Como tal, os sistemas de efeito são geralmente definida utilizando regimes de inferência, em vez de sintaxe concreto. Você poderia imaginar uma sintaxe procurando algo como

File open(String name) [+File]; // open creates a new file handle
void close(File f)     [-f]   ; // close destroys f 

Se você quiser saber mais, os seguintes documentos pode ser interessante (aviso justo: os papéis são bastante teórica).

Outras dicas

(Isto não é uma resposta autoritária;. Apenas tentando arrasto minha memória)

Em certo sentido, a qualquer momento você codificar um 'Mônada estado' em um idioma, você está usando o sistema de tipos como um potencial sistema de efeito. Assim, "Estado" ou "IO" na captura Haskell esta noção (IO capta uma série de outros efeitos também). Lembro-me vagamente de ler artigos sobre diversos idiomas que usam sistemas de tipos avançados, incluindo coisas como "tipos dependentes" para a gestão de grão fino controle de efeitos, de modo que, por exemplo, o sistema de tipo / efeito pode capturar informações sobre quais locais de memória seria modificado em um determinado tipo de dados. Isso é útil, pois proporciona maneiras de fazer duas funções que modificam pedaços mutuamente exclusivas de Estado ser autorizados a "comutação" (monads normalmente não comutar, e diferentes monads nem sempre compor bem um com o outro, o que muitas vezes torna difícil digitar (leia-se atribuir um tipo estático para) os programas 'razoável') ...

Uma analogia a um muito nível de mão-ondulado é como Java tem exceções verificadas. Você expressar a informação extra no sistema de tipo sobre certos efeitos (você pode pensar em uma exceção como um 'efeito' para o propósito da analogia), mas esses 'efeitos' tipicamente vazar todo o seu programa e não compor bem em prática (você acabar com um milhão de 'lança' cláusulas ou outra resort a muitos tipos de exceção de tempo de execução desmarcado).

Eu acho que um monte de investigação está a ser feito nesta área, tanto para a pesquisa-y e línguas dominantes-y, como a capacidade de funções anotar com informações efeito pode desbloquear a capacidade do compilador para fazer uma série de otimizações, impacto pode concorrência, e pode fazer grandes coisas para várias análises de programas e ferramentas. Eu pessoalmente não tenho grandes esperanças para ele em breve, embora, como eu acho que muitas pessoas inteligentes têm vindo a trabalhar sobre isso por um longo tempo e ainda há muito pouco a mostrar para ele.

Você pode ter um olhar para http://www.haskell.org/haskellwiki/DDC

É uma versão do Haskell implementação de um sistema em vigor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top