1 Punkte von GN⁺ 2024-10-19 | 1 Kommentare | Auf WhatsApp teilen

Begründung

  • Die Sprache C stellt die Anzahl der Bits pro Byte als implementierungsdefiniert über das Makro CHAR_BIT bereit, und C++ übernimmt dies unverändert
  • Moderne Hardware konvergiert weitgehend auf die Annahme, dass ein Byte 8 Bit hat
  • Dieses Dokument schlägt vor, in C++ offiziell festzulegen, dass ein Byte 8 Bit hat
  • Wichtige Compiler unterstützen bereits 8-Bit-Bytes
    • GCC setzt den Standardwert auf 8
    • LLVM setzt __CHAR_BIT__ auf 8
    • MSVC definiert CHAR_BIT als 8
  • POSIX verlangt seit 2001 8-Bit-Bytes
  • Software, die keine 8-Bit-Bytes unterstützt, ist nicht kompatibel

Auswirkungen auf C

  • Dieser Vorschlag untersucht, ob C++ für Architekturen mit Bytes, die nicht 8 Bit haben, relevant ist
  • Das C-Sprachkomitee könnte zu einem anderen Schluss kommen, und es wäre ideal, wenn beide Komitees übereinstimmen

Sprache

  • Im C++-Speichermodell ist die grundlegende Speichereinheit das Byte, und ein Byte besteht aus 8 Bit
  • Das Makro CHAR_BIT wird im Header climits bereitgestellt

Bibliothek

  • Der Header climits definiert wie der C-Standardbibliotheks-Header limits.h alle Makros
  • Der Header cstdint stellt Ganzzahltypen mit festgelegter Breite sowie Makros bereit, die die Grenzen von Ganzzahltypen angeben
  • Alle Typen und Makros sind nur dann nicht optional, wenn ein Byte 8 Bit hat

Zusammenfassung von GN⁺

  • Dieses Dokument ist ein Vorschlag, in C++ offiziell festzulegen, dass ein Byte 8 Bit hat
  • Moderne Hardware- und Softwareplattformen verwenden überwiegend 8-Bit-Bytes, sodass eine Standardisierung davon sinnvoll ist
  • Architekturen mit Nicht-8-Bit-Bytes sind mit modernem C++ nicht kompatibel, und ihre Bedeutung nimmt ab
  • Dieser Vorschlag reduziert die Komplexität von C++ und hilft neuen Programmierern, die Sprache leichter zu verstehen
  • Ein anderes Projekt mit ähnlicher Funktion ist der POSIX-Standard

1 Kommentare

 
GN⁺ 2024-10-19
Hacker-News-Kommentare
  • In JFs Reihe „Can we acknowledge that every real computer works this way?“ gab es eine Erwähnung von „Signed Integers are Two’s Complement“

    • Während eines Praktikums im Jahr 1986 wurde C-Code auf einer BBN-C/70-Maschine mit 10-Bit-Bytes geschrieben
    • Das war eine Maschine, die aufgrund von Denkweisen aus einem negativen Universum existierte
  • Die Sprache D hat in folgenden Punkten große Fortschritte gemacht

    • Ein Byte hat 8 Bit
    • short hat 16 Bit
    • int hat 32 Bit
    • long hat 64 Bit
    • Arithmetik nutzt Zweierkomplement
    • IEEE-Gleitkommazahlen
    • Das hat Zeit gespart, die sonst dafür verschwendet worden wäre, diese Abstraktionen zu versuchen und dabei falsche Ergebnisse zu erhalten
    • Unicode wurde als Zeichensatz verwendet
  • Manche Leute arbeiten immer noch mit DSPs

  • Persönlich macht es Spaß, eine 12-Bit-Fantasy-Konsole zu dokumentieren, die „50 % mehr Bits pro Byte als die Konkurrenz“ bietet

  • Es gab die Frage, was C++ verwerfen oder vereinfachen könnte

    • Es hieß, die Funktion rand() sei kaputt und nicht reparierbar, und dennoch sei sie bis heute nicht deprecated
  • Ich habe gemischte Gefühle dabei, dass es keinen sinnvollen Anwendungsfall mehr dafür gibt, dass CHAR_BIT einen anderen Wert als 8 hat

    • Ich persönlich denke, dass Versuche, das Innere eines Computers mit einem vereinfachten Modell zu verstehen, irgendwann zwangsläufig an ihre Grenzen stoßen
    • Physische Elektronikprojekte werden unter Einsteigerinnen und Einsteigern immer beliebter
  • Vielen Dank für das Interesse an dem Vorschlag; auf Basis des Feedbacks wurde ein aktualisierter Entwurf erstellt

  • Ich mag die Idee eines Retro-Mikrocomputers mit 6-Bit-Bytes

    • Mikrocomputer arbeiten normalerweise mit einer kleinen Anzahl von Objekten und bevorzugen Arrays gegenüber Zeigern
    • VGA nutzte 6 Bit pro Farbe, und man könnte ein Alphabet haben, das sich in einer 6x4-Bit-Matrix lesen lässt
    • 12 MiB Speicher und unabhängig adressierbare 6 Bit wären ausreichend
  • Ich stimme zu, int8_t == char == 8 Bit zu erzwingen, aber ich bin nicht sicher, ob es gut ist, das Missverständnis zu verbreiten, ein Byte habe immer 8 Bit

    • Byte ist seit C++17 bereits ein „Alias“ von char