Frage

Warum sind vorzeichenlose Ganzzahlen nicht CLS-kompatibel?

Ich fange an zu glauben, dass die Typspezifikation nur der Leistung und nicht der Korrektheit dient.

War es hilfreich?

Lösung

Nicht alle Sprachen verfügen über das Konzept von vorzeichenlosen Ganzzahlen.Zum Beispiel hatte VB 6 kein Konzept für unsigned ints, was meiner Meinung nach die Entscheidung der Designer von VB7/7.1 auslöste, es nicht ebenfalls zu implementieren (es ist jetzt in VB8 implementiert).

Zitieren:

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

Das CLS wurde so konzipiert, dass sie groß genug sind, um die Sprachkonstrukte einzubeziehen, die üblicherweise von Entwicklern benötigt werden, aber klein genug, damit die meisten Sprachen sie unterstützen können.Darüber hinaus wurde jedes Sprachkonstrukt, das es unmöglich macht, die Art des Codes vom Typ Code schnell zu überprüfen, von den CLS ausgeschlossen, sodass alle CLS-konformen Sprachen überprüfbarer Code erzeugen können, wenn sie sich dafür entscheiden.

Aktualisieren:Ich habe mich vor einigen Jahren darüber gewundert, und obwohl ich nicht verstehen kann, warum ein UInt nicht überprüfbar auf Typsicherheit sein sollte, vermuten die CLS-Leute, dass sie irgendwo einen Grenzwert haben mussten, was die Mindestanzahl von Basislinien wäre Werttypen werden unterstützt.Auch wenn man längerfristig darüber nachdenkt, dass immer mehr Sprachen auf die CLR portiert werden, warum sollte man sie dazu zwingen, vorzeichenlose Ints zu implementieren, um CLS-Konformität zu erreichen, wenn es überhaupt kein Konzept dafür gibt?

Andere Tipps

Ich vermute, ein Teil des Problems dreht sich um die Tatsache, dass vorzeichenlose Ganzzahltypen in C sich wie Mitglieder eines abstrakten algebraischen Rings und nicht wie Zahlen verhalten müssen [was beispielsweise bedeutet, dass eine vorzeichenlose 16-Bit-Ganzzahlvariable gleich Null ist , Dekrementieren ist es erforderlich um 65.535 zu ergeben, und wenn es gleich 65.535 ist, muss es erhöht werden, um Null zu ergeben.] Es gibt Zeiten, in denen ein solches Verhalten äußerst nützlich ist, aber numerische Typen zeigen, dass ein solches Verhalten möglicherweise dem Geist einiger Sprachen zuwiderläuft.Ich würde vermuten, dass die Entscheidung, vorzeichenlose Typen wegzulassen, wahrscheinlich vor der Entscheidung liegt, sowohl geprüfte als auch ungeprüfte numerische Kontexte zu unterstützen.Persönlich wünschte ich, es gäbe separate Ganzzahltypen für vorzeichenlose Zahlen und algebraische Ringe;Das Anwenden eines unären Minusoperators auf eine vorzeichenlose 32-Bit-Zahl sollte ein 64-Bit-Ergebnis mit Vorzeichen ergeben (die Negation von etwas anderem als Null würde eine negative Zahl ergeben), aber die Anwendung eines unären Minus auf einen Ringtyp sollte die additive Umkehrung innerhalb dieses Rings ergeben.

Der Grund dafür, dass vorzeichenlose Ganzzahlen nicht CLS-kompatibel sind, liegt auf jeden Fall darin, dass Microsoft entschieden hat, dass Sprachen keine vorzeichenlosen Ganzzahlen unterstützen müssen, um als „CLS-kompatibel“ zu gelten.

Vorzeichenlose Ints bringen Ihnen im wirklichen Leben nicht so viel, aber mehr als einen Typ von Ints zu haben, bereitet Ihnen Schmerzen, weshalb viele Sprachen nur singende Ints haben.

CLS-konform zielt darauf ab, die Verwendung einer Klasse aus vielen Sprachen zu ermöglichen ...

Denken Sie daran, dass Sie niemand dazu zwingt, CLS-konform zu sein.

Sie können weiterhin vorzeichenlose Ints verwenden innerhalb eine Methode oder als Parameter für a Privat Methode, da nur die öffentliche API durch CLS-Konformität eingeschränkt wird.

Ganzzahlen ohne Vorzeichen sind nicht CLS-kompatibel, da sie zwischen bestimmten Sprachen nicht interoperabel sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top