Fundamentação
- A linguagem C fornece o número de bits em um byte como algo definido pela implementação por meio da macro
CHAR_BIT, e o C++ herda isso diretamente
- O hardware moderno, em sua maioria, converge para a suposição de que um byte tem 8 bits
- Este documento propõe declarar oficialmente no C++ que um byte tem 8 bits
- Os principais compiladores já oferecem suporte a bytes de 8 bits
- O GCC define o valor padrão como 8
- O LLVM define
__CHAR_BIT__ como 8
- O MSVC define
CHAR_BIT como 8
- O POSIX exige bytes de 8 bits desde 2001
- Softwares que não oferecem suporte a bytes de 8 bits não são compatíveis
Impacto em C
- Esta proposta explora se o C++ é relevante para arquiteturas que usam bytes que não têm 8 bits
- O comitê da linguagem C pode chegar a uma conclusão diferente, e o ideal é que os dois comitês estejam alinhados
Linguagem
- No modelo de memória de C++, a unidade básica de armazenamento é o byte, e um byte é composto por 8 bits
- A macro
CHAR_BIT é informada no cabeçalho climits
Biblioteca
- O cabeçalho
climits define todas as macros da mesma forma que o cabeçalho da biblioteca padrão C limits.h
- O cabeçalho
cstdint fornece tipos inteiros com largura especificada e macros que definem os limites desses tipos inteiros
- Todos os tipos e macros deixam de ser opcionais apenas quando o byte tem 8 bits
Resumo do GN⁺
- Este documento é uma proposta para declarar oficialmente no C++ que um byte tem 8 bits
- As plataformas modernas de hardware e software, em sua maioria, usam bytes de 8 bits, então é razoável padronizar isso
- Arquiteturas com bytes que não têm 8 bits não são compatíveis com o C++ moderno, e a importância dessas arquiteturas está diminuindo
- Esta proposta reduz a complexidade do C++ e ajuda novos programadores a entenderem a linguagem com mais facilidade
- Um projeto semelhante com funcionalidade parecida é o padrão POSIX
1 comentários
Comentários do Hacker News
Houve menção a “Signed Integers are Two’s Complement” na série do JF “Can we acknowledge that every real computer works this way?”
A linguagem D trouxe um grande avanço nos seguintes pontos
Algumas pessoas ainda lidam com DSP
Pessoalmente, há diversão em documentar um console de fantasia de 12 bits que “oferece 50% mais bits por byte do que a concorrência”
Houve uma pergunta sobre o que o C++ poderia descontinuar ou simplificar
rand()está quebrada e não pode ser corrigida, e soube que ela ainda não foi descontinuadaHá sentimentos mistos quanto ao fato de não haver uso significativo para
CHAR_BITcom um valor diferente de 8Agradecimentos pelo interesse na proposta, e foi escrito um rascunho atualizado com base no feedback
Gosto da ideia de um microcomputador retrô com bytes de 6 bits
Concordo em impor
int8_t == char == 8 bits, mas não tenho certeza sobre espalhar o equívoco de que byte tem 8 bitschardesde o C++17