10 puan yazan GN⁺ 2024-11-26 | 3 yorum | WhatsApp'ta paylaş
  • Lehçesi (Dialect) olmayan tek bir C++ hayalinin çoktan ortadan kalktığı görülüyor
  • Reddit, o turuncu web sitesi (HN) ve resmi C++ standart komitesi toplantılarında C++'ın geleceği hakkında çok sayıda tartışma var

C++'ın mevcut durumu

  • C++ Evrim Çalışma Grubu (EWG), P3466 R0'ı kabul etme konusunda uzlaştı.
    • ABI'yi (uygulama ikili arayüzü) bozmadan C ve önceki C++ sürümleriyle bağlantı uyumluluğunu koruyor.
    • 'viral anotasyonlar' kullanmıyor.
    • ABI kırılması ve sıfır ek yük ilkesi gibi birbiriyle çelişen hedeflere bağlı kalıyor.
  • ABD hükümeti C++ kullanımının bırakılmasını tavsiye ediyor.
    • CISA, NSA, Beyaz Saray ve diğer kurumlar, bellek güvenli olmayan dillerin kullanımı konusunda uyarılar yayımladı.
  • Büyük teknoloji şirketleri Rust'ı benimsiyor.
    • Microsoft, Google, AWS ve diğerleri Rust kullanıyor.
    • Google, C++/Rust birlikte çalışabilirlik araçları bile geliştiriyor
  • C++ topluluğu içinde iç gerilimler var
    • Herb Sutter'ın Microsoft'tan ayrıldığı ve MSVC'nin C++23 özelliklerini uygulamada yavaş kaldığı yönünde haberler var.
    • Google, C++ geliştirme sürecine katılımını azaltıyor ve C++'ın kendi halef dilini geliştiriyor.
    • Mevcut C++ standart komitesi sürecine duyulan güven eksikliği
    • Modül özelliği hâlâ tamamlanmamış durumda
    • 'Safety Profiles' garip bir durumda

C++'ın iki kültürü

  • Modern ve otomasyon araçları kullanan grup
    • Google gibi büyük teknoloji şirketleri bunun başlıca örnekleri
    • Güncel C++ standartlarını (C++17 ve sonrası) kullanıyor, otomatikleştirilmiş derleme ve test araçlarıyla destekleniyor
    • Kod kalitesini korumaya yatırım yapıyor ve kod tabanını sürekli modernize ediyor
  • Legacy C++ grubu
    • Eski ortamlar ve araçlar üzerinde çalışan kod tabanları
    • Kaynak kod olmadan işletiliyor veya derleme sistemi eski
    • Bakım maliyeti yüksek ve modernizasyonun önündeki engeller büyük
  • Temel fark araçlar ve süreçler
    • Modern C++ grubu, birleşik derleme sistemlerine ve statik analizör, formatter, linter gibi araçlara dayanıyor
    • Legacy grup ise bu araç ve süreçlerin yokluğu nedeniyle daha düşük operasyonel verimlilikle çalışıyor

Sonuçlar ve etkiler

  • Safety Profiles
    • Mevcut legacy kodu değiştirmeden güvenliği artırmayı amaçlıyor
    • Modern C++'ın ihtiyaçlarından çok mevcut kodun korunmasına odaklanıyor
  • Modüller
    • Başlık dosyalarının modül olarak kolayca içe aktarılabilmesi için tasarlandı
    • Legacy kodla uyumluluk gözetilerek tasarlandı
  • C++ topluluğundaki bölünme
    • Modern ve legacy gruplar arasındaki gereksinim uyumsuzluğu, topluluk içindeki çatışmayı derinleştiriyor
    • C++ standart komitesinin muhafazakâr yaklaşımı, bu çatışmaları yumuşatma girişimi gibi görünüyor

Alternatif bakış açısı

  • Safe C++ gibi alternatif fikirler topluluk içinde hoş karşılanmıyor
  • Standart komitesinin bazı üyelerinin kişisel estetik ölçütlerinde ısrar ederek değişime direndiğine yönelik eleştiriler var

3 yorum

 
aer0700 2024-11-27

Rust için GUI geliştirme ekosistemi henüz olmadığı için benimseyemiyorum ama
Rust kullanan düzgün bir GUI framework'ünün çıkması gerek...

 
ndrgrd 2024-11-26

Rust'ın C++'ın yerini alıp alamayacağından pek emin değilim ama
yeni C++ projelerinin neredeyse hiç görünmediği de bir gerçek...
Görünüşe göre C++ komitesi, dönüşmektense öz değerlerini daha çok önemseyen bir yönün doğru olduğuna karar vermiş.

 
GN⁺ 2024-11-26
Hacker News görüşü
  • Google’ın C++ kodu çoğu zaman en güncel sürümlerde çalışmıyor ve geliştiriciler bunu düzeltmeye istekli olmuyor. Bunun nedeni, Google kodunun eski ile modern arasında bir ara noktada kalmış olması

    • Google’ın C++ kodunda durum makineleri ve manuel zayıf işaretçiler nedeniyle bellek bozulması yaşanabiliyor
    • Google’ın C++ ekosisteminden ayrılmasını olumlu görüyor
    • Google’ın Rust ekosistemine ilgisinin olumlu olmayacağını düşünüyor
  • C++ standart çalışanlarına, C++’ın mevcut yönünü desteklemelerini ve C++’ın geleceği hakkında internette çıkan gürültüyü görmezden gelmelerini tavsiye ediyor

    • Statik yaşam süresi denetimi isteyenlere Rust kullanmalarını öneriyor
    • Devlet yüklenicisiyseniz Rust kullanmanızı tavsiye ediyor
    • Mevcut C++ geliştirme sürecinin iyi çalıştığını savunuyor
  • C++ kullanan tek grubun, yeniden düzenlenemeyecek kadar büyük legacy kod tabanına sahip olanlar olacağını iddia ediyor

    • WG21’e güvenini kaybeden diğer gruplar yeni dillere geçiyor
    • Herb Sutter, C++’a yaşam süresi ek açıklamaları eklemenin başka dillere bir "çıkış rampası" oluşturacağını söylemişti
  • Rust’ın edition sisteminin çok iyi çalıştığını değerlendiriyor

    • C++’a da böyle bir sistem gelirse, modül sınırlarında kısıtlar olabilir ama her iki tarafı da memnun edecek bir yol olabilir diye öneriyor
  • Herb Sutter’ın Microsoft’tan ayrılmasının Microsoft için kötü etkileri olacağından endişe ediyor

    • Herb’ün C++ standartlarının benimsenmesini yönlendirdiğini ve daha iyi bir gelecek vizyonu için çalıştığını düşünüyor
    • Microsoft önerisi olan std::span’ın sınır kontrolü hariç benimsenmesini anıyor ve Herb’ün çabasının gerekli olduğunu savunuyor
  • Otomatik testlerin iki tarafı ayıran başlıca unsur olduğunu vurguluyor

    • Legacy C++ uygulamalarında otomatik test yoksa kod değişikliklerinin uygulamayı bozma riski taşıdığını açıklıyor
    • C++’ın doğası gereği zararsız görünen kod değişikliklerinin bile sorun çıkarabileceği uyarısında bulunuyor
  • C++’ın cazibesini azaltan başlıca etkenin modül eksikliği olduğunu iddia ediyor

    • Modüller olsaydı C++ topluluğunun oluşabileceğini değerlendiriyor
  • Herb Sutter’ın uzlaşma sağlamada becerikli olduğunu, buna karşılık Google’ın kendi gündemini dayattığını karşılaştırıyor

  • Büyük kod tabanlarına sahip müşterilerin, katı kuralları karşılamak için kodlarının %1’ini bile değiştirmek istemediğini belirtiyor

    • Birçok şirketin yeni standartlara yükseltme yapmak için zaman harcadığını savunuyor
  • Python ve Javascript/Node/Typescript içinde de birden fazla klik bulunduğunu açıklıyor

    • Rust bu tür bölünmeleri önlemeye çalıştı ama öğrenme eğrisi yükseldi
    • Go bölünmeleri engelleyip yaygın benimsenme sağlamaya çalıştı, ancak sonunda generics eklemek zorunda kaldı