1P by neo 27일전 | favorite | 댓글 1개

근거

  • 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의 "별칭"임