1 puan yazan GN⁺ 2024-12-25 | 1 yorum | WhatsApp'ta paylaş
  • C++11’den sonra C++’ın dili ve ekosistemi büyük ölçüde değişti; bir şeyleri bizzat yapıp deneme sürecinde programlamanın keyfini yeniden canlandıran bir dil haline geldi
  • C++ bir dönem template metaprogramming fazlalığı ve standart/pattern odaklı kültürü yüzünden birçok geliştiricinin aklında yorucu bir dil olarak kaldı
  • auto, nullptr, range-for, lambda, <chrono>, akıllı pointer’lar, <thread> gibi değişimler C++’ın kodlama stilini ciddi biçimde değiştirdi
  • Modern C++ dosya sistemi, paket yönetimi, GUI/TUI, grafik, matematik, yapay zeka ve OS API erişimine kadar geniş seçenekler sunuyor; istenen şeyi doğrudan üretmeyi kolaylaştırıyor
  • Derleyici hataları, build araçları, standarda uyum, tarihsel karmaşıklık ve RAII gibi eksiler hâlâ var; ancak yaratma olanağı bu rahatsızlıkların önüne geçiyor

C++’ın yeniden eğlenceli hale gelmesinin nedeni

  • Küçük bir roguelike oyun yaparken harita üretiminde Dijkstra algoritmasını kullanarak odaları bağlayan tüneller implemente edildi ve bu süreçte C++ denemeleri ciddi biçimde engellemedi
  • FTXUI kullanıcı arayüzünü SFML render penceresine doğrudan çizme denemesi de mümkün oldu; bu süreçte C++’ın Unicode işleme tarafı öğrenildi
  • Bu işler kolay değildi ama gerçekten yapılabildi; “bu fikir gerçekten çalıştı” hissi C++’ın eğlencesini yarattı
  • Programlamaya başlama nedeni bir milyardere daha fazla para kazandırmak, render motorlarıyla boğuşmak ya da bir açık kaynak projesinin üst katmanlarını memnun etmek değil, fikirleri hayata geçirmenin keyfiydi

Template metaprogramming döneminin yorgunluğu

  • 1990’ların sonundan 2000’lerin başına kadar C++’ta template metaprogramming’i her şeye uygulama havası güçlüydü; bu dönem C++’ı eğlencesiz hale getiren dönüm noktası olarak ele alınıyor
  • İki sayıyı template ile toplamanın doğrudan toplamaktan daha hızlı olduğu gibi tartışmalar vardı; ancak gerçek assembly çıktısının aynı olduğu örnekler ortaya çıktı
  • C++ standart komitesinin programcılara iyi bir kullanım deneyimi sunma konusunda isteksiz olduğu algısı da olumsuz deneyimi büyüttü
  • O dönemin C++’ı, çok sayıda <> açılı parantez ve karmaşık sözdizimi barındıran ama karşılığında az şey veren bir dil olarak hatırlanıyor
  • Java da başta garbage collector’ı ve geliştirici dostu yapısı nedeniyle çekici görünüyordu; ancak sonrasında boilerplate ve design pattern fazlalığıyla benzer bir yorgunluk yarattı

C++11’in dilin hissini değiştirmesi

  • C++11’e eklenen özellikler, C++ hakkındaki izlenimi büyük ölçüde değiştiren yenilikler olarak değerlendiriliyor
  • Başlıca özellikler şöyle
    • auto: Aynı tip adını tekrar tekrar yazma yükünü azaltan otomatik tip çıkarımı anahtar sözcüğü
    • nullptr: C’deki NULL sorununu tamamlayan null pointer ifadesi
    • range-for: auto ile birlikte container dolaşımını daha basit hale getiren döngü
    • lambda expressions: API tasarımını ve kullanılabilirliği ciddi biçimde değiştirebilen lambda’lar
    • <chrono>: 100ms gibi ifadeleri mümkün kılan tip güvenli zaman kütüphanesi
    • <regex>: Standart kütüphaneye dahil edilen regular expression özelliği
    • unique_ptr, shared_ptr: Sahiplik ve referans sayımıyla ilgilenen akıllı pointer’lar
    • <thread>: Multithreading’i temel dil ekosistemine dahil eden özellik
  • C++11, eski yöntemi terk etmeden dilin felsefesini ve stilini değiştirdi; bu yönüyle JavaScript’in ES6’sına benzer şekilde algılandı

Modern C++ ekosistemindeki seçenekler

  • Güncel C++, diğer dillerden beklenen özelliklerin önemli bir kısmına sahip
  • Örnek olarak verilen araç ve kütüphaneler şöyle
  • Ekosistem kalitesi kalemden kaleme değişse de genel olarak JavaScript ve Python’da deneyimlenenlerden daha yüksek değerlendiriliyor
  • Özellikle FTXUI ve STL, iyi tasarım ve kullanılabilirlik gösteren örnekler olarak öne çıkıyor

“Eğlenceyi” yaratan geniş implemente edilebilirlik

  • C++’ın eğlenceli olmasının nedeni yalnızca modern özellikler eklenmiş olması değil; neredeyse her şeyi yapabilmeye dönük uygulama olanağında yatıyor
  • Masaüstü uygulamaları fenster, SFML, Qt kullanarak ya da doğrudan OS API’leriyle çalışarak yapılabiliyor
  • Ses tarafında SFML gibi hızlı seçeneklerden Wwise gibi ticari araçlara kadar geniş bir yelpaze var
  • 3D grafiklerde OpenGL, Vulkan, Direct3D, Ogre3D gibi çeşitli seçenekler bulunuyor
  • Matematik alanında BLAS, Eigen, GMTL gibi kütüphaneler var
  • Gerekli kütüphane olmasa bile C veya C++ ABI’ye ve işletim sistemi API’lerine doğrudan erişerek yapılabiliyor; bu doğrudan üretim sürecinin kendisi de eğlencenin bir parçası oluyor

Modanın dışında kalmış bir dilin yaratıcı özgürlüğü

  • C++’ın dili ve ekosistemi kaliteli olsa da şu anda moda bir dil olmadığı için, dili bozan türden ilgiyi daha az çektiği değerlendiriliyor
  • C++ topluluğu, ne yapılırsa yapılsın pek karışmayan bir ortam olarak tasvir ediliyor
    • Matris kütüphanesi, GUI kütüphanesi, oyun motoru, tuhaf bir oyun gibi projeler serbestçe denenebiliyor
  • Yaratıcı işlerde önce fikri dışarı çıkarma aşaması, sonra da soğukkanlı biçimde eleştirip kaliteyi yükseltme aşaması birlikte gerekiyor
  • Diğer dillerde organizasyonlar, liderlik ve topluluk baskısının yaratım sürecindeki ara deneyleri engellediği değerlendiriliyor
  • C++’ın geniş olanakları ve görece düşük utandırma kültürü yaratıcı bir deneyim oluşturabiliyor

cppreference.com’un güçlü yönleri

  • cppreference.com, kullanılan programlama dili dokümantasyonları arasında en üst seviyelerden biri olarak değerlendiriliyor
  • Avantajları şöyle
    • Tüm anahtar sözcükler ve kütüphaneler referans dokümanı olarak düzenlenmiş
    • Çoğu maddede gerçekten çalışan örnekler var
    • Her özelliğin hangi C++ standart sürümünde eklendiğini gösteriyor
    • Standart dokümana ve ilgili referanslara bağlantı veriyor
    • DuckDuckGo tabanlı arama kutusu sayesinde yazım hatalı olsa ya da doğru terim bilinmese de bulmak kolay
    • Copy elision gibi önemli kavramları da örneklerle açıklıyor
  • Eksik yanı, farklı platformlarda derleyici kurma yöntemlerinin bulunmaması
  • C++ derleyicisi ve platform sayısı çok fazla olmadığı için başlangıç rehberi ekleme payı da var

C++’ın hâlâ kalan sorunları

  • Bu, C++’ın kusursuz bir dil olduğu anlamına gelmiyor; diğer diller gibi pek çok rahatsız edici yanı var
  • Windows’ta Microsoft dışı kurulum yollarıyla derleyici ve geliştirme araçlarını yapılandırmak zor; bunun için bizzat PowerShell kurulum script’i hazırlanmış
  • Şu anda hissedilen başlıca rahatsızlıklar şöyle
    • Derleyici hata mesajlarının %95’inden fazlası sektörün en kötüleri arasında değerlendiriliyor
    • Build araçlarını kullanmak zor; Meson bile kurulu paket yönergelerini yok sayıp bozuk sistem kütüphanelerini kullanma sorununa yol açmış
    • Derleyici üreticilerini standarda uymaya zorlayan teşvikler yetersiz
    • C++ tarihi nedeniyle çok karmaşık; eski heap allocation/raw pointer stili, template metaprogramming stili, C++11 sonrası stack merkezli stil ve struct merkezli daha yeni stil bir arada var
    • RAII gerçekçi yapılandırma durumlarında çoğu zaman engel oluyor; diğer dillerdeki başlatma constructor’larıyla mevcut RAII arasında bir orta noktaya ihtiyaç olduğu düşünülüyor
  • Bu eksilere rağmen C++’ın rahatsızlıkları eğlenceyi bozacak düzeyde değil; C++, geçmişteki açılı parantez ve pointer merkezli dil imajından farklılaştı
  • FTXUI GUI layout kodu, C++ olduğu bilinmese başka bir dil gibi görünecek kadar modern sözdizimi gösteren bir örnek

1 yorum

 
GN⁺ 2024-12-25
Hacker News yorumları
  • C++ nefretçisi sayılırım, ama bunun nedeni güvenilirlik gerektiren iş kodlarında ve tamamen güvenmesi zor iş arkadaşlarıyla birlikte C++ ile uğraşmaktan hoşlanmamam
    Kişisel projelerde ise şimdiye kadar denediğim kodlama ortamları arasında en tatmin edici olanlardan biriydi; yürütmeyi son derece ince ayrıntısına kadar kontrol edebilmek gerçekten heyecan verici
    Yaklaşık 10 yıl önce C++'ı bıraktım ve geri dönmeyi düşünmüyorum; ama bugünlerde projelerimde uzun vadeli güvenilirlik en önemli şey olduğundan Rust + CI/CD tam uyuyor
    Yine de bir programın tam da benim amaçladığım şekilde çalışması için onu tasarlayıp uygulamanın, bunun da benim uzmanlığım ve içgörüm sayesinde olduğunun verdiği o heyecanı özlüyorum
    Birlikte çalıştığım insanların böyle bir motivasyonla hareket etmesini ister miyim, kesinlikle hayır; ama kişisel olarak unutulmaz bir keyif
    Build sistemleri ve paket yönetimi kâbus gibi, önişlemci sadistçe bir şaka gibi, sözdizimi berbat ve runtime tarafında kendi ayağını makineli tüfekle taramamak için yılların deneyimini gerektiren çok fazla tortu var
    Ama bir anlamda bu acılar, zekâ ve kanlı gözyaşıyla sarıp sarmaladığın çalıştırılabilir dosyayı sonunda çıkarmanın sevincini daha da büyütüyor

    • C++ hakkında okuduğum tasvirler içinde en çok katıldıklarımdan biri
      C/C++'ı birkaç yıl işte kullandım ve geri dönmek istemiyorum
      Başkalarının kodunu debug etmek, muğlak entegrasyon sorunları yaşamak ve build sistemi spagettisi döndürmekle çok fazla zaman harcadım
    • İş de kişisel projeler kadar eğlenceli olmalı
      Son 10 yılda teknoloji sektörünün bu düşünceyi kaybettiğini düşünüyorum; bunda da en iyi insanları iyi yemeklerin ve yumuşak sandalyelerin olduğu yetişkin hapishanelerine koyan büyük teknoloji şirketlerini suçluyorum
      Startup'lar da daha az eğlenceli hale geldi; VC sektörü dar bir düşünce penceresini teşvik ettikçe aynı şeyi yapan kopya startup'lar ve modalar çok arttı
      Her yeni projede C++ kullanmamın nedeni, doğrudan yapmam gerektiğinde yapabileceğime dair güvenim olması
      Framework'ler, özellikle projenin çekirdeğiyle uğraşırken, çoğu zaman istediğim şekilde davranmıyor; bu yüzden sürekli kullanmak istemiyorum
      Kendin yapabiliyorsan kendin yaparsın, yapamıyorsan framework kullanırsın
      Kendin yapabiliyorsan C++, her şeyi yapabilen ve önemli şekillerde yoluna çıkmayan harika bir araç
      Rust gibi diller tehlikeli bir şey yaptığımı söyleyip şikâyet edebilir, ama C++'ta kafamdaki modeli doğrudan ifade edebilirim
      Bazen pointer'larla düşünürsün ve pointer'lar gerçekten iyi araçlardır
      Eğlenceyi geri kazanalım; sadece kişisel hayatta değil, işte de
  • Bu yazı biraz dağınık görünüyor
    Pek çok noktaya değiniyor ama bunların neden C++'ın daha eğlenceli ya da daha az eğlenceli olduğu sonucuna vardığını çıkarmak zor
    Modern C++'ı son derece yüksek kaliteli diye nitelerken aynı anda yaygın legacy sorunlardan ve korkunç araçlardan bahsetmesi de kafa karıştırıcı
    unique_ptr harika derken RAII'den gerçekten nefret ettiğini söylemesi ve metaprogramlamanın eskiden her yerde olduğu ama artık olmadığı gibi iddiaları da tuhaf
    conceptsa bakınca bunun öyle olmadığı görülüyor; C++'ın en iyi grafik kütüphanelerine sahip olduğu veya Python kurulumunun C++'tan daha zor olduğu gibi sözler de ana argümanla pek ilgisi olmayan yazar takıntıları gibi görünüyor
    Sonuçta yazar, kişisel etkenlerin karmaşık bir birleşimi nedeniyle C++'ı eğlenceli buluyor gibi; bunun kendisi sorun değil
    Performansı ve teknik karakteri nedeniyle C++ ile en keyifli programlamalarımı yaptığım oldu, ama pratik yazılım geliştirmede bildiğimiz sayısız nedenle C++ pek iyi değil
    C++, onlarca yıllık legacy ve siyasetten yaralanmış, derinden çelişkili bir dil; C++ gerçekliğini görmezden gelmek de C++ tartışmalarındaki en büyük hata
    Bugünlerde C++'a karşı tavrım daha çok yorgunluk; son yıllarda C++'ın önüme çıkardığı engellerin üzerinden artık atlamak istemiyorum
    Zaten çoktan ölmüş bir atı dövmeye devam etmeye gerek yok; C++'ı C++ olarak bırakmak yeterli

    • O cümlenin yazının özünü iyi özetlediğini düşünüyorum
      Bana göre yazı dağınık olmaktan çok, yazarın keyif aldığı ve bu keyfi olabildiğince paylaşmaya çalıştığı bir yazı
      Düzgün bir fikir yazısından ziyade, aktif biçimde ikna etmeye çalışan bir metin değil; daha çok “ikna edilmene gerek kalmadan sana hitap ediyorsa, sen de eğlenebilirsin” gibi
      Ticari işlerde gerçeklikle hırpalanıp yorulmuş biriysen bunun anlamsız gelmesini de tamamen anlayabilirim
      Ben de bugünlerde nedense JavaScript kullanırken çok eğleniyorum; benzer bir yazı yazsam, son 10 yılda ticari JavaScript'ten bıkmış birine aynı şekilde kötü görünebilir
      Yine de yazarın keyif alması ve bu keyfi paylaşmayı seçmesi sevindirici
  • Bir C++ projesinde üçüncü taraf bağımlılığı Linux/Windows/macOS'ta çalışacak şekilde statik linklemek için 3 gün harcadım
    O paket conan/vcpkg'de yoktu; yalnızca tuhaf bir Makefile/cmake karışımı olan bir GitHub deposu vardı
    cmake/cpp uzmanı olmaktan çok uzağım, ama çoğu modern dilde pip install, cargo add, npm install, go get gibi yollarla bu sorun olmaz
    C++ semantiğinin ayrıntılarını bir kitabı baştan sona okuyarak öğrensen bile, gerçek bir projede çalışmak hâlâ acı verici

    • JavaScript'in bağımlılıkları ve build toolchain'i de en karmakarışık Makefile kadar anlaşılması zor
      Sonunda JavaScript sürümü autotools gibi bir şeye varmış olmamız şaşırtıcı
    • Özellikle neyin zor olduğunu merak ediyorum
      Başkasının kodunu statik build etmek ya da başka platformlarda build edilecek hale getirmek bazen uğraştırıcıdır, ama linkleme tarafı genelde include dizinleri, kütüphane yolları ve kütüphane belirtmekten ibarettir
    • Tersinden bakarsak, bu üçüncü taraf şeyi başka “modern” dillerde kullanmak istesen ne daha iyi olurdu, emin değilim
      Birisi vcpkg/conan paketlemesini yapmadıysa pip/cargo/npm'de de olmama ihtimali yüksek
      C++'ta zorlandıysan başka dillerde çok daha zor olabilir
      Yine de tarihsel C++'ın bazı kısımlarının, özellikle build hikâyesinin, çok kötü durumda olduğu burada da ortaya çıkıyor
      Yalnızca vcpkg'ye girmiş olsa kurulum zorluğu diğer ekosistemlerle birebir benzer hale gelir
  • Düzenli olarak C yerine C++ ile çalışmayı deniyorum; her seferinde benzer bir kalıp oluyor
    Yeni bir C++ tekniği öğreniyorum, bir şeylerin daha iyi olacağını düşünerek kod yazıyorum, derleyici hatasıyla karşılaşıyorum ve günün kalanını neden istediğim şeyi yapamadığımı öğrenmeye harcıyorum
    Genelde C++14 ile sınırlı kalıyorum ve bazı sorunlar sonraki sürümlerde düzeltilmiş olsa da durum yine de böyle
    C++'ı gerçekten sevmek istiyorum; teoride üretkenliği artıracak daha güçlü bir C sunuyor ama sonunda bilişsel yük o kadar fazla oluyor ki çoğu zaman “sınıflı C” yazıp geçiyorum

    • Öğrenmenin eğlenceli olduğu bir aşama var ve özgün yazının yazarı hâlâ oradaymış gibi görünüyor
      2003'te gerçek zamanlı C++'ı çok kullandım ve nefret ettim, ama geçen yıl kodun çoğunu C++ ile yazarken sonunda sevmeye başladım
      lambda'lar ve auto, C++'tan nefret etmememi sağlayan dönüm noktasıydı
      Şablonları da biraz kullandım ama çoğunlukla aynı fonksiyonun varyantları için bir sürü dal yazmamak içindi
      Lambda'lar sayesinde, SICP havasındaki Lisp ailesinden hocalardan ilk öğrendiğim şekilde kod yazabilir oldum
      unique_ptr kullanınca tahsisler de rahatsız edici gelmedi
    • Yeni bir özelliği öğrenen birinin sırf onu kullanmak istediği için yazdığı çok kötü kod gördüm
      Böyle yapmayın; önce kodu nasıl kullanacağınızı düşünün, sonra bir özellik sorunu çözüyorsa onu kullanın
      Sorun → çözüm olmalı, tersi değil
      Örneğin C++ şablonları genel olarak berbattır ama derleme zamanı duck typing ya da sizeof() tabanlı otomatik padding ekleme gibi şeyler bazen çok kullanışlıdır
    • Benim C++ deneyimim de tam olarak böyleydi
      Başta bir C# programcısı olarak gömülü bir proje yüzünden C öğreniyordum; akış birebir aynıydı
      C++'ta, uygulamayla tam örtüştüğünde güçlü görünen pek çok havalı özellik var
      Ama ne zaman yeni bir özellik denesem, yapmak istediğim şey her zaman o durumda çalışmayan bir uç durum oluyordu; saatlerce ya da günlerce denedikten sonra vazgeçip sadece C ile yazıyordum
    • C++ da çoğu teknoloji gibi, gerçekten öğrenmek için emek verirseniz daha iyi çalışır
      Elbette Python veya Ruby gibi bu eğilimin dışına çıkan diller de var
    • ChatGPT veya Copilot bu konularda çok yardımcı oluyor
      Genelde hata metnini kopyalayıp ona çözdürüyorum
  • C++ gerçekten eğlenceli ve insanların şikâyetlerinin büyük ölçüde bağlama bağlı olduğunu düşünüyorum
    Birçok C++ geliştiricisi dilden nefret ediyor, ama aslında bu nefretin yönü bazen yanlış oluyor
    Çoğu zaman gerçekte, yazılımı pek de iyi kullanamamış kişilerin yaptığı eski ürünlerle uğraşıyorlar
    Ben Rust'ta da benzer bir şey yaşadım; şirketin mevcut Rust projesine dahil oldum ve eski kod tabanında birbiriyle çelişen çok sayıda gelenek vardı
    Birbiriyle iyi birleşmeyen hata işleme tipleri, kötü sınıf soyutlamaları, gereksiz unsafe blokları vardı ve şimdiye kadar yaptığım projeler içinde en acı verici olanıydı
    Rust'ı suçlamak kolay, ama aslında bu sadece kötü yazılım geliştirmeydi
    C++'ta kusurlar olduğu doğru, ama insanların yaşadığı acının önemli bir kısmı, hangi dilde yazılmış olursa olsun berbat olacak kötü kodla uğraşmalarından kaynaklanıyor

    • C hariç neredeyse hiçbir başka dilde, her v[x]=y yazdığınızda keyfi bellek bozulmasını davet etmiş olmazsınız
      C++'ın std::optional'ında v boşken *v çağırırsanız bu tanımsız davranış olur
      optional'ın özü boş olabilecek bir değeri tutmaktır; optional boşken en yaygın işleme neden tanımsız davranış koyulduğunu anlamak zor
      C++'ı çok kullanmış biri olarak sorun şu: projedeki tüm programcıların zamanın %100'ünde %100 kusursuz olması gerekiyor
      Bellek denetleyicileri ve STL debug modunu çalıştırabilirsiniz, ama bunları release'te de çalıştırmıyorsanız test takımınızın aptal ya da kötü niyetli kullanıcıların yapabileceği tüm garip şeylere dokunmasını beklemeniz gerekir
      Yazılımın bu kadar önemli hâle geldiği bir çağda, Rust C++ performansına yakın görünürken, temel özelliklerinin çoğunu güvenli kullanmanın çok zor olduğu bir dili kullanmaya değip değmediğini sorguluyorum
      Üstelik giderek daha da kötüleşiyor: boş std::function çağrısı assert fırlatıyordu, ama yeni std::copyable_function bunu tanımsız davranış hâline getirdi
    • Buna katılmakta zorlanıyorum
      Tip sistemi sinir bozucu ve buna rağmen doğru düzgün bellek güvenliği de elde edilmiyor
      En can sıkıcı ayrıştırma gerçekten can sıkıcı ve pointer decay gibi C'den miras kalan tuhaflıklar da aynen duruyor
      Üstüne std::array gibi yeni çözümler ekleniyor ama eski yöntemler ortadan kaldırılamıyor
      Gerçek bir modül içe aktarma sistemini taklit etmek için hâlâ önişlemciye bel bağlamak da sorun; bu yüzden sınıf kodu düzeni veya pimpl idiomu gibi dolambaçlı çözümler ortaya çıkıyor
      Özünde kusurları o kadar büyük ve çok ki artık içindeki güzelliği bulmak zor
    • Doğru, ama dil ne kadar karmaşıksa anlaşılmaz bir karmaşa yaratmak da o kadar kolaylaşıyor
      Buna karşılık basit bir blub dili projesi, kod tabanının durumundan bağımsız olarak genellikle oldukça kolay çözümleniyor
    • Eski olsa da oldukça komik C++ FQA'ya bakılabilir: https://yosefk.com/c++fqa/
  • Birinin C++'tan keyif alması güzel ama kişisel olarak 20 yılı aşkın uğraştan sonra artık C++'ı bırakmam gerektiğini düşünüyorum
    Düpedüz darmadağın
    Gerçekten düşük seviye kontrol gerekiyorsa kusurları olsa da C ile uğraşırım; değilse Rust, Python vb. beni çok daha mutlu ediyor

    • Katılıyorum
      Yine de C++ var olmaya devam edecek
      O dille yazılmış çok fazla kod var; ayrıca öğrenmiş olmak kesinlikle iyi bir beceri ve çok para kazandıran işler de var
      Benim için dil fazlasıyla ayak bağı oluyor ve aşırı karmaşık geliyor
      “Modern C++”ın harika olduğu, eski sürümleri öğrenmeye gerek olmadığı ve her yeni sürümle daha da basitleştiği söylemini biliyorum
      Sorun, pratikte elinize geçen kod tabanının modern C++ olmaması
      Bugüne kadar çıkmış tüm özellikleri kullanıyor; zor ve tuzaklarla dolu
      Yıllarca yalnızca kendi projelerinde C++ yazmış biri bir ölçüde uzmanlık geliştirip karmaşıklığa bağışıklık kazanabilir ama gerçekten iyi bir dil değil
    • Zamanla C++'ı daha katlanılır kılan şeylerden biri, çoğu parçayı kendi düşündüğünüz şekilde davranan ve davranışı yeterince tanımlı olan uygulamalarla doğal biçimde değiştirmeyi kolaylaştırmış olması
      Temel veri türlerini, standart kütüphaneyi vb. değiştirmek gibi
      Özellikle C++20 sonrası bu alternatif temel oldukça yerel ve ifade gücü yüksek hissettiriyor
      Gördüğüm yeni C++ projelerinin önemli bir kısmı bu yönü güçlü biçimde benimsiyor
      Uygulamalar için sistem düzeyinde alana özgü dilleri kolayca oluşturabilmek C++'ın güçlü yanı
    • C++/SDL2 ile yaptığım Ultima türevi projede C++ özelliklerinden yalnızca birkaçını kullanmıştım
      Ne yazık ki tamamlayamadım ama hatırladıklarım sınıflar, std::function, std::unordered_map, std::string, std::unique_ptr civarında
      Benzer bir tarzda değilse başkasının kodunu okumayı hayal etmek zor
      Büyük ölçekli programları profesyonel olarak yazmadığım için Visitor deseni gibi programlama desenlerini aşmak en zor kısmıydı
      Keşke C++ C++11'de dursaydı
      Komite şu anda her şeyi dile koymak istiyor gibi ve C++ her niş programlama tarzını destekleyen devasa bir dil gibi görünüyor
    • C++ tamamen dağınık bir şey
      Ama eğlenceli bir dağınıklık ve C++ ile yazmayı seviyorum
      Bazen önemli olan da bu
      Rust ile ilişkim çok daha soğuk
      Rust'a saygı duyuyorum; özellikle iş gibi C++ kullanımını savunmanın zor olduğu bağlamlarda Rust'ın doğru olduğunu düşünürsem onu kullanıyorum ve Rust'ın yaptığı işin önemli olduğunu düşünüyorum
      Ama şimdiye kadar epey Rust projesi yapmış olmama rağmen yazması bana sıkıcı geliyor
      Temel açılardan daha iyi ama en azından benim için daha az keyifli
    • Rust da C ile aynı kontrol gücünü ve düşük seviye olmayı sağlamaya çalışan bir dil değil mi?
      unsafe mührünü açarsanız tamsayıları açıkça pointer'a cast edebilir ve örneğin bellek eşlemeli giriş/çıkış ile donanımı kontrol edebilirsiniz, değil mi?
  • Bu yazı kapsamı geniş, uzun bir nutuk ve sadece “C++” harfleri bile insanları tetikleyip büyük kısmının göz ardı edilmesine yol açabilir
    Ben de bazen öyleyim
    Şikâyet kısmı için “It's Not All Puppies and Butterflies” bölümüne atlayabilirsiniz
    Yazar C++11'den çok etkilenmiş; ben de neredeyse 20 yıl boyunca bilerek C++'ı görmezden geldikten sonra benzer hissettim
    Oynamalık paketler ve kütüphaneler tanıtması hoş ama yine de başka kütüphaneleri projeme dahil etmek çoğu zaman acı verici
    Tek dosyalık header'lar akla geliyor
    FTXUI ilginç
    Ve gerçekten cppreference.com muazzam
    Python belgeleri de oldukça iyi ama cppreference.com kadar iyi bir dokümantasyon görmedim

    • cppreference.com, adının söylediği gibi bir referans dokümanı olarak çok başarılı
      Python belgeleri sağa sola dağılmış, birçok yerde eksik ve tutarlı bir editoryal üslup da yok
      Ancak Diataxis çerçevesi açısından yalnızca referans dokümanlarını değil, birkaç farklı doküman türünü de oldukça iyi kapsıyor
      O dokümanları yazanlar bu çerçeveyi açıkça dikkate alarak iyileştirme yönü arıyor
      Yine de neredeyse kod geliştirme gibi işleyen, gönüllülere dayalı bir açık kaynak çalışması
    • Okulda ve üniversitede C++ öğrendikten sonra işte hemen Python/JavaScript'e geçtim; bu yazı sayesinde bilmediğim birçok C++ konusunu tamamladım
      Bir süredir “sisteme daha yakın” olmak istiyordum ve bir yandan Rust öğrenmek de kolay değildi
      Bu yazıyı görünce C++'ı yeniden öğrenirsem bunun mümkün olabileceğine dair umutlandım
      Merhaba CMake… yoksa belki de Meson demeliyim
  • Yetenekli bir ekip modern C++'ı iyi kullanmayı biliyor ve yeni bir projeye başlıyorsa C++'ın harika olduğuna katılıyorum
    Keyifli ve güçlü bir dil; performansı iyi ve karmaşık olsa da debug etmek ve optimize etmek görece anlaşılır
    Yaklaşık 5 yıllık bir kod tabanında çalışma fırsatım olmuştu; C++11 sonrası standartlara göre yazılmıştı ve yazıda söylenen birçok nedenle çok keyifliydi
    Buna karşılık 20-30 yıl boyunca evrilmiş eski bir kod tabanı ya da yetkin kişilerce bakımı yapılmamış bir kod tabanıysa deneyim bambaşka olur

    • Geliştiriciliğe PHP ile başladım; özel veri tipleri için eklentiler içeren özel WordPress temaları yaparak işi iş başında öğrendim
      21 yaşındayken şirket okul ücretimi ödemeyi teklif etti, ben de bilgisayar mühendisliği lisans programına geri döndüm; sonra bilgisayar bilimine geçtim
      “Programlamaya Giriş” dersinin ilk gününde C++'a dokunduğum anda âşık oldum
      O sırada kullandığım PHP 7'ye kıyasla tip sistemi, debug etme ve ekosistem harikaydı
      Müdürümün izniyle mevcut intranet uygulamalarının bir kısmı için C++ tabanlı API'ler oluşturdum; PHP bunları websocket üzerinden çağırıyordu ve tip sistemiyle performanstan yararlanabiliyordum
      O sistemler hâlâ şirket genelinde her gün kullanılıyor ve bakımları da sorun olmadı
      Üstelik IBM Pase for i gibi oldukça tuhaf bir ortamda çalışıyor olmalarına rağmen
      Şimdi Rust ve Axum'u denedikten sonra böyle API'ler yaparken Rust ekosistemini çok daha fazla tercih ederim ama C++ da hakkını vermeyi hak ediyor
      Özellikle TypeScript olmayan JavaScript ya da PHP gibi web dillerinden geliyorsanız gerçekten harika bir dil
    • 20-30 yıl boyunca evrilmiş ya da yetkin kişilerce bakımı yapılmamış eski bir kod tabanı koşulunda, korkunç olmayacak başka bir dil aklıma gelmiyor
      Aslında aklıma gelen birkaç olasılığa, örneğin C, Java, Fortran'a kıyasla C++'ı tercih ederdim
      İstisna C# olabilir ama o koşula girecek kadar eski sayılır mı bilmiyorum
  • C++’a yerleşik düzenli ifadeler geldiği ve oldukça iyi olduğu söylenmiş olsa da, std::regex için iyi demek zor
    Performansı kötü ve Unicode desteği de yetersiz olduğu için genel olarak kaçınmak daha iyi

    • Şirketimizde kullandığımız linter da std::regex kullanılmamasını zorunlu kılıyor
    • Performans düşüşüne yol açan spesifikasyondan kaynaklanan bir sorun olup olmadığını merak ediyorum
  • C++ öğrendim ve keyif de aldım ama derinine inmedim
    C’yi her zaman daha çok sevdim; zaten Dune oyun motoru veya Unix yardımcı araçları gibi, C’yi daha iyi öğrenmek için okunabilecek en üst düzey kod tabanları da çok
    Son zamanlarda Rust’a biraz dokununca C++ kullanmak için güçlü bir neden pek göremiyorum
    Fonksiyonel programlamadan ilham alan güçlü tip sistemi ile performansın birleşimi yenmesi zor görünüyor; neredeyse mükemmel bir dil gibi
    Yine de C++ kullanmayı gerektiren eskiye dönük nedenler mutlaka vardır
    Oyun motorları, gömülü programlama ya da başka türden legacy bağımlılıklar gibi şeyler olabilir

    • İşte C++ ile Rust arasında gidip gelerek çalışıyorum; açıkçası modern C++20/23’te, Rust’ı neredeyse kopyalayarak birçok acı noktası düzeltiliyor
      Yeni bir C++ kod tabanıysa oldukça temiz hâle getirilebilir
      Ama bu noktada yeni bir yazılımı neden C++ ile yapacağını pek anlayamıyorum
      C++’ın sinir bozucu çok yanı var
      Kütüphane/paket yönetimi standart değil, header’lar kod tekrarı, standart kütüphane uygulamaya göre değişiyor ve neredeyse okunması zor
      Standartta tuhaf davranışlar var; insanlar tanımsız davranışa yaslanıyor ama bunun farkında olmuyor, atamadan önce kullanım sorunları var; sahiplik sorunları ve hatalı referans sayımı yüzünden bellek sızıntıları incelikli biçimde ortaya çıkıyor
      Her şeyi varsayılan yapmak yerine const yapmanız gerekiyor; noexcept garantisi vermek için çağırdığınız her şeyin istisnalarını kontrol etmeniz gerekiyor; standart kütüphane işlemlerindeki hataları okumak zor
      Nesne yönelimliliği ağır basan kod fiilen teknik borç
      C++’ın LSP’si, Rust’taki gibi soyut sözdizimi ağacını kontrol ederek tanımı bulan yapısal bir yöntem kullanmadığından gezinme ve kod tabanını kavrama yavaş
      Rust nostd’yi birinci sınıf olarak açıkça destekliyor; C++’ta ise standart kütüphaneyi kapatmak için derleyiciye özgü bayraklar gerekiyor ve bunu doğru yapıp yapmadığınızı doğrulamak zor
      Bu yüzden gömülü sistemler nedeniyle C++ kullanıldığı argümanı bana pek ikna edici gelmiyor
      Rust’ta bevy gibi oyun motorları da var ama hâlâ yeni; isterseniz Godot scripting’e Rust da bağlayabilirsiniz
      Düşük seviyeli ses işleri de Rust’ta aynı derecede kolay ve tek bir crate ile çapraz platform yönetimi mümkün
      Genel olarak meselenin özünün legacy kod ve değişime karşı tereddüt olduğunu düşünüyorum
    • Legacy yalnızca C++ ile yazılmış uygulamalarla sınırlı değil; birçok boyutta devasa
      Kullanıcı sayısı, yayımlanmış ve erişilebilir bilgi ve kaynaklar, kitaplar, dersler, bloglar, yazılar, videolar, yazılım kütüphaneleri ve bir başka devasa dil olan C ile yüksek uyumluluk da buna dahil
      Bu alanda birkaç yıldan fazla bulunmuş biri için bu, yazılım sektörünün genel bilgisi sayılır
      Ben C++’ı çok kullanmış değilim, bu yüzden düzgün bir acemi bile sayılmam zor; ama eskiden dilin yaratıcısı Bjarne Stroustrup, Scott Meyers ve benzerlerinin klasik C++ kitaplarını satın alıp okumuş ve bir ölçüde anlamıştım
      Ancak C’yi, başarılı ticari ürünler de dahil olmak üzere yıllarca production’da çok kullandım
      https://www.stroustrup.com/applications.html
      https://www.stroustrup.com
      https://en.m.wikipedia.org/wiki/Bjarne_Stroustrup
      https://en.m.wikipedia.org/wiki/Scott_Meyers
    • Düşük gecikme gerektiğinde ama doğruluk pek umursanmadığında C++ mantıklı
      Bu yüzden oyun geliştirmenin C++’ta en uzun süre kalacağını düşünüyorum
      Kullanıcıların %0,001’inde oyun segmentation fault yüzünden çökse ne olacak ki, deniyor
    • Yüksek frekanslı alım satım da bir olasılık