22 puan yazan GN⁺ 2026-03-31 | 7 yorum | WhatsApp'ta paylaş
  • C++26 resmen teknik olarak tamamlandı. Reflection, bellek güvenliği güçlendirmeleri, contracts ve std::execution dahil dört temel özellik içeriyor
  • Derleme zamanında reflection, template’lerin tanıtılmasından bu yana C++ tarihindeki en güçlü soyutlama motoru olarak görülüyor; dilin kendisini tanımlayıp kod üretebilmesini sağlıyor
  • Mevcut C++ kodunu C++26 ile yalnızca yeniden derlemek bile, başlatılmamış yerel değişkenlerin tanımsız davranışını (UB) ortadan kaldırıyor ve güçlendirilmiş standart kütüphane ile bounds güvenliği sağlanıyor
  • Google’daki dağıtım sonuçlarına göre 1.000’den fazla hata düzeltildi ve üretim ortamında segfault oranı %30 azaldı
  • GCC’nin reflection ve contracts özelliklerini şimdiden trunk’a birleştirmesi gibi gelişmeler, derleyici implementasyonlarının hızlı benimsenmesine işaret ediyor

C++26 tamamlandı: C++11’den bu yana en önemli sürüm

  • Birleşik Krallık’ın Londra kentine bağlı Croydon’da düzenlenen ISO C++ komitesi toplantısında C++26 teknik çalışması nihai olarak tamamlandı
    • Yaklaşık 210 kişi katıldı (130 yüz yüze, 80 Zoom üzerinden uzaktan), 24 ülkenin resmî temsilcileri yer aldı
    • Toplantının büyük kısmı, yaz aylarında iletilen 411 uluslararası yorumun (CD aşaması) işlenmesine ayrıldı
    • Yeni özellik ekleme veya çıkarma yapılmadan, tamamlanma ve cilalama çalışmalarına odaklanıldı
  • Bu toplantıda son hâli verilen C++26, uluslararası onay oylaması (DIS) için nihai belge hazırlama aşamasına girdi

C++26’nın 4 temel özelliği

(1) Reflection

  • Template’lerin icadından bu yana C++ geliştirme tarihindeki en büyük yükseltme olarak görülüyor; dilin kendisini tanımlayıp kod üretebilmesini sağlıyor
  • C++ komitesi, Haziran 2025’te derleme zamanında reflection özelliğini C++26 taslağına dahil ederek dil tarihinde bir dönüm noktasına imza attı
  • “Verimli soyutlamaları ifade etmek için en güçlü yeni motor; bu roketin neler yapabildiğini keşfetmek için önümüzdeki 10 yıla ihtiyaç duyacağız” sözleriyle tanıtıldı

(2) Bellek güvenliği güçlendirmeleri

  • Yalnızca yeniden derleme ile, mevcut C++ kodunda başlatılmamış yerel değişkenlerin okunmasından kaynaklanan UB (tanımsız davranış) kategorisinin tamamı C++26’da ortadan kaldırılıyor
  • Güçlendirilmiş Standart Kütüphane (Hardened Standard Library) standartlaştırıldı; vector, span, string, string_view gibi temel türlerde bounds güvenliği sağlanıyor
    • Performans ek yükü ortalama %0,3 olarak ölçüldü (yani %1’in altında)
    • Apple platformlarında ve Google servislerinde yüz milyonlarca satır koda zaten dağıtılmış durumda
  • Google dağıtım sonuçları:
    • 1.000’den fazla hata düzeltildi
    • Yıllık 1.000~2.000 hata önleme etkisi bekleniyor
    • Tüm üretim ortamında segfault görülme oranı %30 azaldı
    • Google’ın tüm C++ kodu içinde tamamen opt-out olan servis sayısı yalnızca 5, güvenli olmayan erişim API’lerini kullanan yer sayısı ise sadece 7

(3) Contracts: pre, post, contract_assert

  • C++26 ile dil seviyesinde contracts özelliği geliyor — fonksiyon bildirimlerinde önkoşul (precondition), sonkoşul (postcondition) ve assertion ifadesi desteği sağlanıyor
  • C’nin assert makrosundan çok daha güçlü bir özellik olarak değerlendiriliyor
  • Contracts kabulüne ilişkin oylama sonuçları:
    • Şubat 2025 (working draft’a birleştirme): 100 kabul, 14 ret, 12 çekimser
    • Mart 2026 (C++26’nın nihai onayı): 114 kabul, 12 ret, 3 çekimser
  • Komitedeki bazı uzmanların teknik çekinceleri sürse de, konu üç toplantı ve çok sayıda telekonferansta kapsamlı biçimde tartışıldı
  • Kasım 2025’ten önceki toplantılarda geri bildirimler yansıtılarak contracts spesifikasyonundaki 2 hata düzeltildi

(4) std::execution (Sender/Receiver)

  • C++ için asenkron model; eşzamanlılık ve paralelliği ifade edip kontrol etmek için birleşik bir çerçeve sunuyor
  • Structured concurrency (yaşam döngüleri sıkı biçimde iç içe geçen eşzamanlılık) yazmayı kolaylaştırıyor ve veri yarışını (data race) yapısal olarak önlemeye yardımcı olan güvenlik özellikleri sağlıyor
  • Dikkat: Mevcut durumda dokümantasyon eksik ve “fingers-and-toes” kütüphaneleri yetersiz olduğundan, benimseme zorluğu diğer C++ özelliklerine göre daha yüksek
    • Alanı iyi bilen uzmanlardan destek almak ve mevcut asenkron kodla entegrasyon için adapter kütüphaneleri yazmak gerekebilir

C++26’nın neden hızla benimsenmesi bekleniyor

  • C++11’den bu yana en çok talep gören özellik seti olarak görülüyor; çoğu C++ geliştiricisinin günlük olarak kullanacağı reflection ve güvenlik güçlendirmelerini içeriyor
    • C++17, C++20 ve C++23’teki parallel STL, concepts, coroutines ve modules gibi özelliklerin, tüm C++ geliştiricileri üzerinde C++11 kadar geniş bir etki yaratmadığı değerlendiriliyor
  • GCC ve Clang, C++26 geliştirme süreci boyunca özelliklerin üçte ikisini önceden implement etmiş durumda kaldı
    • GCC, reflection ve contracts’ı trunk’a zaten birleştirdi ve yayımlanmayı bekliyor

C++29 çalışmaları başladı: bellek güvenliğinde daha da ileri

  • Bu toplantıda C++29 takvimi de kabul edildi ve 3 yıllık sürüm döngüsü korunuyor
  • C++29’un ana odağının tür ve bellek güvenliğini daha da güçlendirmek olacağı kesinleşti
    • Tanımsız davranışı (UB) daha da azaltmaya yönelik öneriler değerlendiriliyor
    • SG23 (güvenlik ve emniyet alt grubu), Bjarne Stroustrup’un P3984 type safety profile çalışması ile Gabriel Dos Reis’in genel profil çerçevesi temelinde çalışmalarını sürdürüyor
  • Apple’dan Oliver Hunt, P4158R0 "C++ için bellek güvenliğine yönelik alt kümeleme ve kısıtlamalar" başlıklı sunumu yaptı
    • WebKit’in 4 milyondan fazla satır kodunda subset-of-superset yaklaşımı uygulandı
    • “Birçok zafiyet sınıfını engelliyor ve mevcut politikanın geçmişteki exploit’lerin çoğunu önlemiş olacağı” bildirildi
  • Bellek güvenliği konusu, komite çoğunluğunun katıldığı Çarşamba akşamı oturumunda ve yaklaşık 90 kişinin katıldığı Cuma öğleden sonraki EWG özel oturumunda derinlemesine tartışıldı
  • Miktarlar ve birimler kütüphanesi (P3045R7 "Quantities and units library"), SG6 ve SG18’den LEWG’ye (ana kütüphane evrim alt grubu) ilerledi

Takvimde sıradaki adımlar

  • Sonraki iki toplantı Çekya’nın Brno kentinde (Haziran) ve Brezilya’nın Rio de Janeiro eyaletindeki Búzios’ta (Kasım) düzenlenecek
  • Bu iki toplantıda C++29 working draft’ına özellik ekleme çalışmaları başlayacak
  • Şimdiden bir sonraki toplantıya kadar yapılacak çok sayıda alt grup telekonferansı takvime alınmış durumda

7 yorum

 
roxie 28 일 전

zzz

 
GN⁺ 2026-03-31
Hacker News görüşleri
  • Contracts özelliğinin C++ standardına alınmış olmasına üzülenler var
    Zaten karmaşıklık sınırına ulaşmış bir dile bir katman daha karmaşıklık eklenmiş gibi geliyor
    Bjarne Stroustrup da bu özelliği “eksik ve komite usulüyle şişirilmiş bir tasarım” olarak tanımlamış
    Özelliğin kendi içinde de çok sayıda riskli kullanım noktası (footgun) olduğu için yeterince haklı bulunmuyor

    • 90'ların başında Contracts uzantısını doğrudan C++ için kendim uygulamıştım
      Ama kimse ilgi göstermedi
      İlgili materyaller burada
    • Birçok kişi “C++ fazla karmaşık” diyor ama herkesin aklındaki karmaşık özellik farklı; bu da ilginç
    • C++ içindeki Contracts tasarımı hatalı olabilir ama kavramın kendisinin dilin gelişimi için gerekli olduğu düşünülüyor
      Ada ve Rust'ta olduğu gibi biçimsel doğrulama (proof assistant) ile bütünleşip test yerine statik doğrulamayı mümkün kılan temel bir unsur
      Ada Spark'a bakılabilir
    • Contracts belgeleri fazla karışık
      cppreference belgesi içindeki ilk örnek, aslında durumu değiştiren istisnai bir vaka
      Sözdizimi de sezgisel değil
      Örneğin asserts_pre(num >= 0) gibi bir biçim, pre(num >= 0) ifadesinden çok daha açık olurdu
      Ama anlaşılan öncelik kısalık olmuş
    • Contracts, C++ geliştiricilerinin zaten gayriresmî olarak yaptığı şeyi standartlaştırıyor
      Karmaşıklık eklemekten çok, herkesin ayrı ayrı yaptığı uygulamaları birleştirip birlikte çalışabilirliği artırıyor
      Hatta Reflection gibi özelliklerin daha fazla karmaşıklık eklediği düşünülüyor
  • C# ve Java geliştiricisi olarak merak edilen bir şey var
    Bugünlerde C++ ile ne tür uygulamalar geliştirildiğini bilmek istiyorlar
    Gerçekte hangi sorunları çözdüğünü duyma fırsatı pek olmuyor

  • Başlatılmamış değişkenlerde “erroneous behavior” yeniden tanımı ilgi çekici bulunmuş
    Standart belgesine göre bunun bir çalışma zamanı maliyeti var ve
    [[indeterminate]] niteliği kullanılırsa tekrar undefined behavior durumuna döndürülebiliyor

    int x [[indeterminate]];
    std::cin >> x;
    
    • D dili tüm değişkenleri otomatik olarak başlatıyor
      Gerçekten başlatmamak istenirse int x = void; gibi açıkça yazmak gerekiyor
      Bunu yanlışlıkla yazmak neredeyse imkânsız
    • Belgeye hızlıca bakınca iki şey şaşırtıcı geliyor
      1. “bağımsız olarak belirlenmiş değer”in tam olarak ne anlama geldiği belirsiz — 0 ile doldurmak mı, bellekteki rastgele değer mi?
      2. [[indeterminate]] neden yeniden UB (Undefined Behavior) durumuna dönüyor, bu da sorgulanıyor
    • Muhtemelen bu özellik derleyici bayrağı ile kontrol edilebilir
      Bazı projeler hâlâ elle başlatmayı tercih edecektir
    • İleride kodda [[indeterminate]] görecek kişiyi düşünmek bile korkunç
      Sonuçta ya anlamını araştırmak için zaman kaybedecek ya da bir süre sonra tamamen görmezden gelecek
      Bu, Rust'ta çok fazla jenerik ve trait yüzünden kod okumayı zor bulma deneyimini hatırlatıyor
  • 90'larda MS'in C++ ekibinde çalışmış biri
    O dönemde RTTI'nin C++'ın sahip olabileceği yansıma (reflection) sisteminin sınırı olduğunu düşündüğünü söylüyor
    Bugünkü gelişmeler ona şaşırtıcı geliyor

  • Toplantıyı Croydon'da yapıp imzalar atılana kadar kimseyi çıkarmamaları oldukça kurnaz bir taktik olarak görülmüş
    Orada bir daha çalışmak istemeyenler var

  • GCC ve Clang'ın C++26 uygulama durumu merak ediliyor
    GCC, reflection ve contracts desteğini şimdiden trunk'a birleştirmiş, ama Clang'ın ne durumda olduğu soruluyor

    • Clang durum sayfasında ikisi de “no”,
      GCC sayfasında ise “yes” görünüyor
    • Bloomberg, Clang için reflection uygulamasını burada açık kaynak olarak yayımladı
      Bu uygulama şimdiden Compiler Explorer'da kullanılabiliyor ve simdjson'a reflection eklemek için kullanılıyor
  • Bu standarttaki modül sistemi değişikliklerinin gerçekten daha yaygın kullanım sağlayıp sağlamayacağı sorgulanıyor

    • Bazılarına göre C++ WG en az bir kez yeni özellikler yerine modüller ve paketleme konusuna odaklanmalı
      Rust'ın Cargo ile C++'ı ezmesinin nedeni tam da bu
      cargo add gibi tek satırla bağımlılık eklenememesi yeni nesli uzaklaştırıyor
    • Çoğu derleyici hâlâ header unit desteği sunmuyor
      CMake, Clang'ın iki aşamalı derleme modelini benimserse derleme hızı ciddi biçimde artar
      Ancak o zaman modüller gerçekten yaygınlaşabilir
    • Modüllerin zaten başarısız bir fikir olduğu ve ana akım hâline gelme ihtimalinin çok düşük olduğu da söyleniyor
    • Açıkçası artık C++ geliştirmesinin durması gerektiğini düşünenler de var
      Yeni özellikler o kadar fazla ki takip etmek zor
      Derleme sistemi dağınık, header dosyaları ise artık ortadan kalkmalı
  • Konu dışı ama “London Croydon” ifadesi kulağa tuhaf geliyor
    Genelde “Croydon, London” denmez mi diye soruluyor

    • “London Gatwick Airport” gibi alışılmış ters sıra kullanımları da var
      Seyahat planlarken büyük bölgeden küçük bölgeye doğru okumak daha doğal gelebiliyor
    • Kimi insanlar özeli önce, kimileri geneli önce söyler
      “London, Croydon” yazılmasının nedeni muhtemelen “toplantı Londra'da yapıldı” izlenimi vermek
      “Croydon, London” ise “Londra'nın dışındaki Croydon'da yapıldı” hissi verdiği için daha az havalı duruyor — yarı şaka bir yorum
  • “Dil rafa kalkmadan hemen önce çıktı” türünden alaycı tepkiler de var

  • C++29 yalnızca kalite iyileştirmeleri ve mevcut özelliklerin cilalanmasına odaklanırsa topluluğun çok da şikâyet etmeyeceği düşünülüyor

    • Kişisel olarak C++29'da sadece tek satırlık bir random() fonksiyonu gelse bile memnun olacaklar var
    • Elbette hangi özelliklerin ekleneceğine bağlı olarak topluluğun tepkisi değişebilir
 
coldmonster91 28 일 전

C++ standardı çıktıktan sonra, sanayide benimsenmeye başlaması için en az 5 yıl geçmesi gerekiyor; ancak o zaman yavaş yavaş benimseniyor gibi bir hava var.. Cazip ama ulaşılmaz bir şey gibi, hıçkıra hıçkıra ağlatıyor

 
woonsa 29 일 전

Bellek güvenliği için yeni özellikler eklemek yerine sadece dangling pointer'ları ya da mutable reference'ları engelleseler bile bellek güvenliği artardı; ama bunun yerine özellik ekleyerek sadece kodun karmaşıklığını artırıyorlar.

 
tsboard 29 일 전

Zorlanarak Rust'a geçmiştim ama C++26 standart taslağına uzun zamandır beklediğim özelliklerin önemli bir kısmının yansımış olması sevindirici. Ama tekrar C++'a dönmeyeceğim... haha

 
heal9179 29 일 전

Paketleme ile ilgili olanlar CMake tarafında da çıkıyor.. https://www.kitware.com/common-package-specification-is-out-the-gate/

 
heal9179 29 일 전

contract gerçekten beklediğim bir özellikti, sonunda geldi