1 puan yazan GN⁺ 2024-10-19 | 1 yorum | WhatsApp'ta paylaş

Gerekçe

  • C dili, bayttaki bit sayısını CHAR_BIT makrosu aracılığıyla uygulama tanımlı olarak sunar ve C++ da bunu aynen devralır
  • Modern donanımların çoğu, baytın 8 bit olduğu varsayımında birleşmektedir
  • Bu belge, C++'ta baytın 8 bit olduğunun resmî olarak belirtilmesini önerir
  • Başlıca derleyiciler zaten 8 bitlik baytı desteklemektedir
    • GCC varsayılan değeri 8 olarak ayarlar
    • LLVM __CHAR_BIT__ değerini 8 olarak ayarlar
    • MSVC CHAR_BIT değerini 8 olarak tanımlar
  • POSIX, 2001'den beri 8 bitlik baytı zorunlu kılmaktadır
  • 8 bitlik baytı desteklemeyen yazılımlar uyumlu değildir

C üzerindeki etkisi

  • Bu öneri, C++'ın 8 bit olmayan bayt kullanan mimariler açısından anlamlı olup olmadığını inceler
  • C dili komitesi farklı bir sonuca varabilir ve iki komitenin uyumlu olması ideal olur

Dil

  • C++ bellek modelinde temel depolama birimi bayttır ve bayt 8 bitten oluşur
  • CHAR_BIT makrosu climits başlığında bildirilir

Kütüphane

  • climits başlığı, C standart kütüphane başlığı limits.h ile aynı şekilde tüm makroları tanımlar
  • cstdint başlığı, belirli genişliğe sahip tamsayı türlerini ve tamsayı türlerinin sınırlarını belirten makroları sağlar
  • Tüm türler ve makrolar yalnızca baytın 8 bit olduğu durumda isteğe bağlı değildir

GN⁺ özeti

  • Bu belge, C++'ta baytın 8 bit olduğunun resmî olarak belirtilmesini amaçlayan bir öneridir
  • Modern donanım ve yazılım platformlarının çoğu 8 bitlik bayt kullandığı için bunun standartlaştırılması makuldür
  • 8 bit olmayan bayt mimarileri modern C++ ile uyumlu değildir ve bu tür mimarilerin önemi giderek azalmaktadır
  • Bu öneri, C++'ın karmaşıklığını azaltır ve yeni programcıların dili daha kolay anlamasına yardımcı olur
  • Benzer işleve sahip diğer projeler arasında POSIX standardı da vardır

1 yorum

 
GN⁺ 2024-10-19
Hacker News görüşü
  • JF’in "Can we acknowledge that every real computer works this way?" serisinde "Signed Integers are Two’s Complement" hakkında bir değinme vardı

    • 1986’daki stajı sırasında 10 bit bayt kullanan bir BBN C/70 makinesinde C kodu yazma deneyimi yaşamıştı
    • Bu, olumsuz bir evren kazası yüzünden var olmuş bir makineydi
  • D dili şu açılardan büyük ilerleme sağladı

    • bayt 8 bit
    • short 16 bit
    • int 32 bit
    • long 64 bit
    • aritmetik iki’nin tümleyeni
    • IEEE kayan nokta
    • bu tür soyutlamaları denemeye ve yanlış sonuçlar almaya harcanan zamandan tasarruf sağladı
    • karakter kümesi olarak Unicode kullanıldı
  • Bazı insanlar hâlâ DSP ile uğraşıyor

  • Kişisel olarak, "rakiplerden bayt başına %50 daha fazla bit sunan" 12 bitlik bir fantezi konsolunu belgelendirmek eğlenceli geliyor

  • C++’ın neleri kaldırabileceği veya basitleştirebileceği hakkında bir soru vardı

    • rand() fonksiyonunun bozuk olduğu ve düzeltilemediği söylenmişti; buna rağmen hâlâ kullanımdan kaldırılmadığını duydum
  • CHAR_BIT değerinin 8 dışında bir şey olmasının anlamlı bir kullanım alanı olmaması konusunda karışık duygularım var

    • kişisel olarak, bilgisayarın içinde olanları basitleştirilmiş modellerle anlamaya çalışma çabasının eninde sonunda sınırına dayanacağını düşünüyorum
    • yeni başlayanlar arasında fiziksel elektronik projelerinin popülerliği artıyor
  • Teklife gösterilen ilgi için teşekkürler; geri bildirimlere dayanarak güncellenmiş bir taslak hazırladım

  • 6 bit bayt kullanan retro bir mikrobilgisayar fikrini seviyorum

    • mikrobilgisayarlar genelde az sayıda nesneyle çalışır ve dizileri pointer’lara tercih eder
    • VGA renk başına 6 bit kullanıyordu ve 6x4 bitlik bir matriste okunabilir bir alfabe olabilir
    • 12MiB bellek ve bağımsız adreslenebilir 6 bitler yeterli olurdu
  • int8_t == char == 8 bit zorunluluğuna katılıyorum, ancak baytın 8 bit olduğu yanılgısını yayma konusunda emin değilim

    • bayt zaten C++17’den beri char için bir "takma ad"