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