development

unsigned int가 CLS 규격이 아닌 이유는 무엇입니까?

big-blog 2020. 8. 16. 21:57
반응형

unsigned int가 CLS 규격이 아닌 이유는 무엇입니까?


부호없는 정수가 CLS 규격이 아닌 이유는 무엇입니까?

유형 사양은 정확성이 아닌 성능을위한 것이라고 생각하기 시작했습니다.


모든 언어에 부호없는 정수 개념이있는 것은 아닙니다. 예를 들어 VB 6에는 서명되지 않은 int의 개념이 없었기 때문에 VB7 / 7.1의 디자이너가 구현하지 않기로 결정했습니다 (현재 VB8에서 구현 됨).

인용하려면 :

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

CLS는 개발자가 일반적으로 필요로하는 언어 구조를 포함 할 수있을만큼 충분히 크지 만 대부분의 언어에서 지원할 수있을만큼 충분히 작게 설계되었습니다. 또한 코드의 형식 안전성을 신속하게 확인할 수 없도록하는 모든 언어 구문은 CLS에서 제외되어 모든 CLS 호환 언어가 원하는 경우 확인 가능한 코드를 생성 할 수 있습니다.

업데이트 : 나는 몇 년 전에 이것에 대해 궁금해했고, 왜 UInt가 타입 안전성을 검증 할 수 없는지 알 수는 없지만 CLS 직원들은 기준선 최소값이 무엇인지 어딘가에 컷오프 지점이 있어야한다고 생각합니다. 지원되는 값 유형의 수. 또한 점점 더 많은 언어가 CLR로 포팅되는 장기적인 관점에서 생각할 때 개념이 전혀없는 경우 서명되지 않은 정수를 구현하여 CLS 규정을 준수해야하는 이유는 무엇입니까?


문제의 일부는 C의 부호없는 정수 유형이 숫자가 아닌 추상 대수 링의 구성원으로 동작해야한다는 사실을 중심으로합니다 [예를 들어, 부호없는 16 비트 정수 변수가 0과 같다는 의미입니다. , 감소가 필요합니다.65,535를 산출하고 65,535와 같으면 0을 산출해야합니다.] 그러한 행동이 매우 유용 할 때가 있습니다. 그러나 숫자 형이 그러한 행동을 보이는 것은 일부 언어의 정신에 어긋 났을 수 있습니다. 나는 서명되지 않은 유형을 생략하기로 한 결정이 아마도 확인 된 숫자 컨텍스트와 확인되지 않은 숫자 컨텍스트를 모두 지원하기로 결정한 것보다 앞서 있다고 추측 할 것입니다. 개인적으로 저는 부호없는 숫자와 대수 고리에 대해 별도의 정수 유형이 있었으면합니다. 단항 마이너스 연산자를 부호없는 32 비트 숫자에 적용하면 64 비트 부호있는 결과가 생성되지만 [0 이외의 값을 부정하면 음수가 생성됨] 링 유형에 단항 마이너스를 적용하면 해당 링 내에서 역가 산성을 얻을 수 있습니다.

어쨌든 부호없는 정수가 CLS 규격이 아닌 이유는 Microsoft가 언어가 "CLS 호환"으로 간주되기 위해 부호없는 정수를 지원할 필요가 없다고 결정했기 때문입니다.


Unsigned int는 실생활에서 그다지 많은 것을 얻지 못하지만 int 유형이 두 개 이상이면 고통을 주므로 많은 언어가 int 만 있습니다.

CLS 규격은 많은 언어에서 클래스를 사용할 수 있도록하는 것입니다.

아무도 당신을 CLS 규격으로 만들지 않습니다.

CLS 규격이 제한하는 공용 API 만 있기 때문에 메서드 에서 서명되지 않은 int를 사용 하거나 개인 메서드 에 대한 매개 변수로 사용할 수 있습니다 .


부호없는 정수는 특정 언어간에 상호 운용 할 수 없기 때문에 CLS 규격이 아닙니다.

참고 URL : https://stackoverflow.com/questions/6325/why-are-unsigned-ints-not-cls-compliant

반응형