Вопрос

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

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

Это было полезно?

Решение

Не во всех языках есть понятие целых чисел без знака.Например, в 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".

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

Совместимость с CLS направлена на то, чтобы позволить использовать класс на множестве языков…

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top