C++26 son aşamada takıldı: ISO oylaması Contracts anlaşmazlığı yüzünden reddedildi, sürüm C++27'ye kayabilir
C++26 taslak standardı Ekim'deki ISO oylamasında 13 kabul, 9 ret ve 12 çekimserle gerekli çoğunluğu alamadı. Tartışmanın merkezinde hataları çalışma zamanında yakalamayı amaçlayan Contracts özelliği var; çalışma grubu gelecek hafta Brezilya'da toplanıyor.
C++ programlama dilinin bir sonraki sürümü, güvenliği artırması beklenen Contracts özelliği üzerindeki anlaşmazlık yüzünden son anda gecikebilir. The Register'ın 13 Kasım'da aktardığına göre C++26'nın Draft International Standard (DIS) metni, Ekim ayındaki ISO oylamasından geçemedi.
Oylamada 13 kabul, 9 ret ve 12 çekimser oy çıktı. ISO kuralı ret oylarının yüzde 25'i aşmamasını şart koşuyor; sonuç bu eşiği karşılamadı. Habere göre ret oyu verenlerin başlıca itirazı Contracts oldu. DIS oylaması, standardın teknik ayrıntılarının ulusal standart kuruluşlarınca onaylandığı sondan bir önceki aşama.
Contracts nedir, neden tartışılıyor?
Contracts, geliştiricinin koda önkoşul (precondition), sonkoşul (postcondition) ve belirli bir koşulun sağlandığını denetleyen assertion eklemesine izin veriyor. Bu denetimler, aksi halde undefined behavior'a gidebilecek programlama hatalarını yakalamaya yardımcı olabiliyor. Yaklaşım Ada ve Eiffel gibi dillerde uzun süredir var; C++'a eklenmesi en az on yıldır öneriliyor ve özellik, varsayılan davranışlarla ilgili kaygılar yüzünden C++20'den çıkarılmıştı.
Dilin yaratıcısı Bjarne Stroustrup, C++26'ya giren öneriye (P2900) karşı. Stroustrup ve meslektaşları geçen Ağustos'ta yayımladıkları yazıda önerinin dile karmaşıklık ve hantallık eklediğini, C++ için "varoluşsal bir tehdit" olduğunu savundu; uygulamanın yeterince test edilmediğini ve bir kütüphane olarak daha iyi yapılabileceğini belirtti.
Karşı tarafta standardizasyon komitesi üyesi Andreas Fertig var. Fertig, konunun yıllardır çalışıldığını ve mevcut haliyle defalarca çoğunluk oyu aldığını, bu kadar geç bir aşamada "hayır" denmesinin güvene dayalı süreci sarstığını yazdı. C++ Alliance CEO'su Harry Bott ise The Register'a, taslağın geri gönderilmesinin sürecin başarısızlığı değil, tasarlandığı gibi işlemesi olduğunu söyledi.
Neden önemli?
Tartışmanın arka planında C++'ın bellek güvenliği sorunu duruyor. The Register, C++'ta yanlışlıkla güvenlik açığı üretmenin kolaylığına yönelik eleştirilerin birçok projeyi Rust'a yönelttiğini hatırlatıyor. Contracts bu eleştiriye dilin içinden verilen cevaplardan biri; itiraz edenler ise ek denetimlerin C++'ın hız avantajını zayıflatabileceğini söylüyor.
Oylamanın bu aşamada başarısız olması C++ tarihinde ender görülüyor. Sürüm bu yıl çıkmazsa gayriresmî adı "C++27" olabilir.
Bundan sonra ne olacak?
ISO C++ çalışma grubu WG21 gelecek hafta Brezilya'nın Búzios kentinde toplanıyor. Habere göre masada üç seçenek var:
- Contracts'ı standarttan çıkarıp C++26'nın geri kalanını yayımlamak. Bu, Contracts kullanılarak yapılmış library hardening çalışmasının da geri alınması demek.
- Contracts'ı ayrı bir teknik spesifikasyona taşıyıp üzerinde çalışmayı sürdürmek.
- Küçük bir revizyon yapıp yeniden oylamak.
Kimin işine yarar, ne yapabilirsiniz?
- C++ kod tabanı yöneten ekipler: C++26 özelliklerine (özellikle Contracts ve ona dayanan kütüphane hardening'ine) bağlı yol haritanız varsa takvimi Búzios toplantısının sonucuna göre güncelleyin.
- Derleyicilerdeki deneysel Contracts desteğini üretim kodunda kullanıyorsanız, özelliğin standarttan çıkarılma ya da değişme ihtimalini hesaba katın.
- Güvenlik ekipleri: bellek güvenliği stratejiniz dil standardındaki tek bir özelliğe dayanmasın; statik analiz, sanitizer'lar ve fuzzing bugün elinizde olan araçlar.