Почему unsigned int не соответствует CLS? - PullRequest
99 голосов
/ 08 августа 2008

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

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

Ответы [ 4 ]

82 голосов
/ 09 августа 2008

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

Цитировать:

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

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

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

20 голосов
/ 02 июня 2014

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

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

6 голосов
/ 07 сентября 2010

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

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

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

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

4 голосов
/ 09 августа 2008

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

...