Почему unsigned int не соответствует CLS?

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

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

98 голосов | спросил doekman 8 PM000000110000003931 2008, 23:55:39

4 ответа


0

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

Цитировать:

  

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

     

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

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

ответил Kev 9 AM000000120000005331 2008, 00:01:53
0

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

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

ответил supercat 2 J0000006Europe/Moscow 2014, 00:18:30
0

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

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

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

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

ответил Ian Ringrose 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 07 Sep 2010 17:27:40 +0400 2010, 17:27:40
0

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

ответил Bryan Roth 9 AM000000120000005931 2008, 00:04:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132