1 ポイント 投稿者 GN⁺ 2024-10-19 | 1件のコメント | WhatsAppで共有

根拠

  • 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件のコメント

 
GN⁺ 2024-10-19
Hacker Newsの意見
  • JFの「Can we acknowledge that every real computer works this way?」シリーズで、「Signed Integers are Two’s Complement」への言及があった

    • 1986年のインターンシップ中に、10ビットバイトを使うBBN C/70マシンでCコードを書いた経験があった
    • それは負の宇宙の発想によって存在していたマシンだった
  • D言語は次の点で大きく前進していた

    • バイトは8ビット
    • shortは16ビット
    • intは32ビット
    • longは64ビット
    • 算術は2の補数
    • IEEE浮動小数点
    • こうした抽象化を試みて誤った結果を得ることに浪費される時間を節約した
    • 文字集合としてUnicodeが使われていた
  • いまだにDSPを扱っている人もいる

  • 個人的には、「競合より1バイトあたり50%多いビット数を提供する」12ビットのファンタジーコンソールを文書化するのは面白いと感じている

  • C++が何を廃止したり単純化できるのか、という問いがあった

    • rand()関数は壊れていて修正できないと聞いたことがあり、それでもまだ廃止されていないと知った
  • CHAR_BITが8以外の値になることに意味のある用途はないという点では、複雑な気持ちがある

    • 個人的には、コンピュータ内部で起きていることを単純化したモデルで理解しようとする試みは、結局どこかで限界にぶつかると思う
    • 初心者の間では物理電子工作プロジェクトの人気が高まっている
  • 提案への関心に感謝しており、フィードバックに基づいて更新版の草案を書いた

  • 6ビットバイトのレトロなマイクロコンピュータというアイデアが好きだ

    • マイクロコンピュータは一般に扱うオブジェクト数が少なく、ポインタより配列を好む
    • VGAは色ごとに6ビットを使っており、6x4ビットマトリクスで読めるアルファベットを持てる
    • 12MiBのメモリと、独立してアドレス指定可能な6ビットがあれば十分だろう
  • int8_t == char == 8ビットを強制することには賛成だが、バイトが8ビットだという誤解を広めることには確信が持てない

    • バイトはすでにC++17以来、charの「別名」になっている