เหตุผล
- ภาษา C ให้จำนวนบิตของไบต์เป็นค่าที่ขึ้นกับการติดตั้งผ่านแมโคร
CHAR_BIT และ C++ ก็รับแนวทางนี้มาโดยตรง
- ฮาร์ดแวร์สมัยใหม่ส่วนใหญ่กำลังมุ่งไปสู่สมมติฐานที่ว่าไบต์มีขนาด 8 บิต
- เอกสารนี้เสนอให้ระบุอย่างเป็นทางการใน C++ ว่าไบต์มีขนาด 8 บิต
- คอมไพเลอร์หลักต่างก็รองรับไบต์ 8 บิตอยู่แล้ว
- GCC ตั้งค่าเริ่มต้นเป็น 8
- LLVM ตั้ง
__CHAR_BIT__ เป็น 8
- MSVC กำหนด
CHAR_BIT เป็น 8
- POSIX กำหนดให้ใช้ไบต์ 8 บิตมาตั้งแต่ปี 2001
- ซอฟต์แวร์ที่ไม่รองรับไบต์ 8 บิตจะไม่สามารถใช้งานร่วมกันได้
ผลกระทบต่อ C
- ข้อเสนอนี้สำรวจว่า C++ ยังเกี่ยวข้องกับสถาปัตยกรรมที่ใช้ไบต์ที่ไม่ใช่ 8 บิตหรือไม่
- คณะกรรมการภาษา C อาจได้ข้อสรุปที่ต่างออกไป และเป็นสิ่งที่พึงประสงค์หากทั้งสองคณะกรรมการมีความเห็นสอดคล้องกัน
ภาษา
- ในโมเดลหน่วยความจำของ C++ หน่วยเก็บข้อมูลพื้นฐานคือไบต์ และไบต์ประกอบด้วย 8 บิต
- แมโคร
CHAR_BIT ถูกรายงานผ่านเฮดเดอร์ climits
ไลบรารี
- เฮดเดอร์
climits กำหนดแมโครทั้งหมดเช่นเดียวกับเฮดเดอร์ไลบรารีมาตรฐาน C limits.h
- เฮดเดอร์
cstdint ให้ชนิดจำนวนเต็มที่มีความกว้างตามที่กำหนด และแมโครที่ระบุขีดจำกัดของชนิดจำนวนเต็ม
- ชนิดและแมโครทั้งหมดจะไม่เป็นแบบ optional เฉพาะในกรณีที่ไบต์มีขนาด 8 บิตเท่านั้น
สรุปโดย GN⁺
- เอกสารนี้เป็นข้อเสนอที่ต้องการระบุอย่างเป็นทางการใน C++ ว่าไบต์มีขนาด 8 บิต
- แพลตฟอร์มฮาร์ดแวร์และซอฟต์แวร์สมัยใหม่ส่วนใหญ่ใช้ไบต์ 8 บิตอยู่แล้ว จึงสมเหตุสมผลที่จะทำให้เป็นมาตรฐาน
- สถาปัตยกรรมที่ใช้ไบต์ไม่ใช่ 8 บิตไม่เข้ากันกับ C++ สมัยใหม่ และความสำคัญของสถาปัตยกรรมเหล่านี้ก็กำลังลดลง
- ข้อเสนอนี้ช่วยลดความซับซ้อนของ C++ และช่วยให้โปรแกรมเมอร์หน้าใหม่เข้าใจภาษาได้ง่ายขึ้น
- โครงการอื่นที่มีแนวคิดคล้ายกันคือมาตรฐาน POSIX
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
มีการกล่าวถึง "Signed Integers are Two’s Complement" ในซีรีส์ของ JF ที่ชื่อว่า "Can we acknowledge that every real computer works this way?"
ภาษา D ถือเป็นความก้าวหน้าครั้งใหญ่ในแง่ต่อไปนี้
บางคนก็ยังคงทำงานกับ DSP อยู่
โดยส่วนตัวรู้สึกว่าสนุกกับการทำเอกสารให้แฟนตาซีคอนโซล 12 บิตที่ "ให้จำนวนบิตต่อไบต์มากกว่าคู่แข่ง 50%"
มีคำถามว่า C++ จะเลิกใช้หรือทำให้เรื่องใดง่ายลงได้บ้าง
rand()มีปัญหาและแก้ไขไม่ได้ และก็ยังได้ยินว่าแม้ตอนนี้ก็ยังไม่ถูกเลิกใช้มีความรู้สึกก้ำกึ่งกับเรื่องที่ว่าไม่มีการใช้งานที่มีความหมายสำหรับค่า CHAR_BIT ที่ไม่ใช่ 8
ขอบคุณที่ให้ความสนใจต่อข้อเสนอนี้ และได้จัดทำร่างฉบับปรับปรุงโดยอิงจากข้อเสนอแนะแล้ว
ชอบไอเดียของเรโทรไมโครคอมพิวเตอร์แบบไบต์ 6 บิต
เห็นด้วยกับการบังคับให้
int8_t == char == 8 บิตแต่ยังไม่มั่นใจว่าควรกระจายความเข้าใจว่าไบต์เท่ากับ 8 บิต