unsigned int が CLS に準拠していないのはなぜですか?
-
08-06-2019 - |
質問
符号なし整数が CLS に準拠していないのはなぜですか?
型の指定はパフォーマンスのためだけであり、正確さのためではないと思い始めています。
解決
すべての言語に unsigned int の概念があるわけではありません。たとえば、VB 6 には unsigned int の概念がなかったため、VB7/7.1 の設計者は同様に実装しないという決定を下したのではないかと思われます (現在は VB8 で実装されています)。
引用するには:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
CLSは、開発者が一般的に必要とする言語構造を含めるのに十分な大きさになるように設計されていますが、ほとんどの言語がそれをサポートできるほど十分に小さくなりました。さらに、コードのタイプの安全性を迅速に検証することを不可能にする言語構成は、CLSから除外され、すべてのCLS準拠言語がそうすることを選択した場合、検証可能なコードを作成できるようにします。
アップデート:私は何年か前にこれについて疑問に思っていました。UInt が型安全性を検証できない理由はわかりませんが、CLS 担当者は、ベースラインの最小値がいくらになるかについて、どこかでカットオフポイントを設定する必要があったのだと思います。サポートされる値のタイプ。また、より多くの言語が CLR に移植されているという長期的なことを考えると、まったく概念がないのに、なぜ CLS に準拠するために unsigned int の実装を強制するのでしょうか?
他のヒント
この問題の一部は、C の符号なし整数型が数値としてではなく抽象代数環のメンバーとして動作する必要があるという事実を中心に展開しているのではないかと思われます (つまり、たとえば、符号なし 16 ビット整数変数がゼロに等しい場合) 、それを減少させます 必須 ] このような動作が非常に便利な場合もありますが、数値型がそのような動作を示すことは、一部の言語の精神に反する可能性があります。おそらく、符号なし型を省略するという決定は、チェックされた数値コンテキストとチェックされていない数値コンテキストの両方をサポートするという決定よりも前に行われたのではないかと推測します。個人的には、符号なし数値と代数環に個別の整数型があればよかったのにと思います。単項マイナス演算子を符号なしの 32 ビット数値に適用すると、64 ビットの符号付き結果が得られます [ゼロ以外を否定すると負の数値が得られます]。ただし、リング型に単項マイナス演算子を適用すると、そのリング内で加法逆元が得られます。
いずれにせよ、符号なし整数が CLS に準拠していない理由は、言語が「CLS 互換」とみなされるために符号なし整数をサポートする必要はないと Microsoft が判断したためです。
実生活では、unsigned int はそれほどメリットはありませんが、複数の型の int があると苦痛が生じるため、多くの言語では singed int しかありません。
CLS 準拠は、クラスを多くの言語から利用できるようにすることを目的としています。
CLS 準拠に強制する人はいないということを忘れないでください。
unsigned int も引き続き使用できます 内で メソッド、またはメソッドへのパラメータとして プライベート CLS 準拠で制限されるのはパブリック API のみであるためです。
符号なし整数は、特定の言語間で相互運用できないため、CLS に準拠していません。