GN⁺: C++ 제안: 바이트는 정확히 8비트
(open-std.org)근거
- C 언어는
CHAR_BIT
매크로를 통해 바이트의 비트 수를 구현 정의로 제공하며, C++도 이를 그대로 가져옴 - 현대 하드웨어는 대부분 바이트가 8비트라는 가정에 수렴하고 있음
- 이 문서는 C++에서 바이트가 8비트임을 공식적으로 명시할 것을 제안함
- 주요 컴파일러는 이미 8비트 바이트를 지원하고 있음
- GCC는 기본값을 8로 설정
- LLVM은
__CHAR_BIT__
를 8로 설정 - MSVC는
CHAR_BIT
를 8로 정의
- POSIX는 2001년부터 8비트 바이트를 요구하고 있음
- 8비트 바이트를 지원하지 않는 소프트웨어는 호환되지 않음
C에 미치는 영향
- 이 제안은 C++이 8비트가 아닌 바이트를 사용하는 아키텍처에 대해 관련성이 있는지 탐구함
- C 언어 위원회는 다른 결론에 도달할 수 있으며, 두 위원회가 일치하는 것이 이상적임
언어
- C++ 메모리 모델에서 기본 저장 단위는 바이트이며, 바이트는 8비트로 구성됨
-
CHAR_BIT
매크로는climits
헤더에서 보고됨
라이브러리
-
climits
헤더는 C 표준 라이브러리 헤더limits.h
와 동일하게 모든 매크로를 정의함 -
cstdint
헤더는 지정된 너비를 갖는 정수 타입과 정수 타입의 한계를 지정하는 매크로를 제공함 - 모든 타입과 매크로는 바이트가 8비트인 경우에만 선택적이지 않음
GN⁺의 정리
- 이 문서는 C++에서 바이트가 8비트임을 공식적으로 명시하려는 제안임
- 현대 하드웨어와 소프트웨어 플랫폼은 대부분 8비트 바이트를 사용하고 있어, 이를 표준화하는 것이 합리적임
- 비 8비트 바이트 아키텍처는 현대 C++와 호환되지 않으며, 이러한 아키텍처의 중요성은 감소하고 있음
- 이 제안은 C++의 복잡성을 줄이고, 새로운 프로그래머가 언어를 더 쉽게 이해할 수 있도록 도움
- 비슷한 기능을 가진 다른 프로젝트로는 POSIX 표준이 있음
Hacker News 의견
-
JF의 "Can we acknowledge that every real computer works this way?" 시리즈에서 "Signed Integers are Two’s Complement"에 대한 언급이 있었음
- 1986년 인턴십 동안 10비트 바이트를 사용하는 BBN C/70 기계에서 C 코드를 작성한 경험이 있었음
- 이는 부정적인 우주의 사고로 인해 존재했던 기계였음
-
D 언어는 다음과 같은 점에서 큰 발전을 이루었음
- 바이트는 8비트
- 쇼트는 16비트
- 인트는 32비트
- 롱은 64비트
- 산술은 2의 보수
- IEEE 부동 소수점
- 이러한 추상화를 시도하고 잘못된 결과를 얻는 데 낭비되는 시간을 절약했음
- 유니코드가 문자 집합으로 사용되었음
-
일부 사람들은 여전히 DSP를 다루고 있음
-
개인적으로는 "경쟁사보다 50% 더 많은 비트를 바이트당 제공"하는 12비트 판타지 콘솔을 문서화하는 데 재미를 느끼고 있음
-
C++가 어떤 것을 폐기하거나 단순화할 수 있는지에 대한 질문이 있었음
- rand() 함수가 고장났고 수정할 수 없다는 이야기를 들었으며, 여전히 폐기되지 않았다는 소식을 들었음
-
CHAR_BIT가 8이 아닌 다른 값이 될 의미 있는 사용이 없다는 점에서 혼합된 감정을 가짐
- 개인적으로 컴퓨터 내부에서 일어나는 일을 단순화된 모델로 이해하려는 시도가 결국에는 한계에 부딪힐 것임
- 초보자들 사이에서 물리 전자 프로젝트의 인기가 증가하고 있음
-
제안에 대한 관심에 감사하며, 피드백을 바탕으로 업데이트된 초안을 작성했음
-
6비트 바이트 레트로 마이크로컴퓨터에 대한 아이디어를 좋아함
- 마이크로컴퓨터는 일반적으로 적은 수의 객체를 다루며, 배열을 포인터보다 선호함
- VGA는 색상당 6비트를 사용했으며, 6x4 비트 매트릭스에서 읽을 수 있는 알파벳을 가질 수 있음
- 12MiB 메모리와 독립적으로 주소 지정 가능한 6비트는 충분할 것임
-
int8_t == char == 8비트를 강제하는 것에는 동의하지만, 바이트가 8비트라는 오해를 퍼뜨리는 것에는 확신이 없음
- 바이트는 이미 C++17부터 char의 "별칭"임