根拠
- C言語は
CHAR_BIT マクロを通じてバイトのビット数を実装定義として提供しており、C++ もこれをそのまま受け継いでいる
- 現代のハードウェアは、ほとんどがバイトは8ビットであるという前提に収束している
- この文書は、C++ においてバイトが8ビットであることを公式に明記することを提案する
- 主要なコンパイラはすでに8ビットのバイトをサポートしている
- GCC はデフォルト値を8に設定
- LLVM は
__CHAR_BIT__ を8に設定
- MSVC は
CHAR_BIT を8と定義
- POSIX は2001年から8ビットのバイトを要求している
- 8ビットのバイトをサポートしないソフトウェアは互換性がない
Cへの影響
- この提案は、C++ が8ビットでないバイトを使うアーキテクチャに対してどの程度関連性があるかを検討している
- C言語委員会は別の結論に達する可能性があり、両委員会が一致するのが理想的である
言語
- C++ のメモリモデルにおける基本的な記憶単位はバイトであり、バイトは8ビットで構成される
CHAR_BIT マクロは climits ヘッダーで報告される
ライブラリ
climits ヘッダーは、C標準ライブラリヘッダー limits.h と同様にすべてのマクロを定義する
cstdint ヘッダーは、指定幅を持つ整数型と整数型の限界を指定するマクロを提供する
- すべての型とマクロは、バイトが8ビットの場合にのみオプションではなくなる
GN⁺の要約
- この文書は、C++ においてバイトが8ビットであることを公式に明記しようとする提案である
- 現代のハードウェアとソフトウェアプラットフォームのほとんどは8ビットのバイトを使用しており、これを標準化するのは合理的である
- 8ビットでないバイトのアーキテクチャは現代の C++ と互換性がなく、その重要性は低下している
- この提案は C++ の複雑さを減らし、新しいプログラマーが言語をより簡単に理解できるように助ける
- 類似の機能を持つ別のプロジェクトとして、POSIX 標準がある
1件のコメント
Hacker Newsの意見
JFの「Can we acknowledge that every real computer works this way?」シリーズで、「Signed Integers are Two’s Complement」への言及があった
D言語は次の点で大きく前進していた
いまだにDSPを扱っている人もいる
個人的には、「競合より1バイトあたり50%多いビット数を提供する」12ビットのファンタジーコンソールを文書化するのは面白いと感じている
C++が何を廃止したり単純化できるのか、という問いがあった
rand()関数は壊れていて修正できないと聞いたことがあり、それでもまだ廃止されていないと知ったCHAR_BITが8以外の値になることに意味のある用途はないという点では、複雑な気持ちがある提案への関心に感謝しており、フィードバックに基づいて更新版の草案を書いた
6ビットバイトのレトロなマイクロコンピュータというアイデアが好きだ
int8_t == char == 8ビットを強制することには賛成だが、バイトが8ビットだという誤解を広めることには確信が持てない