Warum sind vorzeichenlose Ganzzahlen nicht CLS-konform?
Ich fange an zu denken, dass die Typenspezifikation nur der Leistung und nicht der Korrektheit dient.
quelle
Warum sind vorzeichenlose Ganzzahlen nicht CLS-konform?
Ich fange an zu denken, dass die Typenspezifikation nur der Leistung und nicht der Korrektheit dient.
Nicht alle Sprachen haben das Konzept von Ints ohne Vorzeichen. Zum Beispiel hatte VB 6 kein Konzept für nicht signierte Ints, was meiner Meinung nach die Entscheidung der Designer von VB7 / 7.1 zur Nichtimplementierung veranlasste (es ist jetzt in VB8 implementiert).
Zitieren:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
Das CLS wurde so konzipiert, dass es die von Entwicklern häufig benötigten Sprachkonstrukte enthält, aber klein genug, dass die meisten Sprachen es unterstützen können. Darüber hinaus wurde jedes Sprachkonstrukt, das es unmöglich macht, die Typensicherheit von Code schnell zu überprüfen, aus dem CLS ausgeschlossen, sodass alle CLS-kompatiblen Sprachen überprüfbaren Code erzeugen können, wenn sie dies wünschen.
Update: Ich habe mich vor einigen Jahren darüber gewundert, und obwohl ich nicht verstehen kann, warum ein UInt nicht überprüfbar für die Typensicherheit ist, mussten die CLS-Leute irgendwo einen Grenzwert für das Mindestmaß festlegen Anzahl der unterstützten Werttypen. Auch wenn Sie längerfristig darüber nachdenken, wo immer mehr Sprachen in die CLR portiert werden, warum sollten Sie sie dann zwingen, nicht signierte Ints zu implementieren, um die CLS-Konformität zu erreichen, wenn es überhaupt kein Konzept gibt?
Ich vermute, ein Teil des Problems dreht sich um die Tatsache, dass vorzeichenlose Ganzzahltypen in C sich als Mitglieder eines abstrakten algebraischen Rings und nicht als Zahlen verhalten müssen [was beispielsweise bedeutet, dass eine vorzeichenlose 16-Bit-Ganzzahlvariable gleich Null ist , dekrementieren ist erforderlichum 65.535 zu ergeben, und wenn es gleich 65.535 ist, muss es inkrementiert 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 gegen den Geist einiger Sprachen verstoßen hat. 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. Ich persönlich wünschte, es hätte separate Ganzzahltypen für vorzeichenlose Zahlen und algebraische Ringe gegeben. Das Anwenden eines unären Minusoperators auf eine vorzeichenlose 32-Bit-Zahl sollte ein vorzeichenbehaftetes 64-Bit-Ergebnis ergeben [das Negieren von etwas anderem als Null würde eine negative Zahl ergeben], aber das Anwenden eines unären Minus auf einen Ringtyp sollte das additive Inverse innerhalb dieses Rings ergeben.
In jedem Fall ist der Grund dafür, dass vorzeichenlose Ganzzahlen nicht CLS-kompatibel sind, dass Microsoft entschieden hat, dass Sprachen keine vorzeichenlosen Ganzzahlen unterstützen müssen, um als "CLS-kompatibel" zu gelten.
quelle
Unsignierte Ints bringen Ihnen im wirklichen Leben nicht so viel, aber mehr als eine Art von Int zu haben, schmerzt Sie, so dass viele Sprachen nur Ints gesungen haben.
CLS-konform zielt darauf ab, dass eine Klasse aus vielen Sprachen verwendet werden kann…
Denken Sie daran, dass niemand Sie CLS-konform macht.
Sie können weiterhin vorzeichenlose Ints innerhalb einer Methode oder als Parameter für eine private Methode verwenden, da nur die öffentliche API die CLS-Kompatibilität einschränkt.
quelle
Ganzzahlen ohne Vorzeichen sind nicht CLS-kompatibel, da sie zwischen bestimmten Sprachen nicht interoperabel sind.
quelle