c# - ulong - ¿Por qué los unsigned int no son CLS obedientes?
uint64 c# (4)
Las int sin firmar no ganan mucho en la vida real, sin embargo, tener más de 1 tipo de int te da dolor, por lo que muchos idiomas solo tienen inscripciones sintetizadas.
CLS cumple con el objetivo de permitir que una clase se haga uso de muchos idiomas ...
Recuerde que nadie lo hace ser CLS obediente.
Todavía puede usar ints sin firmar dentro de un método, o como parms a un método privado , ya que es solo la API pública que restringe la CLS.
¿Por qué los enteros sin signo no cumplen con CLS?
Estoy empezando a pensar que la especificación de tipo es solo para el rendimiento y no para la corrección.
Los enteros sin signo no son compatibles con CLS porque no son interoperables entre ciertos idiomas.
No todos los idiomas tienen el concepto de ints sin firmar. Por ejemplo, VB 6 no tenía ningún concepto de entradas sin firmar, que sospecho impulsó la decisión de los diseñadores de VB7 / 7.1 de no implementar también (se implementa ahora en VB8).
Citar:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
El CLS fue diseñado para ser lo suficientemente grande como para incluir los constructos de lenguaje que los desarrolladores necesitan comúnmente, pero lo suficientemente pequeños como para que la mayoría de los idiomas puedan admitirlo. Además, cualquier construcción de lenguaje que imposibilite verificar rápidamente el tipo de seguridad del código se excluyó del CLS para que todos los lenguajes que cumplan con CLS puedan producir código verificable si así lo desean.
Actualización: Me pregunto sobre esto hace unos años, y aunque no puedo ver por qué un UInt no sería verificable de tipo de seguridad, creo que los tipos de CLS tenían que tener un punto de corte en algún lugar sobre cuál sería el mínimo de referencia número de tipos de valor compatibles. Además, cuando piense en un plazo más largo en el que se transfieren cada vez más idiomas al CLR, ¿por qué obligarlos a implementar ints sin firmar para obtener el cumplimiento de CLS si no existe absolutamente ningún concepto?
Parte del problema, sospecho, gira en torno al hecho de que los tipos enteros sin signo en C deben comportarse como miembros de un anillo algebraico abstracto en lugar de como números [lo que significa, por ejemplo, que si una variable entera de 16 bits sin signo es igual a cero disminuyendo, es necesario producir 65.535, y si es igual a 65.535, entonces incrementarlo requiere cero.] Hay momentos en que tal comportamiento es extremadamente útil, pero los tipos numéricos muestran que tal comportamiento puede ir en contra del espíritu de algunos idiomas. . Conjeturo que la decisión de omitir los tipos sin firmar probablemente sea anterior a la decisión de admitir contextos numéricos comprobados y no verificados. Personalmente, desearía que hubiese habido tipos enteros separados para números sin firmar y anillos algebraicos; aplicar un operador unario negativo al número de 32 bits sin signo debería producir un resultado firmado de 64 bits [anular cualquier cosa que no sea cero arrojaría un número negativo] pero aplicar un menos unario a un tipo de anillo debería arrojar la inversa aditiva dentro de ese anillo.
En cualquier caso, la razón por la que los enteros sin signo no cumplen con CLS es que Microsoft decidió que los idiomas no tenían que admitir enteros sin signo para ser considerados "CLS compatibles".