C++26 Sürümü Güvenlik Özelliği Tartışması Nedeniyle Ertelenebilir
C++26 programlama dilinin yeni sürümü, güvenliği artırmayı amaçlayan Contracts özelliği üzerindeki anlaşmazlık nedeniyle planlanan takvimde yayınlanamayabilir. Uluslararası Standardizasyon Örgütü (ISO) bünyesindeki oylamada taslak standart yeterli desteği alamazken, teknik komite üyeleri özelliğin mevcut tasarıma eklenmesi konusunda ikiye bölündü. C++ standartlarını hazırlayan WG21 çalışma grubu, Brezilya’daki toplantısında özelliğin çıkarılması, ayrı bir teknik şartnameye taşınması veya taslağın yeniden oylamaya sunulması seçeneklerini değerlendirecek.
C++26 Standardı ISO Oylamasında Onay Alamadı
C++26 standardının onay sürecindeki önemli aşamalardan biri olan Draft International Standard (DIS) oylaması ekim ayında başarısızlıkla sonuçlandı. ISO üyelerinin katıldığı oylamada 13 ülke taslağı desteklerken 9 ülke karşı oy kullandı, 12 ülke ise çekimser kaldı. ISO kuralları, bir standardın kabul edilmesi için olumsuz oyların toplam oyların yüzde 25’ini aşmamasını şart koşuyor. Karşı oy oranının bu sınırı geçmesi, C++26 taslağının bir sonraki aşamaya ilerlemesini engelledi.
Oylamada itirazların merkezinde Contracts özelliği yer aldı. Söz konusu teknoloji, geliştiricilerin kodlarına ön koşullar, son koşullar ve belirli şartların sağlanıp sağlanmadığını denetleyen kontroller eklemesine imkân tanıyor. Bu kontroller, yazılım hatalarının erken aşamada tespit edilmesine yardımcı olurken tanımsız davranışlara yol açabilecek sorunların da önüne geçmeyi hedefliyor.
Design by Contract yaklaşımı, Ada ve Eiffel gibi programlama dillerinde uzun süredir kullanılıyor. C++ topluluğu ise benzer bir özelliği dile eklemek için yaklaşık on yıldır çalışmalar yürütüyor. Contracts daha önce C++20 standardına alınmak üzere değerlendirilmiş, ancak riskli varsayılan ayarlara ilişkin endişeler nedeniyle 2019 yılında taslaktan çıkarılmıştı.
C++ dilinin yaratıcısı Bjarne Stroustrup, C++26 taslağına giren P2900 numaralı Contracts önerisinin mevcut hâlini eleştiren isimlerin başında geliyor. Stroustrup ve çalışma arkadaşları, geçen ağustos ayında yayımladıkları değerlendirmede özelliğin C++ dilinin yapısını değiştirebilecek ölçüde karmaşıklık ve kod yükü getirdiğini savundu.
Ekip, önerinin uygulama biçimini dağınık, güncelliğini yitirmiş ve yeterince test edilmemiş olarak nitelendirdi. Stroustrup ayrıca Contracts kontrollerinin doğrudan dilin parçası olmak yerine bir kütüphane aracılığıyla uygulanmasının daha verimli olabileceğini ileri sürdü. Eleştirilerin temelinde, yeni güvenlik kontrollerinin C++ dilinin performans ve sadelik gibi temel özelliklerini olumsuz etkileyebileceği endişesi bulunuyor.
C++ standartlaştırma komitesi üyesi Andreas Fertig ise karşı görüşü savunuyor. Fertig, Contracts önerisinin yıllardır tartışıldığını ve mevcut biçimiyle birçok kez çoğunluk desteği aldığını belirtiyor. Uzman, standartlaşma sürecinin son aşamasında gelen itirazların yalnızca teknik öneriyi değil, komite üyeleri arasındaki güven ilişkisini de zedelediğini düşünüyor.
Fertig, kişisel blogunda yaptığı değerlendirmede, oylamada kaybeden tarafların sonucu kabul etmemesini eleştirdi. ISO standartlarının farklı görüşler arasında uzlaşmayla ortaya çıktığını belirten Fertig, C++ topluluğunun ilerleyebilmesi için üyelerin karşılıklı güveni yeniden kurması gerektiğini ifade etti.
Contracts anlaşmazlığı, C++ dilinin güvenlik açıklarıyla ilgili daha geniş tartışmaların yaşandığı bir döneme denk geliyor. Geliştiricilerin bellek yönetimi ve diğer düşük seviyeli işlemler sırasında güvenlik hataları oluşturabilmesi, bazı yazılım projelerinin Rust gibi alternatif programlama dillerine yönelmesine neden oluyor. Rust, bellek güvenliğini derleme aşamasında denetleyen mekanizmalarıyla bu alanda öne çıkıyor.
Contracts özelliğini destekleyenler, kod içindeki koşulların açık biçimde tanımlanmasının yazılım hatalarını azaltabileceğini savunuyor. Karşı çıkanlar ise mevcut tasarımın C++ diline gereksiz karmaşıklık ekleyebileceğini ve performans avantajını zayıflatabileceğini düşünüyor. Dolayısıyla anlaşmazlık, yalnızca yeni bir özelliğin standarda eklenmesiyle sınırlı kalmıyor; C++ dilinin gelecekte güvenlik, performans ve kullanım kolaylığı arasında nasıl bir denge kuracağı sorusunu da gündeme getiriyor.
C++ Alliance Üst Yöneticisi Harry Bott ise taslağın oylamadan geçememesini standartlaşma sürecinin başarısızlığı olarak değerlendirmiyor. Açık kaynaklı EDG C++ derleyici ön ucunu geliştiren kuruluşun yöneticisi, ISO sürecinin teknik itirazları ortaya çıkarmak ve standartları iyileştirmek için tasarlandığını belirtiyor. Bott, yaşanan gelişmenin komitenin çalışma yöntemlerini gözden geçirmesi için bir fırsat sunduğunu ifade ediyor.
C++26 taslağının ISO oylamasında başarısız olması, standardın planlanan yayın takvimini riske attı. Standart bu yıl tamamlanamazsa topluluk içinde C++27 adıyla anılması gündeme gelebilir. Bu adlandırma resmî bir standart numarası değil; sürümün gelecek yıl yayınlanması durumunda resmî adı ISO/IEC 14882:2027 olacak.
ISO C++ çalışma grubu WG21, gelecek hafta Brezilya’nın Búzios kentinde bir araya gelecek. Toplantıda Contracts anlaşmazlığını çözmek için üç temel seçenek değerlendirilecek. İlk seçenek, Contracts özelliğini C++26 taslağından çıkararak standardın geri kalanını onay sürecinden geçirmek olacak. Ancak geliştiricilerin Contracts kullanılarak hazırladığı kütüphane güvenlik iyileştirmelerinin yeniden düzenlenmesi gerekeceği için bu yol önemli teknik çalışma gerektirecek.
İkinci seçenek, Contracts özelliğini ana standarttan ayırarak bağımsız bir teknik şartnameye taşımak olacak. Böylece komite, C++26’nın geri kalanını ilerletirken söz konusu teknolojinin tasarımını geliştirmeyi sürdürebilecek. Üçüncü seçenek ise taslak üzerinde sınırlı değişiklikler yaparak yeni bir oylama düzenlemek olacak.
WG21 üyelerinin vereceği karar, C++26’nın zamanında tamamlanıp tamamlanmayacağını belirleyecek. Sürecin sonucu aynı zamanda C++ topluluğunun güvenlik özelliklerini standartlaştırırken performans kaygılarını ve teknik uzlaşmayı nasıl ele alacağını da ortaya koyacak.









