Proč jsou unsigned int nebudeme CLS vyhovující?

hlasů
94

Proč jsou nepodepsané celá čísla nejsou CLS vyhovující?

Začínám si myslet, specifikace typ je jen na výkonu, a nikoli z hlediska správnosti.

Položena 08/08/2008 v 20:55
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
78

Ne všechny jazyky mají představu nepodepsané ints. Například VB 6 neměl žádnou představu o nepodepsané ints které mám podezření poháněly rozhodnutí návrhářů VB7 / 7.1 neprovést stejně (je implementováno už v VB8).

Citovat:

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

CLS byl navržen tak, aby byl dostatečně velký, aby zahrnoval jazykové konstrukty, které jsou běžně potřebné vývojáři, ale dost malý na to, že většina jazyků jej podpořit. Kromě toho může každý jazyk konstrukt, který znemožňuje, aby urychleně prověřit bezpečnost typů kódu se z CLS vyloučeno, aby všechny CLS-kompatibilní jazyky mohou produkovat ověřitelný kód, pokud se rozhodnou tak učinit.

Aktualizace: Udělal jsem uvažovat o to několik let zpátky, a zatímco já nevidím důvod, proč uint nebude bezpečnostní typ ověřitelné, myslím, že CLS kluci měli mít místo řezu někde o tom, co by bylo základní minimum počet typů hodnot podporovány. I když si myslíte o delším časovém horizontu, kde se stále více a více jazyků je portován na CLR, proč byly nuceny realizovat nepodepsané celých čísel, aby získali dodržování CLS, pokud neexistuje žádný koncept, kdy?

Odpovězeno 08/08/2008 v 21:01
zdroj uživatelem

hlasů
17

Část problému, tuším, se točí kolem toho, že nepodepsané celočíselné typy v jazyce C, jsou povinni chovat se jako členové abstraktní algebraické kruhu, spíše než jsou čísla [tom smyslu, že například v případě, že unsigned 16-bit integer proměnná se rovná nule , Dekrementační je nutná pro získání 65535, a pokud je to rovná 65.535 pak postupně je požadováno pro získání nulové.] jsou chvíle, kdy je takové chování je velmi užitečné, ale číselné typy vykazovat takové chování může šly proti duchu některých jazycích , Já bych se domnívají, že rozhodnutí vynechat nepodepsané typy pravděpodobně předchází rozhodnutí podpořit obě zapsaných a nezapsaných číselné kontexty. Osobně jsem si tam byl zvláštní celočíselné typy pro nepodepsané čísel a algebraických prsteny; aplikování unární operátor minus znaménka 32-bitové číslo by se získá podepsaný výsledek 64bitové [popírající něco jiného než nula se získá záporné číslo], ale vztahujících unární minus do prstencového typu by získá přísadu inverzní v tomto kruhu.

V každém případě je důvodem nepodepsané celá čísla nejsou CLS kompatibilní je, že Microsoft se rozhodl, že jazyky se nemusel podpořit nepodepsané celá čísla, aby mohl být považován za „CLS kompatibilní“.

Odpovězeno 01/06/2014 v 21:18
zdroj uživatelem

hlasů
4

Nepodepsané celá čísla nejsou CLS vyhovující, protože to nejsou interoperabilní mezi některými jazyky.

Odpovězeno 08/08/2008 v 21:04
zdroj uživatelem

hlasů
3

Unsigned int je tě nezíská, že hodně v reálném životě, ale mají více než 1 typu int dá vám bolest, takže spousta jazyků mají pouze ohořelé celých čísel.

CLS kompatibilní se zaměřuje na umožnění třída být využit z mnoha jazyků ...

Uvědomte si, že nikdo dělá budete CLS kompatibilní.

Stále můžete použít nepodepsané celých čísel v rámci metody, nebo jako Parms k soukromému způsobu, jak je to jen veřejné API, která CLS vyhovující omezuje.

Odpovězeno 07/09/2010 v 14:27
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more