일이 왔다 갔다 하고, 닫았다가 다시 열렸고, 닫은 후에 새로 짓고, 금지되고, 새로운 주장이 발견되고, 또 새로운 것이 열렸습니다. 이는 직장에서 흔히 볼 수 있는 일이고, Go 제안 토론에서도 나타나는 현상입니다...
오늘 제가 공유하고 싶은 것은 Go 맵의 NaN 논란과 향후 API 증가 가능성에 대한 것입니다.
컴퓨터 과학에는 NaN(숫자가 아님, 숫자가 아님)이라는 마법의 값이 있습니다. 정의되지 않거나 표현할 수 없는 값을 나타내는 숫자 데이터 유형의 값 클래스입니다. 부동 소수점 연산에 자주 사용됩니다. NaN은 1985년 IEEE 754 부동 소수점 표준에 처음 도입되었습니다.
NaN 값을 저장하고 비교할 때 문제가 발생합니다. 값이 NaN인지 판단할 때 x=NaN 또는 x≠NaN으로 판단하여 비교할 수는 없기 때문입니다. 그러나 NaN은 자신과 결코 동일하지 않기 때문에 x=x 또는 x≠x를 판단하여 x가 NaN 값인지 여부를 판단할 수 있으며, 이는 각각 False와 True를 반환합니다.
NaN을 다른 부동 소수점 숫자 x(여기서 x는 일반 값, 플러스 또는 마이너스 무한대 또는 NaN일 수 있음)와 비교할 때 비교 결과는 다음과 같습니다.
ㅋㅋㅋ x다음 시험 문제에서는 여기를 이해하는 것이 매우 중요합니다.
Go101에서 IEEE-754 부동 소수점 숫자에 대한 질문을 봤습니다. 여기에 질문을 인용해 보겠습니다.
다음 코드:
1 2 3 4 5 6 7 8 9 10 11 |
|
답은 무엇인가요? A인가 D인가?
위 프로그램을 분석해 보면 변수 x와 y는 +Inf이고 양의 무한대입니다. m, n은 NaN 무한 값입니다.
정답은 B입니다.
정답하셨나요?
NaN에 대한 기본적인 이해가 끝나면 본격적으로 주제에 들어갈 수 있습니다. Go 지도 관련 제안에서는 지도 지우기 요구 사항을 충족하기 위해 새로운 API가 자주 언급됩니다.
그러나 많은 논의 끝에 Go 공식 팀에서 제공한 솔루션은 다음과 같습니다.
1 2 3 |
|
및 종료 관련 제안이 이 문제를 종료했습니다. . 우리 노동자들은 '그래, 이거 되겠다'는 의구심이 얼굴에 남는다. 이것이 이런 제안의 배경이다.
하지만 여기에는 함정이 있습니다. NaN 키 값이 포함되어 있으면 삭제를 반복해도 맵이 지워지지 않습니다. 맵에 NaN이 있는데 다시 for+delete를 실행하면 삭제된 것으로 생각하지만 실제로는 삭제되지 않은 경우 누출과 유사한 효과가 나타납니다.
그래서 Go 팀의 영혼인 Russ Cox는 "제안: 사양: 지도 지우기에 삭제(m) 추가[1]"라는 새로운 제안을 다시 시작했습니다. 아래와 같이:
이를 사용하여 NaN의 지도 문제를 해결하는 동시에 논의된 지도 지우기/재설정/청소와 같은 커뮤니티 요구 사항을 완료하기를 바랍니다.
다음 기능이 새로 추가되었습니다.
1 |
|
지도 지우기 기능을 지원합니다(NaN이 포함된 경우에도).
이 제안에 대해 사악한 이름을 붙인 것, 삭제라고 불러야 할지 클리어라고 불러야 할지에 대해 서로 다른 의견이 있는 등 여러 의견이 있습니다.
1 2 3 4 |
|
也有声音提到不允许引入 NaN 值,但显然。在 Go1 已经很难了,因为 NaN 已经被允许引入,球已经在锅里了。
对于 map 新增 API 用于清空/重置/清除的作用,你怎么看呢?还是说你也更喜欢对 NaN 单独的处理?例如 panic?
위 내용은 고사장은 양심을 깨닫고 맵을 클리어하겠다는 의지를 갖고 있다고요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!