23 Ekim'de, on iki haftalık oylama sürecinin ardından C++26 taslağı Uluslararası Taslak Standart (DIS) oylamasından Disapproved (onaylanmadı) sonucuyla döndü. Konuya dahil olan herkesin bildiği kadarıyla daha önce hiçbir C++ standardı bu aşamada reddedilmedi; C komitesine başkanlık eden ve sonucu ertesi gün LinkedIn'de duyuran Robert Seacord'a göre muhtemelen ISO'nun SC22 alt komitesindeki hiçbir dil standardı da bu aşamada reddedilmedi.
Rakamlar
Bir DIS taslağı iki eşiği aynı anda geçmek zorunda: kullanılan oyların üçte ikisi evet olmalı ve hayır oyları en fazla dörtte biri oluşturmalı. C++26 ikisini de kaçırdı. 14 evet oyu gerekiyordu, 12 çıktı; en fazla beş hayır oyuna izin vardı, dokuz çıktı. İkisinden biri tek başına standardı düşürmeye yeterdi.
Dokuz ulusal kuruluş hayır oyu verdi — Danimarka, Finlandiya, İran, İtalya, Japonya, Lüksemburg, Romanya, İspanya ve İsveç — her biri teknik yorumlarla birlikte. Fransa, İrlanda, Polonya ve ABD çekimser kaldı. ISO kuralları gereği yorumlar on iki hafta boyunca açıklanmıyor; yani tam kayıt 2027 Ocak ortasından önce kamuya açılmayacak.
İtiraz: contracts
Yorumlar okunamıyor ama izler okunuyor: oylamadan önce kayda geçen her pozisyon aynı özelliği işaret ediyordu. Contracts (sözleşmeler), bir fonksiyonun girişte ve çıkışta neyin doğru olması gerektiğini bildirmesine ve gövdesi içinde koşul denetlemesine izin veriyor.
```cpp double checked_sqrt(double x) pre(x >= 0.0) post(r: r >= 0.0) { const double root = std::sqrt(x); contract_assert(!std::isnan(root)); return root; } ```
Fikre çok az kişi karşı — yorum gibi bayatlayamayan, derleyicinin anladığı belge. Tartışma semantikte. Taslak dört değerlendirme modu tanımlıyor: `ignore`, `observe`, `enforce` ve `quick-enforce`; seçimi uygulamaya bırakıyor. Yani GCC 16'da aynı sözleşme ya release derlemesinde buharlaşan bir kontrol, ya da programı sonlandıran bir çalışma zamanı garantisi. Hayır oyu veren ülkeler, derleme sırasında atılması serbest olan bir denetimin sözleşme sayılamayacağını ve özelliğin standarda girmeden önce yeterli üretim deneyimi görmediğini savunuyor. Contracts 2019'da benzer gerekçelerle C++20'den çıkarılmış, ardından bir çalışma grubu tasarım üzerinde yaklaşık dört yıl harcamıştı.
Süreç geçmişi, şikâyetin diğer yarısı. WG21 — yani C++ komitesi — C++26'yı contracts ile oylamaya gönderme kararını gereken üçte ikinin üzerinde bir çoğunlukla aldı. DIS oylamasını ise, delegasyonları her zaman o tartışmada oturan kişilerden oluşmayan ulusal kuruluşlar verdi; P4238R1 belgesi de onlardan açıkça, contracts tasarımı ve onaylanma biçimi nedeniyle hayır oyu vermelerini istemişti. Komite üyeleri sonucu, "oyu kaybettim, kabul ediyorum" normunun dayandığı güvenin kırılması olarak niteliyor.
Yan hasar
Red, yalnızca contracts'ı vurmuyor. Taslaktaki diğer her şey onunla birlikte askıda: derleme zamanı reflection, asenkron kod için standart model olan `std::execution` ve kısmen contracts'a yaslanan standart kütüphane sağlamlaştırma çalışması.
Dört çıkış, hiçbiri hızlı değil
ISO kuralları dört yol tanıyor: revize taslağı sekiz haftalık daha kısa oylamayla yeni bir DIS'e göndermek; taslağı yeni bir yorum turu için komite taslağına geri döndürmek; teknik şartname olarak yayımlamak; ya da projeyi iptal etmek. Dördü de WG21 içinde çoğunluk gerektiriyor — yani C++26'yı contracts ile onaylayan aynı gövdede — ve iki tarafın da pozisyonuna yıllarca emek yatırılmış durumda. En hızlı rota, geri kalanı açmak için contracts'ı çıkarmak ve şu anda birçok tanınmış üyenin savunduğu yol bu; buna karşılık on altı contracts destekçisi, hiçbir değişiklik yapmadan yeniden oylama isteyen bir belge imzaladı. Sıradaki toplantı 16-21 Kasım'da Brezilya'nın Búzios kentinde ve gündemde tek önemli madde bu.
Ad kendiliğinden çözülür: 2027'de yayımlanırsa "C++27" bariz etiket olur. C++23 de o kadar geç çıktı ki resmî adı ISO/IEC 14882:2024 oldu.
Bugün C++ yazıyorsanız ne değişir
Hiçbir şey geri alınmıyor. Derleyiciler çalışma taslağını uyguluyor: GCC 16 `-std=c++26` kabul ediyor ve contracts'ı deneysel olarak sunuyor; Clang'de `-std=c++2c` var ama contracts uygulaması henüz birleştirilmedi. Bu hâlâ taslak kod ve `pre`, `post` ya da `contract_assert` kullanıyorsanız tam olarak tartışmalı parçanın üzerine inşa ediyorsunuz. Standart yolunu açmak için contracts çıkarılırsa kaynak değişiklikleri bekleyin.
Asıl ders C++ sözdizimiyle ilgili değil. Kırk yıllık koda, birkaç derleyiciye ve birbirine zıt ihtiyaçları olan kullanıcılara "argümanın pozitif olduğunu denetle" özelliğini eklemenin ne kadar zor olduğuyla ilgili: kimine göre denetim sıfır maliyetle kaldırılabilmeli, kimine göre kaldırılabiliyorsa garanti değildir. Komite ikisini birden memnun edemedi ve ulusal kuruluşlar bunu, cevabın bağlayıcı olduğu tek yerde söyledi.




