Почему unsigned int не соответствует CLS?

Почему целые числа без знака не соответствуют CLS?

Я начинаю думать, что спецификация типа предназначена только для производительности, а не для корректности.

8.08.2008 19:55:39
4 ОТВЕТА
РЕШЕНИЕ

Не все языки имеют понятие беззнаковых целых. Например, в VB 6 не было концепции неподписанных целых, что, как я подозреваю, привело к тому, что разработчики VB7 / 7.1 также не реализовали это решение (теперь оно реализовано в VB8).

Цитировать:

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

CLS был спроектирован так, чтобы быть достаточно большим, чтобы включать языковые конструкции, которые обычно нужны разработчикам, и в то же время достаточно мал, чтобы большинство языков могли его поддерживать. Кроме того, любая языковая конструкция, которая делает невозможным быструю проверку безопасности типов кода, была исключена из CLS, чтобы все CLS-совместимые языки могли создавать проверяемый код, если они захотят это сделать.

Обновление: я задумался об этом несколько лет назад, и хотя я не могу понять, почему UInt не может быть проверен на безопасность типов, я думаю, ребята из CLS должны были где-то иметь точку отсечения относительно того, что было бы базовым минимумом. количество поддерживаемых типов значений. Кроме того, когда вы думаете о более долгосрочном плане, когда все больше и больше языков переносятся в CLR, зачем заставлять их внедрять неподписанные целочисленные значения для обеспечения соответствия CLS, если вообще нет абсолютно никакой концепции?

85
20.04.2012 21:53:35
@Kevin: я просто задумался о теме. Твой ответ кажется логичным. Мне просто нравится думать о теме. Я думаю, это позор, Pascal-подобные типы не попали в CLR. Но ваш аргумент о других языках: это не остановило IronPython, использующий строго динамическую типизацию (DLR) в CLR со строго статической типизацией?
doekman 8.08.2008 20:19:05
@doekman: Да, хотя IronPython и IronRuby демонстрируют, что CLR может предоставить платформу, на которой вы можете создавать языки с динамической типизацией, целью CLS было предоставить набор стандартов, которые выходят за рамки функциональности языка и позволяют им успешно и безопасно взаимодействовать. Я не думаю, что то, что язык может сделать с точки зрения добавления функций DL, напрямую связано с тем, что должно входить в CLS / CTS.
Kev 8.08.2008 20:45:24
Насколько я понимаю, CLR имеет один 32-битный целочисленный примитивный тип, который имеет отдельные инструкции для подписанного добавления с проверкой переполнения, беззнакового добавления с проверкой переполнения и не зависящим от знака дополнения mod 2 ^ 32 и т. Д .; Когда его просят преобразовать ссылку на объект в 32-битный целочисленный примитив, CLR не знает и не заботится о том, ожидает ли код, использующий это число, его подписи или неподписания. Вне зависимости от того, считает ли компилятор число подписанным или неподписанным, это обычно влияет на то, какие инструкции генерирует компилятор для работы с ним, но это проблема языка, а не CLR.
supercat 22.01.2015 16:43:16

Целые числа без знака не соответствуют CLS, потому что они не совместимы между определенными языками.

5
8.08.2008 20:04:59

Неподписанные int не приносят вам особой пользы в реальной жизни, однако наличие более 1 типа int доставляет вам боль, поэтому многие языки используют только целые числа.

CLS-совместимость направлена ​​на то, чтобы класс мог использоваться на многих языках…

Помните, что никто не заставляет вас быть CLS-совместимым.

Вы все еще можете использовать беззнаковые целые внутри метода или как частный метод, так как CLS ограничивает только открытый API.

6
5.01.2016 21:24:50
Они очень важны, если вы занимаетесь какой-то битовой арифметикой.
nicodemus13 23.05.2012 15:04:20
@ nicodemus13 когда вы в последний раз видели систему бизнес-администрирования с побитовой арифметикой в ​​своей проблемной области? (Например, программное обеспечение, которое пишут программисты на VB.NET)
Ian Ringrose 24.05.2012 08:28:48
Все с контрольной суммой будет использовать побитовую арифметику, это довольно часто, и мне кажется странным перетаскивать любой другой язык вниз, потому что VB не поддерживает целые числа без знака. .NET также должен быть универсальным, не только для VB-разработчиков LOB-приложений. Когда вы говорите «1 тип типа int», вы не думаете, что байт, short, int, long - это тоже боль? Я не совсем понимаю, почему подписание более неудобно.
nicodemus13 24.05.2012 10:45:06

Я полагаю, что часть проблемы связана с тем фактом, что целочисленные типы без знака в C должны вести себя как члены абстрактного алгебраического кольца, а не как числа [это означает, например, что если 16-разрядная целочисленная переменная без знака равна нулю , уменьшая требуетсячтобы получить 65 535, и если оно равно 65 535, то для увеличения необходимо получить ноль.] Бывают случаи, когда такое поведение чрезвычайно полезно, но числовые типы, демонстрирующие такое поведение, могут идти вразрез с духом некоторых языков. Я бы предположил, что решение об исключении неподписанных типов, вероятно, предшествует решению поддерживать как проверенные, так и непроверенные числовые контексты. Лично я хотел бы, чтобы были отдельные целочисленные типы для чисел без знака и алгебраических колец; применение унарного оператора минус к 32-разрядному числу без знака должно дать 64-разрядный результат со знаком [отрицание чего-либо, кроме нуля, приведет к отрицательному числу], но применение унарного минуса к типу кольца должно привести к аддитивной инверсии в этом кольце.

В любом случае, целые числа без знака не соответствуют CLS в том, что Microsoft решила, что языки не должны поддерживать целые числа без знака, чтобы считаться «совместимыми с CLS».

22
1.06.2014 20:18:30
Отличное объяснение с математической точки зрения!
dizarter 18.06.2015 13:42:14