1 points par GN⁺ 2024-10-19 | 1 commentaires | Partager sur WhatsApp

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

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

    • Pendant un stage en 1986, il avait écrit du code C sur une machine BBN C/70 utilisant des octets de 10 bits
    • C’était une machine qui existait à cause d’un accident dans un univers malveillant
  • Le langage D a beaucoup progressé sur les points suivants

    • un octet fait 8 bits
    • un short fait 16 bits
    • un int fait 32 bits
    • un long fait 64 bits
    • l’arithmétique est en complément à deux
    • les nombres à virgule flottante suivent IEEE
    • cela a permis d’économiser du temps gaspillé à tenter ces abstractions et à obtenir des résultats erronés
    • Unicode était utilisé comme jeu de caractères
  • 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

    • il avait entendu dire que la fonction rand() était cassée et impossible à corriger, et a appris qu’elle n’était toujours pas obsolète
  • Sentiment mitigé sur le fait qu’il n’existe plus d’usage réellement pertinent où CHAR_BIT vaille autre chose que 8

    • personnellement, toute tentative de comprendre ce qui se passe à l’intérieur d’un ordinateur à l’aide d’un modèle simplifié finira par rencontrer ses limites
    • la popularité des projets d’électronique physique augmente chez les débutants
  • Merci 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

    • un micro-ordinateur manipule généralement peu d’objets et préfère les tableaux aux pointeurs
    • le VGA utilisait 6 bits par couleur, et on pourrait avoir un alphabet lisible dans une matrice de 6x4 bits
    • 12 MiB de mémoire et des unités de 6 bits adressables indépendamment seraient suffisants
  • 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 bits

    • un octet est déjà un « alias » de char depuis C++17