106 votes

Pourquoi unsigned int n'est pas conforme CLS?

Pourquoi sont des entiers non signés ne CLS conforme?

Je commence à penser que le type de spécification, c'est juste pour la performance et non pas pour l'exactitude.

85voto

Kev Points 60744

Pas toutes les langues ont la notion d'entiers non signés. Par exemple VB 6 n'avait pas la notion de non signé ints qui je pense a conduit à la décision de l'équipe de designers de VB7/7.1 de ne pas mettre en œuvre (il est mis en œuvre maintenant dans VB8).

Pour citer:

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

Le CLS a été conçu pour être suffisamment grand pour y inclure la langue les constructions qui sont couramment utilisés par les développeurs, mais d'assez petite taille que la plupart des langues sont en mesure de le soutenir. En outre, n'importe quelle langue construire qui rend impossible de rapidement vérifier le type de sécurité de code a été exclu de la CLS, de sorte que tous conformes CLS langues peut produire vérifiables code s'ils choisissent de le faire.

Mise à jour: j'ai fait merveille sur ce y a quelques années, et alors que je ne vois pas pourquoi un UInt ne serait pas de type de sécurité vérifiable, je suppose que le CLS gars devait avoir un point de coupure quelque part sur ce que devraient être la base de référence nombre minimum de la valeur des types de prise en charge. Aussi, quand vous pensez à plus long terme, où de plus en plus de langues sont portés vers la CLR pourquoi les forcer à mettre en œuvre unsigned ints pour gagner CLS de la conformité s'il n'y a absolument aucune idée, jamais?

22voto

supercat Points 25534

Une partie de la question, je pense, s'articule autour du fait que l'entier non signé types en C sont tenus de se comporter comme des membres d'une abstraits algébriques anneau plutôt que comme des numéros [sens, par exemple, que si un entier non signé entier 16 bits de la variable est égale à zéro, la décrémentation il est nécessaire pour un rendement de 65 535, et si elle est égale à 65 535 puis incrémentation il est nécessaire pour un rendement de zéro.] Il ya des moments où un tel comportement est extrêmement utile, mais les types numériques présentent un tel comportement peut aller à l'encontre de l'esprit de certaines langues. Je conjecture que la décision d'omettre non signé types probablement antérieure à la décision de soutenir à la fois activée et désactivée contextes numériques. Personnellement, je souhaite qu'il y en avait été séparée types d'entiers non signés, de chiffres et de algébriques anneaux; l'application d'un unaire moins opérateur non signé de 32 bits devrait donner un 64-bit signé le résultat [niant rien d'autre que zéro, on obtiendra un nombre négatif], mais l'application d'un unaire moins à un type de sonnerie devrait donner l'additif inverse à l'intérieur de ce cercle.

Dans tous les cas, la raison des entiers non signés ne sont pas CLS conforme, c'est que Microsoft a décidé que les langues n'ont pas de soutien des entiers non signés pour être considérés comme des CLS "compatible".

6voto

Ian Ringrose Points 19115

Unsigned int qui n'est pas le gain de beaucoup plus que dans la vraie vie, cependant, ayant plus de 1 type d'int vous donne de la douleur, de sorte que beaucoup de langues n'ont flambé sur les ints.

CLS conforme vise à permettre à une classe d'être fait usage de beaucoup de langues...

5voto

Bryan Roth Points 3592

Des entiers non signés ne sont pas CLS conforme car ils ne sont pas interopérables entre certaines langues.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X