1 pontos por GN⁺ 2024-10-19 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-10-19
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?”

    • Durante um estágio em 1986, houve experiência escrevendo código C em uma máquina BBN C/70 que usava bytes de 10 bits
    • Era uma máquina que existia por causa do pensamento do universo negativo
  • A linguagem D trouxe um grande avanço nos seguintes pontos

    • byte tem 8 bits
    • short tem 16 bits
    • int tem 32 bits
    • long tem 64 bits
    • a aritmética é em complemento de dois
    • ponto flutuante IEEE
    • isso economizou o tempo desperdiçado tentando fazer essas abstrações e obtendo resultados errados
    • Unicode foi usado como conjunto de caracteres
  • 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

    • ouvi dizer que a função rand() está quebrada e não pode ser corrigida, e soube que ela ainda não foi descontinuada
  • Há sentimentos mistos quanto ao fato de não haver uso significativo para CHAR_BIT com um valor diferente de 8

    • pessoalmente, a tentativa de entender o que acontece dentro de um computador com um modelo simplificado acabará encontrando limites
    • a popularidade de projetos físicos de eletrônica está aumentando entre iniciantes
  • Agradecimentos 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

    • microcomputadores normalmente lidam com um número pequeno de objetos e preferem arrays a ponteiros
    • o VGA usava 6 bits por cor, e pode haver um alfabeto legível em uma matriz de 6x4 bits
    • 12 MiB de memória e 6 bits endereçáveis independentemente seriam suficientes
  • Concordo em impor int8_t == char == 8 bits, mas não tenho certeza sobre espalhar o equívoco de que byte tem 8 bits

    • byte já é um “apelido” de char desde o C++17