C++26 boş sonsuz döngüleri tanımsız davranış olmaktan çıkardı
Öne çıkanlar
- C++26, P2809R3 önerisiyle gövdesi boş sonsuz döngüleri geçerli standart davranış haline getirdi.
- Önceki kurallarda derleyiciler boş döngüleri silerek döngüden sonraki kod bloklarını çalıştırıyordu.
- Düzenleme hata raporu statüsünde kabul edildiği için eski C++ standartlarına da uygulanabiliyor.
C++ standart komitesi, C++26 sürümünde kabul edilen P2809R3 numaralı öneriyle yan etkisi bulunmayan boş sonsuz döngülerin tanımsız davranış sayılmasına son verdi. Önceki standartlarda yer alan ileriye doğru ilerleme garantisi kuralları nedeniyle derleyiciler bu döngülerin sonlanacağını varsayabiliyordu. Özellikle Clang gibi optimize ediciler bu tür döngüleri tamamen kaldırarak program akışının döngüden sonra gelen ilgisiz kodlara geçmesine ve beklenmedik fonksiyonların çalışmasına yol açıyordu.
Söz konusu tutarsızlık, C11 standardının sabit ifadeli koşullara sahip döngüleri korumasına rağmen C++ diline bu kuralın dahil edilmemesinden kaynaklanıyordu. Özellikle gömülü sistemlerde ve işletim sistemi çekirdeklerinde ölümcül donanım hataları sonrasında sistemi durdurmak için sıkça kullanılan bu yapı, optimizasyonlar yüzünden çalıştırılamıyordu. Derleyicinin döngüyü silmesi, güvenlik açısından kritik cihazların bozuk bir sistem durumunda çalışmaya devam etmesi gibi ciddi açıklara neden oluyordu.
C++26 bu sorunu çözmek için yalnızca gövdesi tamamen boş ve koşulu sabit doğru ifadesi olan döngüleri yalın sonsuz döngü olarak tanımladı. Yeni kural kapsamında bu döngüler derleme aşamasında verim verme çağrısıyla desteklenerek ileriye doğru ilerleme anlambilimine kavuşturuldu. Karar bir hata raporu olarak onaylandığı için derleyici geliştiricileri yeni kuralı önceki C++ modlarında da geriye dönük olarak uygulamaya başladı.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.