Почему unsigned int не соответствует CLS?
Почему целые числа без знака не соответствуют CLS?
Я начинаю думать, что спецификация типа предназначена только для производительности, а не для корректности.
4 ответа
Не все языки имеют понятие беззнаковых целых. Например, в VB 6 не было концепции неподписанных целых, что, как я подозреваю, привело к тому, что разработчики VB7/7.1 также не реализовали это решение (теперь оно реализовано в VB8).
Цитировать:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
CLS был разработан так, чтобы быть достаточно большим, чтобы включать языковые конструкции, которые обычно нужны разработчикам, и в то же время достаточно мал, чтобы большинство языков могли его поддерживать. Кроме того, любая языковая конструкция, которая делает невозможным быструю проверку безопасности типов кода, была исключена из CLS, чтобы все CLS-совместимые языки могли создавать проверяемый код, если они захотят это сделать.
Обновление: я задумался об этом несколько лет назад, и хотя я не могу понять, почему UInt не может быть проверен на безопасность типов, я думаю, ребята из CLS должны были где-то иметь точку отсечения относительно того, что было бы базовым минимумом количество поддерживаемых типов значений. Также, когда вы думаете о более долгосрочном плане, когда все больше и больше языков переносятся в CLR, зачем заставлять их внедрять неподписанные целочисленные значения для обеспечения соответствия CLS, если вообще нет абсолютно никакой концепции?
Я полагаю, что часть проблемы связана с тем фактом, что целочисленные типы без знака в C должны вести себя как члены абстрактного алгебраического кольца, а не как числа [это означает, например, что если 16-разрядная целочисленная переменная без знака равна нулю для его уменьшения необходимо получить 65 535, а если оно равно 65 535, то для увеличения необходимо получить ноль.] Бывают случаи, когда такое поведение чрезвычайно полезно, но числовые типы демонстрируют, что такое поведение может идти вразрез с духом некоторых языков., Я бы предположил, что решение об исключении неподписанных типов, вероятно, предшествует решению поддерживать как проверенные, так и непроверенные числовые контексты. Лично я хотел бы, чтобы были отдельные целочисленные типы для чисел без знака и алгебраических колец; применение унарного оператора минус к 32-разрядному числу без знака должно дать 64-разрядный результат со знаком [отрицание чего-либо, кроме нуля, приведет к отрицательному числу], но применение унарного минуса к типу кольца должно привести к аддитивной инверсии в этом кольце.
В любом случае, целые числа без знака не соответствуют CLS в том, что Microsoft решила, что языки не должны поддерживать целые числа без знака, чтобы считаться "совместимыми с CLS".
Целые числа без знака не соответствуют CLS, потому что они не совместимы между определенными языками.
Неподписанные целые числа не приносят вам особой пользы в реальной жизни, однако наличие более одного типа целых вызывает боль, поэтому многие языки используют только целые числа.
CLS-совместимость направлена на то, чтобы класс мог использоваться на многих языках…
Помните, что никто не заставляет вас быть CLS-совместимым.
Вы по-прежнему можете использовать неподписанные целые внутри метода или как частный метод, так как только CLS ограничивает совместимый CLS.