1 poin oleh GN⁺ 2024-10-19 | 1 komentar | Bagikan ke WhatsApp

Latar belakang

  • Bahasa C menyediakan jumlah bit dalam satu byte sebagai nilai yang ditentukan implementasi melalui makro CHAR_BIT, dan C++ mewarisi hal ini apa adanya
  • Sebagian besar perangkat keras modern telah mengerucut pada asumsi bahwa byte adalah 8 bit
  • Dokumen ini mengusulkan agar C++ secara resmi menyatakan bahwa byte berukuran 8 bit
  • Kompiler utama sudah mendukung byte 8 bit
    • GCC menetapkan nilai bawaan ke 8
    • LLVM menetapkan __CHAR_BIT__ ke 8
    • MSVC mendefinisikan CHAR_BIT sebagai 8
  • POSIX telah mensyaratkan byte 8 bit sejak 2001
  • Perangkat lunak yang tidak mendukung byte 8 bit tidak kompatibel

Dampak terhadap C

  • Usulan ini menelaah apakah C++ masih relevan untuk arsitektur yang menggunakan byte non-8-bit
  • Komite bahasa C dapat mencapai kesimpulan yang berbeda, dan idealnya kedua komite selaras

Bahasa

  • Dalam model memori C++, unit penyimpanan dasar adalah byte, dan byte terdiri dari 8 bit
  • Makro CHAR_BIT dilaporkan di header climits

Pustaka

  • Header climits mendefinisikan semua makro sama seperti header pustaka standar C limits.h
  • Header cstdint menyediakan tipe bilangan bulat dengan lebar tertentu serta makro yang menetapkan batas tipe bilangan bulat
  • Semua tipe dan makro hanya tidak bersifat opsional jika byte berukuran 8 bit

Ringkasan GN⁺

  • Dokumen ini adalah usulan untuk secara resmi menyatakan bahwa byte dalam C++ berukuran 8 bit
  • Sebagian besar platform perangkat keras dan perangkat lunak modern menggunakan byte 8 bit, sehingga masuk akal untuk menstandarkannya
  • Arsitektur byte non-8-bit tidak kompatibel dengan C++ modern, dan pentingnya arsitektur semacam itu terus menurun
  • Usulan ini mengurangi kompleksitas C++ dan membantu programmer baru memahami bahasa tersebut dengan lebih mudah
  • Proyek lain dengan fungsi serupa termasuk standar POSIX

1 komentar

 
GN⁺ 2024-10-19
Komentar Hacker News
  • Ada penyebutan tentang "Signed Integers are Two’s Complement" dalam seri JF "Can we acknowledge that every real computer works this way?"

    • Saat magang pada 1986, ada pengalaman menulis kode C pada mesin BBN C/70 yang menggunakan byte 10-bit
    • Itu adalah mesin yang ada karena pemikiran semesta negatif
  • Bahasa D membuat kemajuan besar dalam hal berikut

    • byte adalah 8-bit
    • short adalah 16-bit
    • int adalah 32-bit
    • long adalah 64-bit
    • aritmetika menggunakan komplemen dua
    • floating point IEEE
    • Ini menghemat waktu yang terbuang untuk mencoba abstraksi semacam itu lalu mendapatkan hasil yang salah
    • Unicode digunakan sebagai set karakter
  • Sebagian orang masih menangani DSP

  • Secara pribadi, ada rasa senang mendokumentasikan konsol fantasi 12-bit yang "memberikan bit per byte 50% lebih banyak daripada pesaing"

  • Ada pertanyaan tentang apa yang bisa dihapuskan atau disederhanakan oleh C++

    • Ada yang mengatakan fungsi rand() rusak dan tidak bisa diperbaiki, dan terdengar kabar bahwa itu masih belum dihapuskan
  • Ada perasaan campur aduk soal tidak adanya penggunaan yang benar-benar bermakna untuk CHAR_BIT selain 8

    • Secara pribadi, upaya memahami apa yang terjadi di dalam komputer dengan model yang disederhanakan pada akhirnya akan menabrak batasnya
    • Popularitas proyek elektronik fisik di kalangan pemula sedang meningkat
  • Terima kasih atas minat terhadap proposal ini, dan draf yang diperbarui telah ditulis berdasarkan masukan

  • Menyukai ide mikrokomputer retro dengan byte 6-bit

    • Mikrokomputer umumnya menangani sedikit objek, dan lebih menyukai array daripada pointer
    • VGA menggunakan 6 bit per warna, dan bisa memiliki alfabet yang dapat dibaca dalam matriks 6x4 bit
    • Memori 12MiB dan 6-bit yang dapat dialamati secara independen akan cukup
  • Setuju untuk memaksa int8_t == char == 8-bit, tetapi tidak yakin soal menyebarkan kesalahpahaman bahwa byte itu 8-bit

    • byte sudah menjadi "alias" dari char sejak C++17