Pergunta

Por que os números inteiros não assinados não são compatíveis com CLS?

Estou começando a pensar que a especificação do tipo é apenas para desempenho e não para correção.

Foi útil?

Solução

Nem todas as linguagens possuem o conceito de unsigned ints.Por exemplo, o VB 6 não tinha nenhum conceito de unsigned ints, o que eu suspeito que tenha levado a decisão dos designers do VB7/7.1 de não implementar também (está implementado agora no VB8).

Citar:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

O CLS foi projetado para ser grande o suficiente para incluir as construções de idiomas que são comumente necessárias pelos desenvolvedores, mas pequenos o suficiente para que a maioria dos idiomas possa apoiá -lo.Além disso, qualquer construto de idioma que impossibilita verificar rapidamente o tipo de segurança do código foi excluído do CLS, para que todos os idiomas compatíveis com CLS possam produzir código verificável se optarem por fazê-lo.

Atualizar:Eu me perguntei sobre isso há alguns anos e, embora não consiga ver por que um UInt não seria verificável pela segurança do tipo, acho que o pessoal do CLS precisava ter um ponto de corte em algum lugar para saber qual seria o número mínimo de referência de tipos de valor suportados.Além disso, quando você pensa no longo prazo, onde mais e mais linguagens estão sendo portadas para o CLR, por que forçá-las a implementar entradas não assinadas para obter conformidade com o CLS se não existe absolutamente nenhum conceito, nunca?

Outras dicas

Parte da questão, eu suspeito, gira em torno do fato de que tipos inteiros não assinados em C são obrigados a se comportar como membros de um anel algébrico abstrato em vez de números [o que significa, por exemplo, que se uma variável inteira não assinada de 16 bits for igual a zero , decrementando é obrigatório para produzir 65.535, e se for igual a 65.535, então incrementá-lo é necessário para produzir zero.] Há momentos em que tal comportamento é extremamente útil, mas os tipos numéricos que exibem tal comportamento podem ter ido contra o espírito de algumas linguagens.Eu conjeturaria que a decisão de omitir tipos não assinados provavelmente antecede a decisão de oferecer suporte a contextos numéricos verificados e não verificados.Pessoalmente, gostaria que houvesse tipos inteiros separados para números sem sinal e anéis algébricos;aplicar um operador menos unário a um número não assinado de 32 bits deve produzir um resultado assinado de 64 bits [negar qualquer coisa diferente de zero produziria um número negativo], mas aplicar um menos unário a um tipo de anel deve produzir o inverso aditivo dentro desse anel.

De qualquer forma, a razão pela qual os números inteiros não assinados não são compatíveis com CLS é que a Microsoft decidiu que os idiomas não precisavam suportar números inteiros não assinados para serem considerados "compatíveis com CLS".

Ints não assinados não ganham muito na vida real, no entanto, ter mais de um tipo de int causa dor, então muitos idiomas só possuem ints marcados.

Compatível com CLS visa permitir que uma classe seja usada em vários idiomas…

Lembre-se de que ninguém obriga você a ser compatível com CLS.

Você ainda pode usar entradas não assinadas dentro de um método, ou como parâmetros para um privado método, pois é apenas a API pública que é restringida pela conformidade com CLS.

Inteiros não assinados não são compatíveis com CLS porque não são interoperáveis ​​entre determinados idiomas.

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