Bir dil düşünün… Kırk yılı aşmış, hala tartışılan, hala sevilen, hala da arada sinir bozan bir dil. C++ tam olarak böyle bir şey. Geçen ay Şişli’de bir ekip toplantısında genç bir geliştirici bana “Abi C++ artık eskidi mi?” diye sordu; ben de gülüp geçemedim, çünkü bu soru her yıl yeniden geliyor. Ama açık konuşayım, C++’ın hikayesi sadece yaşlı bir programlama dili hikayesi değil. Asıl mesele şu: Bjarne Stroustrup’un tasarladığı bu dil, bugün hala neden birçok hayati sistemin omurgası olmayı sürdürüyor?
Stack Overflow Podcast’te Ryan’ın Bjarne Stroustrup’u ağırladığı bölüm de zaten tam buraya dokunuyor. Dilin tarihi, bugünü ve nereye gittiği konuşuluyor; ama işin aslı şu ki C++’ı anlamak için sadece sözdizimine bakmak yetmiyor. Biraz yazılım felsefesi lazım, biraz donanım kokusu lazım, biraz da “bu işi neden böyle yapmışlar?” diye kaş çatmak lazım.
Bakın, burayı atlarsanız yazının kalanı anlamsız kalır.
C++ neden hala gündemde?
C++ bazen eski bir bina gibi görülüyor: dışarıdan bakınca ağır, hatta biraz hantal duruyor. Ama içeri girince fark ediyorsunuz ki o binanın taşıyıcı kolonları sağlam. O yüzden oyun motorlarından finans sistemlerine, gömülü cihazlardan tarayıcı bileşenlerine kadar birçok yerde hala karşımıza çıkıyor.
Açık konuşayım, Ben 2023 sonbaharında Kadıkoy’de küçük bir ürün ekibiyle çalışırken bunu çok net gördüm. Ekip Python tarafında hızlı ilerliyordu ama performans duvarına toslayınca bazı çekirdek modülleri C++ ile yazmaya başladı. Sonuç? Kod daha karmaşık oldu evet… ama gecikme süreleri de gözle görülür biçimde düştü. Yani mesele moda değil; ihtiyaç.
İşte tam da bu noktada devreye giriyor.
Burada küçük startup ile kurumsal yapı arasında bayağı büyük fark var. Startup çoğu zaman hız ister, kurumsal taraf ise kontrol ve uzun ömür peşindedir. C++ ikisine de oynayabiliyor ama bedeli var: öğrenme eğrisi dik, hata affı az. Bakım maliyeti bazen insanı terletiyor.
Bjarne’nin yaklaşımı neydi?
Bjarne Stroustrup’un yaptığı şey aslında “sıfırdan yeni dünya kuruyorum” demek değildi. O daha çok mevcut gücü alıp üstüne düzen kurmaya çalıştı. Yani düşük seviyeli kontrolü korurken daha soyut araçlar eklemek istedi; sınıflar, nesneler ve sonrasında gelen modern özellikler bu çizginin parçası oldu.
Bu yaklaşım bana hep iyi yapılmış bir mutfak tezgahını hatırlatıyor: elinizde bıçak da var blender da var… ama hangisini ne zaman kullanacağınızı bilmezseniz ortalık savaş alanına dönüyor. C++ da biraz öyle işte.
C++ sağlam olduğu için değil yalnızca; doğru yerde kullanıldığında gerçekten işe yaradığı için yaşıyor.
Dilin geçmişi: Basit fikirden devasa dünyae
C++’ın kökenine bakınca şunu görüyorsunuz: Bu dil tek seferde parlayan bir proje değil, yıllar içinde katman katman büyümüş bir yapı. Başlangıçta amaç daha verimli yazılım üretmekti; sonra nesne yönelimli yapı geldi, ardından kalıp (template) sistemi derken iş iyice genişledi.
Eh, Ben ilk kez üniversitede Windows üzerinde derleme yaparken C++ ile uğraştığımda — İTÜ Ayazağa kampüsünde laboratuvar saatinde — en çok şuna şaşırmıştım: aynı dil hem oyuncak gibi küçük örneklerde çalışıyor hem de koca sistemlerin içinde yer bulabiliyor. Tabii ilk başta pointer hatalarıyla boğuşuyordum… klasik.
Gel gelelim bu büyümenin yan etkisi de oldu: Dil güçlendikçe sadeleşmedi, tersine daha zengin ama daha karmaşık hale geldi. Modern C++, eski alışkanlıkları törpülemeye çalışsa da sırtındaki tarih yükünü neredeyse tamamen atamıyor.
Nerede parlıyor, nerede tökezliyor?
Açık söyleyeyim; C++ her soruna çözüm değil. Performans can alıcı alanlarda bayağı iyi iş çıkarıyor. Hızlı prototipleme isteyen ekiplerde bazen gereksiz ağır kalabiliyor. Mesela web uygulaması yazacaksanız çoğu zaman başka diller size daha rahat nefes aldırır.
Eh, Buna karşılık oyun geliştirme tarafında durum farklıdır (ciddiyim) — valla güzel iş çıkarmışlar —. Orada milisaniyeler önemli… Bu ne anlama geliyor? hatta bazen milisaniyenin kesri bile önemli olur! Aynı şekilde gerçek zamanlı sistemler, gömülü cihazlar ve yüksek frekanslı işlem yapan finans altyapıları için C++ hala güçlü adaylardan biri.
Bir arkadaşım geçen yıl Berlin’deki fintech şirketinde işe başladı ve ilk üç ayda backend’in sıcak yollarından biri olan risk hesaplama modülünü optimize ettiğini anlattı; Python’dan doğrudan vazgeçmediler ama çekirdek kısmı C++’a taşıyınca işlem süresi yaklaşık yüzde 35 düşmüş dediğinde inanmamıştım önce… sonra benchmark ekranını görünce sustum.
| Kullanım Senaryosu | C++ Uygun mu? | Neden? |
|---|---|---|
| Oyun motoru | Evet | Düşük gecikme ve donanım kontrolü sağlıyor |
| Mikroservis prototipi | Pek değil | Geliştirme hızı çoğu zaman öncelikli oluyor |
| Gömülü sistem | Evet | Kısıtlı kaynaklarda verimli çalışıyor |
| Kurumsal veri hattı | Bazen | Kritik parçalar için mantıklı olabilir |
Kodun fiyat etiketi var mı?
E tabi var. Güçlü kontrol genelde yüksek sorumluluk getiriyor; bellek yönetimi yanlışsa sonuç kötü olabilir. Neyse uzatmayalım… modern araçlarla durum iyileşti ama “kolay” kelimesi yine de fazla iddialı olurdu.
# Modern tarzda basit kullanım örneği
#include <iostream>
#include <vector>
int main() {
std::vector<int> sayilar = {1, 2, 3};
for (const auto& s : sayilar) {
std::cout << s << "
";
}
return 0;
}
Peki bugün neden tekrar konuşuluyor?
Bence bunun iki nedeni var.: Birincisi performans baskısı arttı mı insanlar tekrar temel katmana dönüyor., ikincisi ise yapay zeka çağında bile altyapının çoğu yerde çıplak verimlilik istemesi (buna dikkat edin). Yani model eğitimi ayrı dünya olabilir ama onu besleyen kütüphaneler, runtime bileşenleri ve sistem servisleri çoğu zaman oldukça pragmatik seçimler istiyor.
Editör masasında bu haberi okuduğum gün akşamüstü İstanbul’da yağmur başlamıştı (tam klasik Nisan havası). Ben de test etmek için kendi not defterimde birkaç eski benchmark sonucuna baktım.; garip olan şu ki yıllardır eleştirilen bazı noktalar düzelmiş olsa da topluluğun en büyük sorunu hala aynı kaldı : öğrenmesi zor olması (bu beni çok şaşırttı). Bu konuda %100 emin değilim ama sanırım kullanıcıların yarısı dili değil, ekosistemin ağırlığını konuşuyor.
Küçük ekipler için ne ifade ediyor?
Eh, Küçük startup’larda C++ seçmek cesur karar olabilir ; bazen doğru, bazen gereksiz risk. Eğer ekipte dili bilen biri yoksa teknik borç hızlıca büyür. Ama ürününüzün kalbinde gerçek zamanlı işlem varsa, o ayrı ; orada hız kazanımı pahalıya değer.
Kısacası, erken aşamada herkesin bildiği kolay yollara sapmak cazip geliyor. Fakat ürün ölçeklenince “keşke çekirdeği daha sağlam kursaydık” cümlesi kapıyı çalabiliyor. İşte burada deneyim fark yaratıyor.
Kurumsal tarafta tablo nasıl?
Büyük şirketlerde durum biraz farklı.; eğitim bütçesi vardır, kod inceleme süreçleri oturmuştur, test kültürü yerleşmiştir. Böyle olunca C++; dikkatli seçilmiş alanlarda gayet mantıklı hale gelir. Mesela performans-kritik servislerde ya da mevcut legacy kod tabanlarını korurken tercih edilir.
- Daha fazla kontrol istiyorsanız mantıklı olabilir.
- Ekip tecrübesi düşükse zorlayıcı olabilir.
- Sadece hız değil bakım maliyetini de hesaba katmak gerekir.
- Dil kadar build sistemi ve test düzeni de önemlidir;
- burasını hafife alan çok proje gördüm…
C++
modernleşirken ne kaybetti ne kazandı?
Az önce başka türlü anlattım ama şimdi geri dönüp bakınca şunu söylemek daha doğru.
C++, yeni standartlarla birlikte daha güvenli yollar açtı; auto dediniz mi işler kolaylaşıyor, smart pointer dediniz mi bellek tarafında biraz nefes alıyorsunuz.
Ama karşılığında dilin yüzeyi genişledi.
İşte tam burada bazı geliştiriciler kaçıyor.
Peki neden?
Çünkü her yeni özellik beraberinde yeni kararlar getiriyor.
Bazen iyi.
Bazen yorucu.
Yukarıda bahsettiğim o olay var ya, ekiplerin “hangi standarda geçelim?” diye haftalarca tartışması… aynen onun devamı bu.
Modern C++, sıfırdan temizlenmiş bir alan sunmuyor; daha çok eski alet kutusunun yanına yeni aletler eklenmiş hali gibi duruyor.
Neyse uzatmayalım.
Doğru ellerde baya iş görüyor.
Yanlış ellerdeyse kafa karıştırabiliyor.
Evet.
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.



