문제

부호 없는 정수가 CLS를 준수하지 않는 이유는 무엇입니까?

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

도움이 되었습니까?

해결책

모든 언어에 unsigned int 개념이 있는 것은 아닙니다.예를 들어 VB 6에는 unsigned int에 대한 개념이 없었기 때문에 VB7/7.1 설계자가 구현하지 않기로 결정한 것으로 의심됩니다(현재 VB8에서 구현됨).

인용하자면:

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

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

업데이트:나는 몇 년 전에 이것에 대해 궁금해했고 UInt가 유형 안전성을 검증할 수 없는 이유를 알 수는 없지만 CLS 직원은 기준 최소 개수가 무엇인지에 대해 어딘가에 차단 지점이 있어야 했던 것 같습니다. 지원되는 값 유형.또한 점점 더 많은 언어가 CLR로 포팅되는 장기적으로 생각할 때 전혀 개념이 없는 경우 CLS 규정을 준수하기 위해 unsigned int를 구현하도록 강요하는 이유는 무엇입니까?

다른 팁

문제의 일부는 C의 부호 없는 정수 유형이 숫자가 아닌 추상 대수 링의 구성원으로 동작해야 한다는 사실과 관련된 것 같습니다. 예를 들어 부호 없는 16비트 정수 변수가 0인 경우 , 감소시키는 것은 필수의 65,535를 산출하고 65,535와 같으면 0을 산출하기 위해 증가해야 합니다.] 이러한 동작이 매우 유용한 경우가 있지만 숫자 유형은 이러한 동작을 나타내는 경우 일부 언어의 정신에 어긋날 수 있습니다.나는 부호 없는 유형을 생략하기로 한 결정이 아마도 확인된 숫자 컨텍스트와 확인되지 않은 숫자 컨텍스트를 모두 지원하기로 한 결정보다 앞선다고 추측합니다.개인적으로 나는 부호 없는 숫자와 대수적 고리에 대해 별도의 정수 유형이 있었으면 좋았을 것입니다.부호 없는 32비트 숫자에 단항 빼기 연산자를 적용하면 64비트 부호 있는 결과가 생성되지만(0 이외의 값을 부정하면 음수가 생성됨) 링 유형에 단항 빼기 연산자를 적용하면 해당 링 내에서 가산 역수가 생성됩니다.

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

Unsigned int는 실제 생활에서 그렇게 많은 이점을 얻지는 못합니다. 그러나 1개 이상의 int 유형을 사용하면 고통스럽기 때문에 많은 언어에서는 singing int만 사용합니다.

CLS 규격은 클래스를 다양한 언어로 사용할 수 있도록 하는 것을 목표로 합니다.

누구도 CLS 규격을 준수하도록 만들지 않는다는 점을 기억하십시오.

서명되지 않은 정수를 계속 사용할 수 있습니다. 이내에 메소드 또는 매개변수로 사적인 CLS 규격에서는 공개 API만 제한하기 때문입니다.

부호 없는 정수는 특정 언어 간에 상호 운용이 불가능하므로 CLS 규격이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top