为什么 unsigned int 不符合 CLS?
为什么无符号整数不符合 CLS?
我开始认为类型规范只是为了性能而不是为了正确性。
Why are unsigned integers not CLS compliant?
I am starting to think the type specification is just for performance and not for correctness.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(4)
我怀疑,部分问题在于 C 中的无符号整数类型需要充当抽象代数环的成员而不是数字 [这意味着,例如,如果无符号 16 位整数变量等于 0 ,递减它需要来产生 65,535,如果它等于 65,535,则需要递增它来产生零。] 有时这种行为非常有用,但是数字类型表现出这种行为可能会违背了某些语言的精神。 我推测省略无符号类型的决定可能早于支持已检查和未检查数字上下文的决定。 就我个人而言,我希望无符号数和代数环有单独的整数类型; 将一元减运算符应用于无符号 32 位数字应产生 64 位有符号结果 [对除零以外的任何值取反将产生负数],但将一元减运算符应用于环类型应产生该环内的加法逆元。
无论如何,无符号整数不符合 CLS 的原因是 Microsoft 决定语言不必支持无符号整数才能被视为“CLS 兼容”。
并非所有语言都有无符号整数的概念。 例如,VB 6 没有无符号整数的概念,我怀疑这促使 VB7/7.1 的设计者决定不实现(现在已在 VB8 中实现)。
去引用:
http://msdn.microsoft.com/en-us/library/ 12a7a7h3.aspx
CLS 的设计足够大以包含该语言
开发人员通常需要的结构,但足够小
大多数语言都能够支持它。 此外,任何语言
构造使得无法快速验证类型安全性
的代码被排除在 CLS 之外,因此所有符合 CLS 的语言
如果他们选择这样做,可以生成可验证的代码。
更新:几年前我确实想知道这个问题,虽然我不明白为什么 UInt 不能进行类型安全验证,但我猜 CLS 人员必须在某个地方设置一个截止点来确定最低基线是多少支持的值类型数量。 另外,当您考虑从长远来看,越来越多的语言被移植到 CLR 时,如果绝对没有概念,为什么还要强迫它们实现无符号整数以获得 CLS 合规性呢?
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
无符号整数不符合 CLS,因为它们在某些语言之间不可互操作。
Unsigned integers are not CLS compliant because they're not interoperable between certain languages.