Почему целые числа без знака несовместимы с CLS?
Я начинаю думать, что спецификация типа предназначена только для производительности, а не для правильности.
источник
Почему целые числа без знака несовместимы с 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».
источник
Беззнаковые целые числа в реальной жизни не принесут вам особой пользы, однако наличие более одного типа целых чисел причиняет вам боль, поэтому во многих языках используются только целые числа.
Совместимость с CLS нацелена на то, чтобы позволить использовать класс из множества языков ...
Помните, что никто не заставляет вас соответствовать требованиям CLS.
Вы по-прежнему можете использовать целые числа без знака в методе или как параметры частного метода, поскольку CLS-совместимый ограничивает только общедоступный API.
источник
Целые числа без знака несовместимы с CLS, потому что они не совместимы между определенными языками.
источник