Existe um conjunto quase padrão de atributos para anotar a segurança, a imutabilidade do encadeamento etc.?

8

Exceto por uma postagem de blog aqui e ali, descrevendo os atributos personalizados que alguém criou, mas que não parece ter nenhuma tração - como uma descrevendo como impor a imutabilidade , outra sobre Documentando a segurança de threads , modelando os atributos após as anotações do JCIP - existe algum padrão emergente? Alguma coisa que a MS esteja planejando para o futuro?

Isso é algo que deve ser padrão, se houver alguma chance de interoperabilidade entre bibliotecas em termos de simultaneidade. Tanto para fins de documentação quanto para alimentar ferramentas de teste estáticas / dinâmicas.

Se a MS não está fazendo nada nessa direção, isso pode ser feito no CodePlex - mas também não consegui encontrar nada.

<opinion> A simultaneidade e a segurança do encadeamento são realmente difíceis em linguagens imperativas e de objetos, como C # e Java, devemos tentar domar, até que esperamos mudar para linguagens mais apropriadas. </opinion>

Eugene Beresovsky
fonte
1
Vote para mudar para programadores como este foi o final da abertura de um

Respostas:

3

O problema tanto da imutabilidade quanto da segurança do encadeamento é que eles não são conceitos em preto e branco, mas há várias garantias possíveis a esse respeito. Reduzir isso para atributos simples pode ser difícil. IMO um simples ThreadSafee Immutableatributo não é suficiente. Ainda elaborar um conjunto de atributos capturando pelo menos a semântica mais importante parece promissor para mim.

Por exemplo, pegue um AddRangemétodo. Pode ser thread-safe o suficiente para nunca corromper o estado da coleção subjacente, mas pode não ser atômico. Uma implementação comum com essas propriedades pode ser apenas chamar um Addmétodo atômico para cada elemento.

No lado da imutabilidade, também temos aspectos diferentes:

  • Oferecendo apenas acessadores somente leitura ou nunca mudando
  • Profundidade de imutabilidade, isto é, os subobjetos também são imutáveis
  • Imutabilidade física vs. lógica. Por exemplo, a inicialização lenta não altera o estado visível, mas altera o estado interno.

Uma anotação é que este contexto já existe: Purepara métodos livres de efeitos colaterais.

CodesInChaos
fonte
Concordo que não é simples. Mas acho que deveria ser feito. É muito difícil criar software complexo sem ele, especialmente integrando várias bibliotecas. Obrigado por apontar Pure ( msdn.microsoft.com/en-us/library/… ), isso é um começo e, portanto, aceitarei sua resposta, pois parece ser o melhor que podemos obter agora, em termos de um 'quase-padrão' de pelo menos ALGO.
0

Não acho que exista um conjunto de padrões (até quase) no momento. Projetos isolados fazem isso à sua maneira. Em um post de tópico, eles falam sobre imutabilidade por meio de contratos de código e até mesmo inseridos diretamente no sistema de tipos. Já vi menos sobre segurança de threads.

Kit
fonte
Se todo projeto implementa seu próprio sistema, é difícil integrar bibliotecas diferentes e criar ou usar ferramentas de análise estática / dinâmica para verificar as coisas.