符号なし整数が CLS に準拠していないのはなぜですか?
型指定はパフォーマンスのためだけのものであり、正確さのためではないと思い始めています。
符号なし整数が 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 ビット整数変数がゼロに等しい場合、 、デクリメントが必要です65,535 を生成するには 65,535 を生成し、65,535 に等しい場合はインクリメントしてゼロを生成する必要があります。] このような動作が非常に役立つ場合もありますが、数値型がそのような動作を示す場合は、一部の言語の精神に反する可能性があります。符号なしの型を省略するという決定は、チェックされた数値コンテキストとチェックされていない数値コンテキストの両方をサポートするという決定よりも前におそらく行われたと推測します。個人的には、符号なし数と代数環に別々の整数型があればよかったのにと思います。単項マイナス演算子を符号なし 32 ビット数に適用すると、64 ビットの符号付き結果が得られます [0 以外を否定すると負の数が得られます] が、リング型に単項マイナスを適用すると、そのリング内の加算逆数が得られます。
いずれにせよ、符号なし整数が CLS に準拠していない理由は、「CLS 互換」と見なされるために言語が符号なし整数をサポートする必要はないと Microsoft が判断したためです。
unsigned int は実生活ではあまり役に立ちませんが、複数のタイプの int があると苦痛になるため、多くの言語では、singed int しかありません。
CLS 準拠は、多くの言語からクラスを利用できるようにすることを目的としています…</p>
誰もあなたを CLS に準拠させているわけではないことを忘れないでください。
CLS 準拠で制限されているのはパブリック API のみであるため、メソッド内でunsigned int を使用することも、プライベートメソッドのパラメーターとして使用することもできます。
符号なし整数は、特定の言語間で相互運用できないため、CLS に準拠していません。