Justification
- Le langage C fournit, via la macro
CHAR_BIT, le nombre de bits d’un octet comme une caractéristique définie par l’implémentation, et C++ reprend cela tel quel
- Le matériel moderne converge dans sa grande majorité vers l’hypothèse qu’un octet vaut 8 bits
- Ce document propose de préciser officiellement en C++ qu’un octet fait 8 bits
- Les principaux compilateurs prennent déjà en charge les octets de 8 bits
- GCC définit la valeur par défaut à 8
- LLVM définit
__CHAR_BIT__ à 8
- MSVC définit
CHAR_BIT à 8
- POSIX exige des octets de 8 bits depuis 2001
- Les logiciels qui ne prennent pas en charge les octets de 8 bits ne sont pas compatibles
Impact sur C
- Cette proposition examine si C++ reste pertinent pour les architectures qui utilisent des octets non basés sur 8 bits
- Le comité du langage C peut parvenir à une conclusion différente, même s’il serait idéal que les deux comités s’accordent
Langage
- Dans le modèle mémoire de C++, l’unité de stockage de base est l’octet, et un octet est composé de 8 bits
- La macro
CHAR_BIT est exposée dans l’en-tête climits
Bibliothèque
- L’en-tête
climits définit toutes les macros comme l’en-tête de bibliothèque standard C limits.h
- L’en-tête
cstdint fournit des types entiers à largeur spécifiée ainsi que des macros qui indiquent les limites des types entiers
- Tous les types et macros ne sont non optionnels que lorsque l’octet fait 8 bits
Résumé de GN⁺
- Ce document est une proposition visant à préciser officiellement en C++ qu’un octet fait 8 bits
- Les plateformes matérielles et logicielles modernes utilisent majoritairement des octets de 8 bits, ce qui rend raisonnable leur standardisation
- Les architectures à octets non basés sur 8 bits ne sont pas compatibles avec le C++ moderne, et leur importance diminue
- Cette proposition réduit la complexité de C++ et aide les nouveaux programmeurs à comprendre plus facilement le langage
- Un projet comparable offrant une fonctionnalité similaire est le standard POSIX
1 commentaires
Commentaires Hacker News
Dans la série de JF « Can we acknowledge that every real computer works this way? », il y avait une mention de « Signed Integers are Two’s Complement »
Le langage D a beaucoup progressé sur les points suivants
Certaines personnes travaillent encore avec des DSP
Personnellement, il trouve amusant de documenter une console fantastique de 12 bits « offrant 50 % de bits en plus par octet que la concurrence »
Il y avait une question sur ce que C++ pourrait supprimer ou simplifier
rand()était cassée et impossible à corriger, et a appris qu’elle n’était toujours pas obsolèteSentiment mitigé sur le fait qu’il n’existe plus d’usage réellement pertinent où
CHAR_BITvaille autre chose que 8Merci pour l’intérêt porté à la proposition, et un brouillon mis à jour a été rédigé à partir des retours
Il aime l’idée d’un micro-ordinateur rétro à octets de 6 bits
D’accord pour imposer
int8_t == char == 8 bits, mais moins convaincu par l’idée de propager l’idée fausse qu’un octet fait 8 bitschardepuis C++17