C++: Belgesel: Dünyanın en önemli programlama dili
(herbsutter.com)- Bell Labs’taki başlangıcından dünya çapında benimsenmesine ve bugünkü büyümesine kadar uzanan süreci tek parçada özetleyen bu C++ 40 yıllık belgeselinde, C++ tarihine, standartlaşmasına ve araç ekosistemine katkı veren kişiler yer alıyor
- C++, Bjarne Stroustrup’un Bell Labs’ta C’nin donanım kontrol gücü ile Simula’nın nesne yönelimli soyutlamasını birleştirmek için geliştirdiği C with Classes’tan doğdu ve büyük ölçekli sistemler için verimli bir soyutlama dili olarak büyüdü
- İlk uygulama olan CFront, C++’ı C koduna dönüştürerek mevcut C altyapısı ve kütüphanelerinin aynen kullanılmasını sağladı; 1983’ten sonra kullanıcılar arttıkça uyumluluk temel mesele haline geldi
- IBM, HP ve Sun’ın baskısıyla başlayan ANSI/ISO standartlaşması, üreticiye göre bölünmüş uygulamaları engelledi; 1997 standardına namespace, exception, template ve STL dahil edildi
- 2000’lerin başında Java ve C#, dot-com çöküşü ve CPU performansındaki hızlı artışla birlikte C++ winter yaşandı; ancak 2004 civarında frekans ölçeklemesi durup paralellik önem kazanınca C++11 bir rönesans yarattı
- Günümüzde C++, CERN, oyunlar, finans, CUDA tabanlı yapay zeka ve HPC, gömülü sistemler gibi alanlarda kullanılıyor; bellek güvenliği, karmaşıklık, standart komitesinin büyüklüğü ve finansman eksikliği başlıca sorunlar olarak kalıyor
Bell Labs’ta başlayan C with Classes
- C++, 40 yıldan eski bir dil ve ilk oluşturulduğunda editörler, sözdizimi vurgulama, kod gezintisi, otomatik tamamlama, refactoring gibi araçlar yoktu; birçok geliştirici BASIC ya da çipe göre değişen assembly dilleri kullanıyordu
- Daha büyük ve daha karmaşık programlara ihtiyaç duyulan bir dönemde Bjarne Stroustrup, Bell Labs’ta dağıtık sistemler kurmaya çalışıyordu ve aygıt sürücüleri, ağ arayüzleri, bellek yöneticileri, süreçler gibi unsurları ele almak için düşük seviyeli bir dile ihtiyaç vardı
- C, donanımı tamamen kontrol etmeye ve sistem programlamaya uygundu, ancak programlar büyüdükçe modüller, iletişim kanalları ve protokoller gibi yapıları ifade etmekte yetersiz kalıyordu
- Stroustrup, Cambridge’de kullandığı Simula’nın güçlü tip güvenliğini, kullanıcı tanımlı tiplerini, sınıflarını ve sınıf hiyerarşilerini seviyordu; ancak Simula’nın fazla yavaş ve bellek tüketiminin yüksek olduğunu düşünüyordu
- Bunun üzerine Simula’nın temel özelliklerini C’ye ekleyerek C with Classes’ı yaptı; sonrasında yaklaşık 40 yıl boyunca C++’ı, Simula ile C’nin yapabildiği her şeyi gerçekleştirebilen bir yöne doğru geliştirdi
CFront, isim ve ilk yayılım
- C with Classes başlangıçta bir C preprocessor biçiminde yapıldı; başkaları da kullanmaya başlayınca Stroustrup, bunun C’den yeterince farklı olmadığını düşündü ve bir yıl boyunca derleyici ile dili geliştirmeye yatırım yaptı
- CFront, geleneksel bir backend ile makine kodu üretmek yerine C koduna derliyordu; böylece C++ kullanıcıları tümüyle yeni bir altyapı veya kütüphaneler benimsemek zorunda kalmadan mevcut C ortamını koruyabiliyordu
- CFront 1983’te oluşturuldu ve sözcüksel analiz, sözdizimi analizi, tip denetimi, ağaç temsili üretimi ve ağaç optimizasyonu yapan gerçek bir derleyiciydi
- C++ adı, C’deki
++işlecin artırma anlamına gelmesinden geldi; anlamsal olarak++Cdaha doğru olsa da dizinleme ve başvuru kolaylığı için C++ adı seçildi - AT&T, bilgisayar ve yazılım işine girerek C++ derleyicisi satmayı denedi; ancak donanım yeterince satılmadı ve ilk C++ uygulamaları, bant maliyeti ve düşük ticari lisans ücretleri sayesinde fiilen geniş şekilde dağıtılabildi
- Stroustrup bir süre belgeleri, derleyiciyi, dil uygulamasını ve yardım masasını tek başına yürüttü; AT&T’nin yatırımı çok küçüktü ve bir defasında genel amaçlı bir programlama dilinin yaygınlaştırılması için 3 yıl boyunca 5.000 dolar ayrıldı
- CFront 2.0’da çoklu kalıtımı işleme konusunda bir hata bulundu; sahaya çıkmış ve sonradan düzeltilemeyecek şekilde kırılabilecek vaat edilmiş temel bir özellik söz konusuydu, bu yüzden birkaç gün içinde düzeltilmiş sürüm hazırlanıp dağıtıldı
- Aynı sürüm numarasını korumak gerektiğinden sürüm 2.0.1 yerine 2.0.0 olarak dağıtıldı ve uyumluluk, şaka yollu “C word” denecek kadar baskın bir gereksinim haline geldi
Standartlaşma ve STL
- C++, AT&T içindeki verimliliği artıran bir araçtı; ancak tek bir şirkete kapalı kalmış bir dil başarılı olamazdı ve dış geliştiricilere ile bir kütüphane ekosistemine ihtiyaç vardı
- Web öncesinde
comp.lang.c++gibi Usenet grupları ve Byte gibi bilgisayar dergileri bilginin yayılma kanallarıydı; Stroustrup da 1980’lerin sonlarında birçok şirket ve kurumda konuşmalar yaparak dili tanıttı - Reklam kampanyaları ya da güçlü bir sponsor olmadan kullanım arttı; fakat Borland, Microsoft, IBM, Sun gibi birçok üretici kendi C++ uygulamalarını ve template tasarımlarını geliştirince kod uyumluluğu ciddi biçimde parçalandı
- IBM, HP ve Sun’ı temsil eden kişiler Stroustrup’tan ANSI kuralları altında C++ standartlaşmasını talep etti; Stroustrup bunun çok erken olduğunu düşünse de sonunda bir yıl sonra standartlaşmanın temel belgesini hazırlamayı kabul etti
- Annotated Reference Manual, yani ARM, standartlaşma için girdi belgesi oldu ve template, exception, namespace gibi özellikleri içeren yöne evrildi
- Standart, C++ kodu yazanlarla C++ uygulamaları arasındaki sözleşme olarak tanımlandı ve farklı üreticilerin aynı kodu aynı anlamla kabul etmesini sağlayan mekanizma haline geldi
- Alexander Stepanov’un geliştirdiği STL’in temel fikri, algoritmaların uygulanabildikleri tüm veri yapılarında çalışması ve veri yapılarının birbirine veri doldurabilmesiydi
- STL’den önce herkes kendi array, list, tree, container ve algoritma yaklaşımını kuruyordu; STL ise algoritmaları ve container’ları tanımlamak için tek ve güçlü bir yol sundu
- STL önerisine, standartlaşma takvimi açısından çok geç ve çok büyük olduğu gerekçesiyle karşı çıkıldı; Microsoft gibi büyük şirketler de karşıydı, ancak sunumlar ve tartışmalar sonrasında komitenin yaklaşık %80’i destek verince standarda girdi
- C++ Kasım 1997’de standartlaştı ve namespace, exception, template ile Standard Template Library temel özellikler olarak eklendi
- LLVM bu standartlaşmadan sonra başladığı için eski kod göçü yükü olmadan yeni özellikleri amaçlandığı biçimde kullanabildi
Kış dönemi ve C++11 rönesansı
- C++, 1990’larda CERN gibi yüksek enerji fiziği yazılımı ve hesaplama alanlarında Fortran merkezli geliştirmeyi değiştiren dil haline geldi; mevcut kütüphaneler ve kodlar C++’a taşındı ya da C++ için yeniden yazıldı
- Oyun geliştirmede video kartları ve API’ler düşük seviyeli işleri üstlenince C ve assembly’den C++’a doğru bir geçiş yaşandı; Unreal gibi motor ekosistemlerinde C++ kullanıldı
- Finansta programatik alım satım ve yüksek frekanslı alım satım ortaya çıkınca mikrosaniye düzeyinde gecikme kritik hale geldi; C++, her satırı ince ayarla optimize etmek zorunda kalmadan düşük gecikme sağlayabilen bir dil olarak kullanıldı
- 2000’deki dot-com çöküşüyle birlikte Java, Sun’ın güçlü pazarlaması sayesinde “geleceğin dili” ve “internetin dili” olarak yükseldi; Java, C++’ın karmaşıklığına açık bir tepki olarak doğdu
- Microsoft içinde, Visual Basic’in kolay form tabanlı geliştirmesi ile C++’ın performansını ve ifade gücünü birleştirme isteği vardı; bunun sonucu olarak C# ortaya çıktı
- 2000 ile 2005 arasında yalnızca bir duraklama değil, C++’ın gerilemesi yaşandı; CPU frekanslarının yükselmeyi sürdürdüğü bu dönemde birçok dil tasarımcısı ve geliştirici performansı daha az önemli görüyordu
- 2004 civarında işlemci frekansı ölçeklemesi sona erdi, tek çekirdekte performans ve güç sınırları ile komut düzeyi paralellikte azalan getiri belirginleşti; donanımın programları otomatik olarak hızlandırdığı dönem kapandı
- Çok çekirdek ve paralellik önemli hale geldi, ancak o sırada C++ standardında threading ile ilgili hiçbir şey yoktu; Herb Sutter’ın “C++ multi-threading: is the standardization committee listening” e-postası bu sorunu öne çıkardı
- C++0X 2002’de başladı ve 2007~2009’da tamamlanması hedeflendi; ancak daha fazla önemli özelliği dahil etmek için sürekli ertelendiğinden toplam 13 yıl sürdü
- C++11; move semantics, concurrency,
auto, range-based for loop, smart pointer, lambda veconstexprgibi özellikleri getirdi ve C ailesi dilleri içinde threading’i resmen ele alan ilk standart oldu - C++11, dili daha kolay ve daha güvenli hale getiren özelliklerle donanım performansından azami yararlanma ihtiyacının aynı anda buluşması sayesinde bir rönesans yarattı
- Sonrasında standartları zamanında yayımlamayı hedefleyen train model benimsendi ve komite 2 yıllık döngü yerine 3 yıllık döngüyü seçti
- C++14, C++11’e giremeyen unsurları ve hata düzeltmelerini içeren küçük bir sürümdü; C++17 ve C++23 ise çok sayıda dil ve standart kütüphane özelliği ekledi
Güncel ölçek ve zorluklar
- C++’ın karmaşıklığı büyümeyi sürdürdü; değişken başlatmanın birçok farklı yolu olduğu eleştirildi ve “anlaşılması zor bir karmaşıklık” diye ağır biçimde değerlendirildi
- Standart komitesi de büyüyerek 527 kişiye ulaştı ve başlangıçtaki toplam üye sayısı kadar komite ile komite başkanı oluştuğu yönünde kaygılar dile getirildi
- Dil tasarımında ekleme yapmak mümkün olsa da bir şeyi çıkarmak neredeyse imkânsız olduğundan, neyin ekleneceğinden çok ne zaman reddedileceği kritik mesele haline geliyor
- C++, elektrik üretiminden rüzgar türbinlerine, pirinç pişiricilerden bowling salonlarına, Hollywood filmlerinden otomobillere, finanstan kameralara kadar çok çeşitli alanlarda kullanılıyor; buna dair “neredeyse her yerde” ifadesi kullanılıyor
- HRT’nin C++ kod tabanı 1 milyondan fazla satır ve 15.000 dosyadan oluşuyor; yalnızca 2025’te yaklaşık 800 geliştirici 84.000 commit üretti
- Oyunlarda Unity C# kullanırken Unreal C++ kullanıyor; Call of Duty gibi yüksek kare hızı ve hızlı grafik gerektiren oyunlar hız nedeniyle C++ kullanıyor
- Nvidia ve hızlandırılmış hesaplamada da C++ önemli; yüzeyde Python kullanılsa bile gerçek hesaplama yükünü son derece optimize edilmiş CUDA kütüphaneleri taşıyor
- Hızla büyüyen diller arasında Rust ve C++ öne çıktı; C++ geliştiricilerinin sayısının 2022’de 9,4 milyondan 2025’te 16,3 milyona çıktığı verisi paylaşıldı
- Performans başına güç verimliliğinin önemli olduğu dillere talep sürdüğü için C++, güçlü ve yerine konması zor kullanım alanlarını koruyor
- Aynı zamanda büyük oyuncuların yapay zekaya yönelmesiyle C++ için ayrılan finansmanın azalabileceği yönünde kaygılar bulunuyor
- Pandemi döneminde hükümetler ve düzenleyici kurumlar, temel olarak bellek güvenliği sağlamayan C++’tan uzaklaşma yönünde adımlar attı; bellek güvenliği çözülmesi gereken en önemli sorun olarak gösteriliyor
- C++26’da yazılımı sağlamlaştırmak için ilklendirilmemiş değişkenler artık undefined behavior olmayacak ve C++26 standart kütüphanesinde
string,span,vectorgibi yaygın tipler için bounds safety seçeneği sunulacak - C++26’nın static reflection özelliği, program kodunun program kodunu görebilmesini sağlıyor ve standartlaşmış tekil özellikler arasında en yüksek etkiye sahip olanlardan biri olarak değerlendiriliyor
- Yapay zekanın dil güvenliği ve programlama dillerinin kullanım biçimi üzerinde büyük etkisi olabilir; ancak gelecekte tam olarak ne olacağı henüz bilinmiyor sonucuna varılıyor
1 yorum
Hacker News görüşleri
Ken Thompson’ın C++’ı tutarsız ve karmaşık fikirler yığını diye eleştirmesi hâlâ bana dokunuyor. İş için kullandığım son sürüm C++98’di; 11/17/20’yi ise sadece meraktan biraz kurcaladım
c++/cfront, C’nin rüzgârını arkasına almamış olsaydı bu kadar yaygın kullanılır mıydı, bundan şüpheliyim; bence bu hem kimliğiydi hem de C++’ın değiştirmeye çalışmadığı bir sınırdı. Derleyicinin halledebileceği işleri Coverity/Valgrind gibi araçlarla implementasyonu temizlemeye benzer süre harcamak çok sinir bozucu
C++98 döneminde Bjarne’ın iç yapı kitabıyla neler olup bittiğini epey anlayabiliyordum, ama sonrasında “effective, more effective, proficient, performant C++” türü kitaplar adeta bir endüstri gibi çoğaldı; LLM’ler çıkana kadar başkasının yazdığı mevcut kodu anlayabileceğime dair umudu bırakmak zorunda kaldım. Onun yerine zamanı problem alanını öğrenmeye harcamak daha tatmin ediciydi
Yine de Kernighan ve Stepanov gibi sevdiğim isimler çıktığı için belgeseli izlemeyi düşünüyorum
C++ derleyicisi yapmak için lisans gerekip gerekmediğini, adını C++ yerine başka bir şey koymamız gerekip gerekmediğini sordum; gülerek istediğimizi yapabileceğimizi söyledi ve izin sormak için arayan tek derleyici insanının ben olduğumu ekleyip teşekkür etti. Birkaç yıl önce ölüm ilanını gördüm; iyi bir insandı
Derleme dayanılmaz derecede yavaştı ve önemsiz olmayan uygulamalarda zorunlu olan near/far pointer desteği yoktu. Zortech C++ bu sorunları çözdü ve kapış kapış satılarak C++’ın başarı için ihtiyaç duyduğu kritik kütleyi oluşturdu
comp.lang.c++ trafiği bir anda arttı ve Borland bizim satışlarımızı görüp kendi nesne yönelimli dil ürününden vazgeçerek Turbo C++’ı yaptı. Microsoft da Borland’ın başarısını görüp kendi C++’ını geliştirdi
Microsoft’a da çok sayıda Zortech C++ derleyicisi sattık ve onlar bununla COM geliştirdi. Microsoft’un C* adında kendi nesne yönelimli C’sini yaptığına dair söylentiler de duydum ama hiç doğrulamadım
C komitesinin uzun süre çok şey eklemeden direnebilmesinin nedenlerinden biri, C++’ı gösterip “o onların işi, bizim değil” diyebilmesiydi. C++ olmasaydı C’nin sınıflar, şablonlar ve lambda’lar içeren bambaşka bir dile dönüşüp dönüşmeyeceğini bilemeyiz
Onların yaptığı C ve UNIX de daha gelişmiş LISP ve Smalltalk sistemlerini geçti; çünkü uygulanması daha basitti. Hatta kendi daha gelişmiş Plan 9 tabanlı işletim sistemleri bile daha yaygın Unix türevi sistemleri geride bırakamadı
Sonuçta galiba her zaman dağıtım gücü ve “yeterince iyi” kazanıyor. Perl, Python, Ruby, JavaScript, PHP gibi dinamik diller ile güçlü şekilde pazarlanmış Java, yeterince iyi yüksek seviye özellikler sunarak insanların Lisp ve Smalltalk’a gitmesini engelledi diye düşünüyorum
Bu açıdan bakınca C++, yaygın şekilde benimsenmiş düşük seviyeli yüksek performanslı bir dile yüksek seviye özellikler ekleyip onu geniş çaplı benimsenme için yeterince iyi hâle getiren araç olmuş olabilir
Bu aralar C++ ile çok çalışıyorum, o yüzden build’in bitmesini beklerken videoyu izlemeye karar verdim. Süresi tam uygundu ve neyse ki video da oldukça iyiydi
Bana göre C++, yaklaşık 15 yıldır kullandığım diller arasında en zarif dil. Eğer “sistemleştiren insan” tipindeyseniz ve yazdığınız şey hakkında son bitine kadar son derece hassas bir zihinsel modele sahip olmak istiyorsanız, C++’ın benzeri yok
Derleyici vb. kaynaklı sınırlamalar ve belirsizlikler olduğunu kabul ediyorum ama yine de böyle düşünüyorum
C++ ile çalışmayı sevmekte özgürsünüz ve C++ ile çok şey başarılabildiği de doğru, ama C++’ın bunu “çok az şeyle” yaptığını söylemek pek tartışmasız bir görüş olmaz gibi görünüyor
Bu belgeselde Andrei Alexandrescu’nun yer almasına sevindim. Onun Modern C++ Design kitabı, okuduğum dönemde düşünce yapımı gerçekten genişleten bir kitaptı; bugün de öyle olabilir. Okuyan var mı?
Her bölümü bir AI chatbot’a özetletip modern karşılığının ne olduğunu sormanızı öneririm. Bazı deyimsel kalıplar zaten geliştirilmişti ve bir bölümün tamamı
std::variantilestd::visitkullanımıyla yer değiştirmiş gibiydiC++ ortadan kalkmalı. Birçok insanın yatırım yaptığını ve muazzam miktarda kodun C++ ile yazıldığını anlıyorum. Eskiden hayranıydım, hâlâ da ana iş dilim, ama 2026'da LLM'lerin tüm güvenlik açıklarını bulabildiği ve saldırganların da arttığı bir ortamda, güvenliğin varsayılan olduğu bir dile ihtiyaç var
C++, güvenliği elde etmek için bunu isteğe bağlı olarak açmanız ve aşırı dikkat göstermeniz gereken bir dil. Bu işe yaramıyor ve onlarca yıllık deneyim bunu kanıtlıyor
shared_ptrgibi şeylerin gelmesi, dilin ne kadar büyük ölçüde değiştirilebileceğini de gösterdiNeredeyse her fikri içine aldı ve sahada neyin işe yarayıp neyin yaramadığını görmüş olduk. RAII, move ve copy ayrımı, akıllı işaretçiler, placement-new, jenerikler kalabilir
Buna karşılık
auto_ptr, varsayılan copy, belirli exception uygulama biçimleri, çoklu sanal kalıtım ve kodu bütünüyle ikame eden template'ler atılabilir. Bana göre mücadele bitti ve Rust, işe yarayan şeylerin en iyi derlenmiş sonucu. Derleme süresini de miras almış olması cabasıC++ geliştirme akışının sürmeye devam etmesine şaşırıyorum. Oyunlar ya da programlar C++ ile yapıldığında performansın genel olarak garanti sayılması güzel, ama bana doğrudan C++ kullan deseler ağlarım herhalde
Ezberlenecek şey çok fazla ve standartlar da çok çeşitli. Bakım için gittiğim bir proje C++ ise enerjim hemen düşüyor. Düpedüz fazla zor. Başkası yazarsa güzel ama benim doğrudan yazmak istediğim bir dil değil
Hangi dili kullanırsanız kullanın benzer bir ısınma gerekiyor; benim için Python, Go ya da Java kullanmaktan çok da farklı değil
Standart kütüphane olmadan bakınca C++ idare eder bir dil aslında
C++ ekosisteminin temel sorunu, herkesin dilin kendi alt kümesini yontup kullanması. Bu yüzden tek bir ekosistem yerine, birbiriyle çatışan stillere ve dil/standart kütüphane alt kümelerine sahip birçok ekosistem oluşuyor. Bu da kütüphaneler üzerinden kod yeniden kullanımını gereğinden fazla zorlaştırıyor
[0] https://hftuniversity.com/post/the-c-standard-library-has-be...
Büyük özellik kümesinin avantajı, C++'ın çok düşük seviyeden çok yüksek seviyeye kadar iyi soyutlamalar sunabilmesi. Satır içi assembly, bit işlemleri, doğrudan bellek manipülasyonu gibi düşük seviye işler de yapılabiliyor; neredeyse bir betik dili gibi yüksek seviyede de kullanılabiliyor. Problem alanı ne gerektirirse C++ bunu kaldırabiliyor
Ayrıca profil bilgilerine bakılırsa, Kuzey Kore'de değilseniz ücretinize bir sıfır daha eklemeniz iyi olur. Böylece daha uzun vadeli ve daha yüksek kaliteli müşteriler edinirsiniz
C++ programcısı olarak yaşamak tam olarak böyle bir his
Web geliştiricilerine her ders verdiğimde internetin dilinin JavaScript değil, C++ olduğunu söylerim. Web geliştiricileri sadece C++ geliştiricilerinin yaptığı programların içinde oynayan kullanıcılardır
İnternetin dilinin ne olduğu ise çok daha belirsiz
Tutku duyduğum bir konuda ücretsiz bir belgesel olması gerçekten harika. Teşekkürler
Ama ben biraz tuhafım; insanların kısa cümleleri art arda söylediği biçimde yapılan belgeselleri izleyemiyorum. “Bırakalım hikâyeyi onlar anlatsın” niyetini anlıyorum ama dikkatimi dağıttığı için bana ne düşünmem gerektiğini söyleyen bir anlatıcıya ihtiyaç duyuyorum
Yine de yapımcılara sevgiler
Son dönemdeki akımı kaçırdım ama yakın zamanda Python, Clojure ve sanırım başka diller için de belgeseller vardı. Aynı kişiler farklı dilleri kapsayan bir seri mi yapıyor? Tesadüf mü? Yoksa artık bütün programlama dilleri kendi video belgeselini yaptırmak için yarışıyor mu?
Görünüşe göre açık kaynak yazılımlar hakkında belgeseller üretiyorlar
Bu konuda Chandler Carruth'un ilginç düşünceleri var: https://hachyderm.io/@chandlerc/116694268329657881
Ancak son 10 dakikada artan karmaşıklık ya da bellek güvenliği gibi yaygın eleştirileri biraz ele aldı. Yine de izlemek keyifliydi.