← Radar

Konu: Kodlama3 dk okuma

C++26 ISO oylamasından geçemedi: Tartışmanın merkezinde contracts var

Bu neden önemli?

Programlama dillerinin nasıl değiştiğini nadiren bu kadar açık görürüz. Bir dil standardı komitede kabul edilse bile ülkelerin oyuna takılabiliyor. Tartışmanın kendisi de öğretici: Bir kontrol, test sırasında açılıp üretimde kapatılan bir hata ayıklama aracı mı, yoksa programın güvenebileceği bir garanti mi?

Ne oldu?

C++ standardını ISO’daki WG21 komitesi yazıyor. Ama bir taslağın resmî standart olması için son adımda ülkelerin ulusal standart kuruluşları oy veriyor. Bu aşamanın adı DIS (Draft International Standard) oylaması. Geçmek için iki şart var: Oy veren tam üyelerin üçte ikisi “evet” demeli ve verilen oyların en fazla dörtte biri “hayır” olmalı.

C++26 oylaması 23 Ekim’de kapandı. Polonya ulusal kuruluşunun üyesi Mateusz Pusz’un derlediği sonuçlara göre taslak iki şartı da karşılamadı: Tam üyelerden 20 oyun 12’si “evet” (%60, gereken 14’tü). Toplam 22 oyun 9’u “hayır” (%41). Hayır diyenler Danimarka, Finlandiya, İran, İtalya, Japonya, Lüksemburg, Romanya, İspanya ve İsveç. Resmî sonuç belgesi henüz kamuya açık değil. Sayılar, sonucu duyuran C komitesi başkanı Robert Seacord’un paylaşımından geliyor. Ülkelerin yorumları da henüz yayımlanmadı, ama tartışmanın tek bir özellikte toplandığı açık.

Contracts nedir?

Contracts, bir fonksiyonun beklentilerini kodun içine yazmanın yolu:

  • pre: Ön koşul. Fonksiyon çalışmadan önce girdiler kontrol ediliyor.
  • post: Son koşul. Sonuç kontrol ediliyor, örneğin post (r : r >= 0.0).
  • contract_assert: Fonksiyonun içinde bir kontrol.

İlk bakışta yerleşik assert gibi duruyor. Asıl tartışma, bu kontrollerin nasıl çalışacağında. Taslakta dört davranış var: ignore (hiç çalıştırma), observe (çalıştır, hatayı bildir, devam et), enforce (hata varsa programı durdur) ve quick_enforce. Hangisinin kullanılacağına kodu yazan değil, derleme ayarları karar veriyor.

Karşı çıkanlar ne diyor?

Ağustos’ta Stroustrup ve dört komite üyesi P4334R0 adlı bir makale yayımladı. Onlara göre bu tasarım C++ için “varoluşsal bir tehdit”. Gerekçeleri kısaca şöyle:

  • Üretimde kapanan kontrol, güvenlik sağlamaz. Eiffel’de, C’nin assert’ünde, Microsoft’un C# Code Contracts’ında aynı model denendi: Testte aç, üretimde kapat. Makaleye göre bu 1980’lerin yaklaşımı. Bugünün cevabı her zaman açık kalan, sertleştirilmiş standart kütüphaneler ve statik analiz.
  • Eksik ve denenmemiş. Taslakta yaklaşık 56 sayfa metin var. Sanal fonksiyonlarda contracts gibi gündelik kullanım için gereken parçalar C++29’a bırakıldı. Makale yazıldığında GCC 16 desteği deneyseldi, Clang’da yoktu.
  • Yeni hata yolları açıyor. Aynı başlık dosyasındaki bir fonksiyon, bir dosyada kontrol açık, diğerinde kapalı derlenirse ihlal fark edilmeyebiliyor.

Makalenin yazarları, contracts fikrine değil bu tasarıma karşı olduklarını ve C++26’nın geri kalanıyla sorunları olmadığını söylüyor. Bir dilekçe de ülkeleri “hayır” oyu vermeye çağırdı.

Destekleyenler ne diyor?

Tasarımın yazarlarından Timur Doumler ve 15 kişi, oylama kapandığı gün P4433R0’ı yayımladı. Onlara göre bu itirazların hepsi komitede defalarca dinlendi ve oylandı. Contracts, WG21 genel kurulunda 100’e 14 oyla kabul edilmişti, taslak da 114’e 12 oyla oylamaya gönderilmişti. Küçük bir grubun komitede kazanamadığını ulusal kuruluşlarda kazanmaya çalıştığını yazıyorlar. Contracts’ı çıkarmanın da birkaç aylık bir gecikme olmayacağını, 2019’da C++20’den çıkarıldıktan sonra yeniden toparlanmasının altı yıl sürdüğünü hatırlatıyorlar.

Sırada ne var?

ISO kurallarına göre seçenekler belli: Düzeltilmiş bir taslakla yeni bir oylama, yorumlar için yeni bir komite taslağı, standart yerine teknik şartname (TS) ya da C++26’yı tamamen iptal etmek. Kararı SC22 başkanı veriyor, WG21 öneride bulunuyor. Komite 16–21 Kasım’da Brezilya’nın Búzios kentinde toplanacak. Pusz’un aktardığına göre bazı üyeler takvim 2027’ye kayarsa adın “C++27” olmasının mantıklı olacağını düşünüyor.

Düşün

  • Kendi kodunda kontrolleri test sırasında açıp üretimde kapatıyor musun? Üretimde bir girdi beklediğin gibi değilse ne oluyor?
  • Bir özellik komitede büyük çoğunlukla kabul edildiyse, azınlığın itirazı son oylamada belirleyici olmalı mı?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (5, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Kodlama3 dkVideo: The Pragmatic Engineer

Google'da 250 milyon satırı yeniden düzenlemek: Yapay zekâya kodu değil, kodu değiştiren aracı yazdır

Software Engineering at Google kitabının yazarlarından Titus Winters, Google'ın dev C++ kod tabanında nasıl yüz binlerce değişikliği kimseyi durdurmadan yaptığını anlattı. Bugüne dersi de net: Büyük bir yeniden düzenlemeyi doğrudan yapay zekâya yaptırmak yerine, ona her seferinde aynı sonucu veren bir dönüşüm aracı yazdır.

Konu: Kodlama3 dkVideo: Better Stack

Worktrunk: Git worktree'lerini dal adıyla yöneten komut satırı aracı

Worktrunk, birden fazla kodlama ajanını aynı depoda ayrı worktree'lerde çalıştırmayı kolaylaştıran açık kaynak bir Rust aracı. Worktree açmak, hepsini tek listede görmek ve biten işi ana dala geri almak birer komut. Yeni klasöre node_modules gibi ağır dosyaları neredeyse yer kaplamadan kopyalayabiliyor.