De ce sunt nesemnate int care nu sunt compatibile cu CLS?

De ce sunt numere întregi nesemnate care nu sunt compatibile cu CLS?

Încep să cred că specificația de tip este doar pentru performanță și nu pentru corectitudine.

0
fr hi bn

4 răspunsuri

Intinderele nesignificate nu vă câștig atât de mult în viața reală, însă cu mai mult de un tip de int vă dă durere, astfel încât o mulțime de limbi au avut doar ints.

Conformitate CLS vizează permiterea utilizării unei clase din mai multe limbi?

Amintiți-vă că nimeni nu vă face să vă conformați CLS.

Cu toate acestea, puteți utiliza metode nesemnate în cadrul unei metode sau paramale într-o metodă privată , deoarece este restricționat doar API-ul public.

0
adăugat
@ nicodemus13 când este ultima dată când ați văzut un sistem de administrare a afacerii care avea aritmetică biți în domeniul său de probleme? (De exemplu, tipul de software pe care scriitorii VB.NET îl scriu)
adăugat autor Ian Ringrose, sursa
Sunt destul de esențiale, dacă faci o aritmetică biți.
adăugat autor nicodemus13, sursa
Orice cu o sumă de control va folosi o aritmetică bit-înțeleaptă, destul de obișnuită și mi se pare ciudat să trag orice altă limbă în jos, deoarece VB nu susținea întregi nesemnate. .NET este menit să fie generic, de asemenea, nu numai pentru VB-scriitori de aplicații LOB. Când spui "1 tip de int", nu crezi că ai octet, scurt, int, lung este, de asemenea, o durere? Nu prea înțeleg de ce semnarea este mai ciudată.
adăugat autor nicodemus13, sursa

Nu toate limbile au conceptul de nesemnate. De exemplu, VB 6 nu avea niciun concept de insigne nesemnate, despre care suspectez ca a condus decizia designerilor VB7 / 7.1 de a nu implementa, de asemenea (este implementat acum in VB8).

A cita:

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

     

CLS a fost proiectat să fie suficient de mare pentru a include limba   construcții care sunt în mod obișnuit necesare dezvoltatorilor, însă sunt destul de mici   că cele mai multe limbi sunt capabile să o susțină. În plus, orice limbă   ceea ce face imposibilă verificarea rapidă a siguranței de tip   de cod a fost exclus din CLS, astfel încât toate limbile compatibile cu CLS   pot produce cod verificabil dacă aceștia aleg să facă acest lucru.

Actualizare: M-am întrebat despre asta cu câțiva ani în urmă și, deși nu văd de ce un UInt nu ar putea fi verificat de tipul de siguranță, cred că băieții CLS trebuiau să aibă un punct de separare undeva în ceea ce privește minimul de bază numărul de tipuri de valori acceptate. De asemenea, atunci când vă gândiți la termenul mai lung în care din ce în ce mai multe limbi sunt portate la CLR, de ce să le forțeze să implementeze semnale nesemnate pentru a obține conformitatea CLS dacă nu există niciun concept vreodată?

0
adăugat
@Kevin: M-am întrebat doar despre subiect. Răspunsul pare logic. Îmi place să mă gândesc la subiect. Cred că este o rușine Tipurile de tip Pascal nu au ajuns în CLR. Dar argumentul tău despre alte limbi: că nu a oprit IronPython folosind tastarea puternică dinamică (DLR) într-un CLR tipic static stricat?
adăugat autor doekman, sursa
@doekman: În timp ce IronPython și IronRuby demonstrează că CLR poate oferi o platformă pe care se pot construi limbi dinamic tipărite, scopul CLS a fost acela de a oferi un set de standarde care să depășească funcționalitatea lingvistică și să le permită să interacționeze cu succes și în siguranță. Nu cred că ceea ce poate face o limbă în termeni de a spune că adăugarea de funcții DL este direct legată de ceea ce ar trebui să meargă în CLS / CTS.
adăugat autor Kev, sursa
Din punctul meu de vedere, CLR are un tip primitiv de 32 de biți întreg, care are instrucțiuni separate pentru adăugarea semnelor cu verificarea depășirii, adăugarea nesemnată cu verificarea depășirii și mod de adăugare semn agnostic mod 2 ^ 32 etc .; când este solicitat să convertească o referință de obiect la un primitiv întreg pe 32 de biți, CLR nu știe și nu are grijă dacă codul care utilizează acest număr se așteaptă să fie semnat sau nesemnificat. Dacă compilatorul crede că un număr este semnat sau nesemnat, va afecta, în general, ce instrucțiuni compilatorul generează pentru operați
adăugat autor supercat, sursa
@doekman Ce tipuri de tip Pacal?
adăugat autor IllidanS4, sursa

Numerele neimpozitate nu sunt compatibile cu CLS, deoarece nu sunt interoperabile între anumite limbi.

0
adăugat

O parte a problemei, bănuiesc, se referă la faptul că tipurile întregi nesemnate din C sunt obligate să se comporte mai degrabă ca membri ai unui inel algebric abstract decât ca numere [de exemplu, dacă o variabilă nesemnată pe întregul număr de 16 biți este egală cu zero , decrementând că este necesar pentru a obține 65.535 și dacă este egal cu 65.535, atunci creșterea este necesară pentru a obține zero.] Există momente când un astfel de comportament este extrem de util, dar tipurile numerice care prezintă un astfel de comportament împotriva spiritului unor limbi. Aș presupune că decizia de a omite tipurile nesemnate probabil precede decizia de a sprijini atât contextele numerice verificate, cât și cele necontrolate. Personal, doresc să fi existat tipuri întregi separate pentru numere nesemnate și inele algebrice; aplicând un operator minus unar la un număr nesemnificat pe 32 de biți ar trebui să dea un rezultat semnat pe 64 de biți [negând altceva decât zero ar da un număr negativ], dar aplicarea unui minus unar unui tip de inel ar trebui să dea aditivul invers în acel inel.

În orice caz, motivul pentru care întregul număr nesemnat nu este compatibil cu CLS este că Microsoft a decis că limbile nu trebuie să suporte numere întregi nesemnate pentru a fi considerate compatibile cu CLS.

0
adăugat
Excelenta explicatie din perspectiva matematica!
adăugat autor dizarter, sursa