2008-08-08 37 views

答えて

77

すべての言語がunsigned intsの概念を持っているわけではありません。例えば、VB 6には、VB7/7.1のデザイナーの決定を実行していないと思われるunsigned intのコンセプトはありませんでした(これは現在VB8で実装されています)。

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

をCLSがまだ十分に小さい ほとんどの言語をサポートすることができていることを、一般的に開発者が必要とされている言語 構造を含むのに十分な大きさに設計されました:引用する

それ。さらに、 構造体の型安全性を迅速に検証することができない構造体である がCLSから除外され、すべてのCLS準拠言語 がそのように選択した場合、検証可能なコードを生成できるようになりました。

アップデート:私はいくつかの年前にこのことについて不思議をした、とUINTは検証型の安全性ではないでしょうなぜ私が見ることができない一方で、私はCLSの連中がどこかにようにカットオフポイントを持っていたと思いますサポートされている値タイプのベースライン最小数は何ですか。また、より多くの言語がCLRに移植されている長期的な考えを考えるとき、CLSコンプライアンスを得るために署名されていないintを実装する理由は何もありません。

+0

@ケビン:私はちょうどその話題について疑問に思いました。あなたは論理に見えると答えます。私はその話題について考えるのが好きです。私は、パスカルのようなタイプはCLRに入れなかったのは残念だと思う。しかし、他の言語に関するあなたの議論:それは強く静的な型付きのCLRで強力な動的型付け(DLR)を使用してIronPythonを停止しませんでしたか? – doekman

+0

@doekman:IronPythonとIronRubyは、CLRが動的に型指定された言語を構築できるプラットフォームを提供できることを示していますが、CLSの目的は、言語機能を超えて正常に安全に相互運用できるようにする一連の標準を提供することでした。私は、DL機能を追加するという言葉で言えることは、CLS/CTSに入るべきものに直接関係しているとは思いません。 – Kev

+0

私の理解では、CLRには1つの32ビット整数プリミティブ型があります。これは、オーバーフローチェック付きの符号付き加算、オーバーフローチェック付きの符号なし加算、および符号なしの加算mod 2 32などの命令を個別に備えています。オブジェクト参照を32ビット整数プリミティブに変換するように頼まれたとき、CLRはその番号*を使用しているコードが*符号付きか符号なしかを認識していないし気にもしません。コンパイラが数値が符号付きか符号なしかを判断するかどうかは、一般に、コンパイラがどの命令にどのような命令を生成するかに影響しますが、CLRではなく言語です。 – supercat

3

符号なし整数は、特定の言語間で相互運用できないため、CLSに準拠していません。

3

Unsigned intは実際にはそれほど多くはありませんが、int型が1つ以上あると苦痛を与えます。そのため多くの言語ではint型が使われています。対応

CLSは、クラスは、言語のロットからの利用を行うことができることを目的としている...

は、誰もあなたがCLS準拠して行うものではありませんことを覚えておいてください。

あなたはまだ内方法、またはそれに準拠制限しをCLSにのみ公開APIであるとしてプライベート方法、にPARMSとして符号なし整数型を使用することができます。

+11

ビット単位の算術演算を行っているのであれば、かなり重要です。 – nicodemus13

+0

@ nicodemus13問題のドメインでビット単位の算術演算を持つビジネス管理システムを最後に見たのはいつですか? (VB.NETプログラマが書いているソフトウェアのようなもの) –

+36

チェックサムを持つものはビット単位の算術演算を使用しますが、これはかなり一般的です。VBは符号なし整数をサポートしていないので、 。 .NETは、LOBアプリケーションのVBライターだけでなく、一般的なものでもあります。あなたは 'int型'の1つのタイプを言うとき、あなたはバイト、短い、intを持っているとは思わない、長いも痛みですか?私はなぜ署名がもっと厄介なのかよく分かりません。 – nicodemus13

17

Cの符号なし整数型は、数値ではなく抽象代数環のメンバとして動作する必要があるという事実を念頭に置いています[例えば、符号なし16ビット整数変数が0に等しい場合、それを減らすにはが必要です。は65,535を返し、65,535に等しい場合はゼロを生成する必要があります。]このような動作は非常に便利ですが、いくつかの言語の精神に対して私は、符号なしの型を省略するという決定は、チェックされた数値コンテキストとチェックされていない数値コンテキストの両方をサポートするという決定より前であると推測します。個人的には、符号なしの数と代数環のために別々の整数型があったらいいのに。単項マイナス演算子を符号なし32ビット数に適用すると、64ビット符号付きの結果が得られるはずです(0以外の値を否定すると負の数になります)が、リング型に単項マイナスを適用すると、

いずれの場合でも、符号なし整数がCLSに準拠しない理由は、「CLS互換」とみなされるために、言語が符号なし整数をサポートする必要がないとMicrosoftが判断したためです。

+0

数学の観点から優れた説明! – dizarter

関連する問題