Dlaczego niepodpisana liczba całkowita nie jest zgodna z CLS?

Dlaczego niepodpisane liczby całkowite nie są zgodne z CLS?

Zaczynam myśleć, że Specyfikacja typu jest po prostu dla wydajności, a nie dla poprawności.

Author: Peter Mortensen, 2008-08-08

4 answers

Nie wszystkie języki mają pojęcie unsigned int. Na przykład VB 6 nie miał pojęcia o niepodpisanych intach, co podejrzewam, że wpłynęło na decyzję projektantów VB7/7.1, aby również nie implementować (jest zaimplementowane teraz w VB8).

Cytuję:

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

CLS został zaprojektowany tak, aby był wystarczająco duży, aby zawierał język konstruktów, które są powszechnie potrzebne przez deweloperów, ale wystarczająco małe że większość języków jest w stanie aby go wspierać. Ponadto każdy język konstrukcja uniemożliwiająca szybką weryfikację bezpieczeństwa typu kod został wyłączony z CLS tak, że wszystkie języki zgodne z CLS mogą stworzyć weryfikowalny Kod, jeśli zdecydują się to zrobić.

Update: zastanawiałem się nad tym kilka lat temu i chociaż nie widzę, dlaczego UInt nie byłby możliwy do sprawdzenia pod kątem bezpieczeństwa typu, myślę, że faceci z CLS musieli mieć gdzieś punkt odcięcia, jaka byłaby minimalna liczba typów wartości bazowych obsługiwane. Również jeśli myślisz o dłuższej perspektywie, gdzie coraz więcej języków jest przenoszonych do CLR, dlaczego zmuszać ich do wdrożenia niepodpisanych ints, aby uzyskać zgodność z CLS, jeśli nie ma absolutnie żadnej koncepcji, kiedykolwiek?

 91
Author: Kev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Część problemu, jak podejrzewam, obraca się wokół faktu, że niepodpisane typy liczbowe w C muszą zachowywać się jak członkowie abstrakcyjnego pierścienia algebraicznego, a nie jak liczby[co oznacza, na przykład, że jeśli niepodpisana 16-bitowa zmienna całkowita jest równa zeru, zmniejszenie jest wymagane , aby uzyskać 65,535, a jeśli jest równa 65,535, to zwiększenie jest wymagane, aby uzyskać zero.] Są chwile, kiedy takie zachowanie jest niezwykle użyteczne, ale typy liczbowe wykazują takie zachowanie może były sprzeczne z duchem niektórych języków. Domyślam się, że decyzja o pominięciu typów niepodpisanych prawdopodobnie wyprzedza decyzję o obsłudze zarówno sprawdzonych, jak i niezaznaczonych kontekstów liczbowych. Osobiście żałuję, że nie było oddzielnych typów całkowitych dla liczb niepodpisanych i pierścieni algebraicznych; zastosowanie operatora unary minus do niepodpisanej liczby 32-bitowej powinno dać 64-bitowy wynik podpisany [negowanie niczego innego niż zero daje liczbę ujemną], ale zastosowanie unary minus do typu pierścienia powinien dawać odwrotność addytywną w obrębie tego pierścienia.

W każdym razie powodem, dla którego niepodpisane liczby całkowite nie są zgodne z CLS, jest to, że Microsoft zdecydował, że języki nie muszą obsługiwać niepodpisanych liczb całkowitych, aby zostać uznane za"kompatybilne z CLS".

 25
Author: supercat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-01 20:18:30

Niepodpisane liczby całkowite nie są zgodne z CLS, ponieważ nie są interoperacyjne między niektórymi językami.

 8
Author: Bryan Roth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-08 20:04:59

Unsigned int nie zyskują cię tak wiele w prawdziwym życiu, jednak posiadanie więcej niż 1 typu int daje Ci ból, więc wiele języków ma tylko singed int.

Zgodność z CLS ma na celu umożliwienie korzystania z klasy z wielu języków ...

Pamiętaj, że nikt nie sprawia, że jesteś zgodny z CLS.

Możesz nadal używać unsigned ints wewnątrz metody lub jako parm do prywatnej metody , ponieważ tylko publiczne API jest zgodne z CLS / align = "left" /

 7
Author: Ian Ringrose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-05 21:24:50