1 puntos por GN⁺ 2024-10-19 | 1 comentarios | Compartir por WhatsApp

Fundamento

  • El lenguaje C proporciona la cantidad de bits de un byte como algo definido por la implementación mediante la macro CHAR_BIT, y C++ adopta esto tal cual
  • El hardware moderno en su mayoría ha convergido en la suposición de que un byte tiene 8 bits
  • Este documento propone especificar oficialmente en C++ que un byte tiene 8 bits
  • Los compiladores principales ya admiten bytes de 8 bits
    • GCC establece el valor predeterminado en 8
    • LLVM establece __CHAR_BIT__ en 8
    • MSVC define CHAR_BIT como 8
  • POSIX exige bytes de 8 bits desde 2001
  • El software que no admite bytes de 8 bits no es compatible

Impacto en C

  • Esta propuesta explora si C++ sigue siendo relevante para arquitecturas que usan bytes que no son de 8 bits
  • El comité del lenguaje C puede llegar a una conclusión diferente, y sería ideal que ambos comités coincidan

Lenguaje

  • En el modelo de memoria de C++, la unidad básica de almacenamiento es el byte, y un byte está compuesto por 8 bits
  • La macro CHAR_BIT se informa en el encabezado climits

Biblioteca

  • El encabezado climits define todas las macros igual que el encabezado de la biblioteca estándar de C limits.h
  • El encabezado cstdint proporciona tipos enteros de ancho especificado y macros que especifican los límites de los tipos enteros
  • Todos los tipos y macros dejan de ser opcionales solo cuando el byte tiene 8 bits

Resumen de GN⁺

  • Este documento es una propuesta para especificar oficialmente en C++ que un byte tiene 8 bits
  • La mayoría del hardware moderno y las plataformas de software usan bytes de 8 bits, por lo que es razonable estandarizarlo
  • Las arquitecturas con bytes que no son de 8 bits no son compatibles con el C++ moderno, y la importancia de estas arquitecturas está disminuyendo
  • Esta propuesta reduce la complejidad de C++ y ayuda a que los nuevos programadores entiendan el lenguaje más fácilmente
  • Un proyecto similar con funcionalidad comparable es el estándar POSIX

1 comentarios

 
GN⁺ 2024-10-19
Opinión de Hacker News
  • Hubo una mención a "Signed Integers are Two’s Complement" en la serie de JF "Can we acknowledge that every real computer works this way?"

    • Durante unas prácticas en 1986, tuvo la experiencia de escribir código C en una máquina BBN C/70 que usaba bytes de 10 bits
    • Era una máquina que existió por una especie de pensamiento de universo negativo
  • El lenguaje D representó un gran avance en los siguientes aspectos

    • el byte es de 8 bits
    • el short es de 16 bits
    • el int es de 32 bits
    • el long es de 64 bits
    • la aritmética es en complemento a dos
    • punto flotante IEEE
    • ahorró tiempo que se desperdicia al intentar esas abstracciones y obtener resultados incorrectos
    • Unicode se usó como conjunto de caracteres
  • Algunas personas todavía trabajan con DSP

  • En lo personal, le divierte documentar una consola de fantasía de 12 bits que "ofrece 50% más bits por byte que la competencia"

  • Hubo una pregunta sobre qué cosas podría deprecar o simplificar C++

    • Escuchó que la función rand() está rota y no se puede corregir, y que aun así sigue sin deprecarse
  • Tiene sentimientos encontrados sobre que no haya un uso significativo para que CHAR_BIT tenga un valor distinto de 8

    • En lo personal, cree que intentar entender lo que ocurre dentro de una computadora mediante un modelo simplificado eventualmente topará con límites
    • Está aumentando la popularidad de los proyectos de electrónica física entre principiantes
  • Agradece el interés en la propuesta y, con base en la retroalimentación, redactó un borrador actualizado

  • Le gusta la idea de una microcomputadora retro con bytes de 6 bits

    • Las microcomputadoras por lo general manejan una cantidad pequeña de objetos y prefieren arreglos sobre punteros
    • VGA usaba 6 bits por color, y podría haber un alfabeto legible en una matriz de 6x4 bits
    • 12MiB de memoria y 6 bits direccionables de forma independiente serían suficientes
  • Está de acuerdo con forzar int8_t == char == 8 bits, pero no está convencido de difundir la idea equivocada de que un byte tiene 8 bits

    • byte ya es un "alias" de char desde C++17