3 puan yazan GN⁺ 2026-02-09 | 1 yorum | WhatsApp'ta paylaş
  • Kişisel projelerindeki tüm oyunları "saf C" ile geliştiriyor; bu da bugünlerde nadir bir tercih
  • Dil seçimindeki temel ölçütler güvenilirlik, taşınabilirlik ve uzun vadeli sürdürülebilirlik; belirli bir OS veya platforma bağımlı değil
  • Basitlik ve hızlı derleme hızı ile sıkı tip denetimi ve güçlü uyarı sistemine önem veriyor
  • C++·C#·Java·Go·Haxe gibi alternatif dilleri değerlendirmiş, ancak karmaşıklık, GC, OOP dayatması gibi nedenlerle uygun bulmamış
  • C, tehlikeli ama basit ve hızlı; geniş platform desteği ve sağlam kütüphane ekosistemi sayesinde hâlâ en iyi seçenek

Dil seçimindeki ölçütler

  • Temel şart güvenilirlik ve istikrar; amaç, kendisinin yaratmadığı hatalara zaman harcamamak
    • Geçmişte Flash tabanlı oyunlar geliştirmiş, ancak Flash'ın gerilemesi nedeniyle yeni platformlara port etmek yerine yeni oyun yapımına odaklanmak istiyor
    • Belirli bir OS'e bağlı kalmamak ve konsol geliştirme olasılığını açık tutmak için taşınabilirlik ve genel amaçlı kütüphane desteğini önemsiyor
  • Arzu edilen koşullar arasında basit sözdizimi ve hatırlaması kolay bir yapı var
    • Karmaşık API'leri veya dil özelliklerini sürekli araştırma ihtiyacından kaçınmak istiyor
  • Sıkı tip denetimi, güçlü uyarılar ve statik analiz ile hataları azaltmak; iyi bir debugger ve dinamik analiz araçlarıyla sorunları kolayca bulmak istiyor
  • Derleme hızını çok önemli görüyor
    • Uzun bekleme süreleri odağı bozuyor ve üretkenliği düşürüyor
  • Nesne yönelimli programlamaya (OOP) şüpheyle yaklaşıyor; veriyi ve kodu ayırıp duruma göre ele alan bir yaklaşımı tercih ediyor

Başlıca alternatif dillerin değerlendirilmesi

  • C++
    • Oyun geliştirmede hâlâ standart olsa da, karmaşıklığı ve yavaş derleme hızı nedeniyle tatmin edici değil
    • Yüksek performans ve çeşitli özellikler sunuyor, ancak istemediği çok fazla özellik var ve karmaşıklık maliyeti yüksek
  • C# ve Java
    • Ayrıntıcı ve karmaşık; güçlü OOP merkezli yapıları nedeniyle esneklikleri düşük
    • Yüksek seviyeli dil özellikleri karmaşıklığı gizliyor, ancak temel sorunları ortadan kaldırmıyor
  • Go
    • C'nin modern bir yeniden yorumu olarak olumlu değerlendiriyor, ancak stop-the-world garbage collection oyun geliştirme için uygun değil
    • Oyun odaklı kütüphanelerin azlığı ve uzun vadeli sürdürülebilirlik konusunda endişeleri var
  • JavaScript
    • Web geliştirme ortamının hızlı değişimi ve Flash'ın sona erişi nedeniyle istikrarsız hissettiriyor
    • Gevşek sözdizimi nedeniyle büyük ölçekli yazılım yazmaya uygun olmadığını düşünüyor
  • Haxe
    • Web geliştirme için umut verici buluyor, ancak görece yeni bir dil olması nedeniyle sürdürülebilirliğinden endişe ediyor
  • Kendi dilini geliştirmek
    • Cazip bir fikir, ancak mevcut kütüphanelerden vazgeçme ve uyumluluğu sürdürme yükü nedeniyle gerçekçi bulmuyor

Neden C'yi seçiyor

  • Tehlikeli ama güvenilir bir dil; basit yapısı sayesinde dikkatli kullanıldığında istikrarlı
    • Bunu “keskin bir bıçak”a benzetiyor; kullanması zor ama ustalaşınca güçlü bir araç olduğunu vurguluyor
  • Derleme hızı çok yüksek ve neredeyse tüm platformlarda çalışabiliyor
    • Port etme süreci de görece basit ve uzun vadede sürdürülebilirliği yüksek
  • Kütüphane ve tooling desteği güçlü ve istikrarlı biçimde sürdürülüyor
  • Kişisel olarak zaten çok sayıda "saf C" kodu deneyimine sahip olduğu için dile alışkın
  • Başkalarına C kullanmalarını önermiyor; bunun kişisel zevkine ve çalışma biçimine optimize edilmiş bir tercih olduğunu söylüyor

1 yorum

 
GN⁺ 2026-02-09
Hacker News görüşleri
  • Genelde C tarzında kod yazarım ama yalnızca gerektiğinde C++ özelliklerini kullanırım
    Bu yüzden ilk bakışta Rust kodu gibi görünebilir
    Oyunu C ile yazdığını söyleyenler, C++ özelliklerinden hoşlanmadıkları halde sonunda sanal arayüzleri kendileri uyguluyor ya da devasa switch blokları kurup benzer işi yapıyor
    Dildeki özellikleri kullanmamak mümkün; bence asıl anlamsız olan, o özelliklerin varlığından şikayet etmek
    C++, şablonlar aşırı kullanılmadıkça yavaş derlenmez

    • Tek başına geliştirirken öyle olabilir ama ekip halinde, uzun süre bakım yapılan projelerde durum farklıdır
      Zamanla ekip üyeleri ve liderler değiştikçe, kullanılan özelliklerin kümesi giderek büyür
      Bir kez büyüyen bu özellik setini yeniden küçültmek çok zordur
      Ayrıca istemediğiniz özellikleri kullanan kütüphaneleri kullanmak zorunda da kalabilirsiniz
      Örneğin ben örtük çağrılardan (destructor, operator overloading vb.) hoşlanmıyorum ama kütüphane bunları kullanıyorsa sonunda siz de uymak zorunda kalıyorsunuz
    • En azından switch blokları okunabilir
      C++'ın en kötü yanlarından biri, otomatik üretilen gizli kodun çok fazla olması
    • C++'ın dinamik dispatch mekanizması, her tipe bir vtable ekleme yaklaşımıdır
      Kodun büyük kısmı somut tiplerle (Goose, Duck vb.) çalışsa bile, tüm nesneler yanında bir vtable işaretçisi taşır
      Buna karşılık Rust, vtable'ı yalnızca gereken yerde kullanarak bellek tasarrufu sağlar
      C programcıları ise yalnızca ihtiyaç duydukları özellikleri kendileri uygular; bu yüzden dilin dayattığı yapılara daha az bağlı kalırlar
    • C++, şablonlar kötüye kullanılmasa bile yavaştır
      Yalnızca <vector> ekleseniz bile on binlerce satır kod içeri alınır
      Bu yüzden standart kütüphaneyi kullanmazsanız “neden tekerleği yeniden icat ediyorsun?” tartışması çıkar
      Bu tartışma tekrar tekrar yaşanınca insan için C'ye geri dönmek çok daha rahat oluyor
      Ben de 2017 civarında C'ye geçtim ve bugün bile C++ kütüphaneleri kullandığımda yoruluyorum
      İstisna olarak Dear ImGui fena değil ama onda bile C binding'lerini tercih ediyorum
    • Gerçekten de C++ dosyası yazıp C++ özelliklerinden hiçbirini kullanmadığım oldu
      Uzantıyı .c yapınca derleme süresi yarıya indi
  • C'nin sert ve sade yapısını seviyorum ama preprocessor'dan hoşlanmıyorum
    Bu yüzden Zig adeta bir lütuf gibi geliyor — C'den daha sade ama daha tutarlı bir dil tasarımına sahip
    Örneğin Zig, tekil pointer ile dizi pointer'ını ayırıyor
    C kütüphanelerini içe aktarıp kullanımı daha rahat hale getirebiliyorsunuz; bu da oyun geliştirmede çok faydalı
    C++ kütüphanelerinin çoğu da yanında C header'ları veriyor
    zig-gamedev içinde bu tür Zig'e uyarlanmış C kütüphaneleri çok fazla
    Preprocessor yerine Zig'in comptime özelliği çok daha iyi ve aslında sadece “derleme zamanında çalışan Zig kodu”

    • Ama pratikte C++ kütüphaneleri arasında C header dışa aktaranların sayısı çok az
  • Ben de yazarın görüşüne katılıyorum
    Bir dili sevmemin en büyük nedeni sadelik
    Bu yüzden C, Go, Odin, Zig gibi dilleri tercih ediyorum
    Ama gerekli karmaşıklığı zarif biçimde ele alan diller de önemli
    Bellek güvenliği, eşzamanlılık ve fonksiyonel kalıplar gereken ağ kodunda Rust doğal geliyor
    Buna karşılık indie oyunlar gibi basit ve hızlı kod gereken yerlerde C ya da Odin çok uygun
    Odin, Go'nun sadeliğiyle C'nin performansını birleştiriyormuş gibi hissettiriyor; tavsiye ederim
    Raylib ile oyun yapmak da kolay

    • İlginçtir, ben Zig'i Go ile C arasında bir orta nokta diye anlatıyorum
      Odin'in Zig'den daha çok o konuma uyduğunu düşünüp düşünmediğini merak ediyorum
    • Bu arada dilin adı Go; golang ise sadece alan adı
  • Orijinal yazıda Go'nun oyun kütüphanesi desteğinin zayıf olduğu söylenmiş ama bu 2015 civarında yazılmış bir metin gibi görünüyor
    Bugün durum değişmiş olabilir

    • Wayback Machine üzerinde 2016 Ocak tarihli bir anlık görüntü var
      O dönemde yaptığı oyunların ekran görüntülerini de görebilirsiniz
      Örneğin Knossu kendine özgü bir 3D stile sahip
  • 2026'da C ile oyun yapmak biraz çılgınlık sayılabilir ama ben de öyle yapıyorum
    Mesela Chrysalis'i C ile geliştirdim (GLFW3, FMOD kullanarak)

    • Ben de 2 yıldır Jedi Academy kod tabanı ile uğraşıyorum (C & C++)
      idTech3 tabanlı ve dövüş sistemi o kadar hassas ki küçük bir değişiklik bile tüm dengeyi bozuyor
      Hatta i++ eklemek bile zamanlamayı değiştiriyor
      Bu yüzden 22 yıllık derleyiciyi aynen kullanıyoruz
      Modernleştirilmiş fork'lar var ama orijinal hissi kaybetmişler
      idTech3 gerçekten C'nin özünü gösteren bir motor
  • Binlerce oyun C ile yazıldı ve OpenGL, Vulkan, DX gibi grafik API'leri de tamamen C tabanlı
    O yüzden bunda hiç garip bir şey yok
    Oyun motorlarının çoğu da C/C++ ile yazılıyor

    • Khronos API'leri C, DirectX ise C++ tabanlı COM/WinRT, Metal de Objective-C ile C++ karışımıdır
      Konsollar ise nesilden nesile değişir
    • SDL3 de C ile yazıldı ve Box2D'nin en yeni sürümü de yeniden C ile yazıldı
    • DirectX C++'tır ve oyun motorlarının çoğu da C++'tır
      Linux programlamanın aksine, oyun geliştirme 30 yılı aşkın süredir C++ merkezli ilerledi
  • Ben temelde C'yi seven biriyim
    Onu onlarca yıldır iyi kullandım ama ekip halinde C kodu yönetince acı büyüyor
    Ayrıca modern dillere kıyasla geliştirme hızı daha düşük
    Yine de sadeliğinin çekiciliği sürüyor

    • C kod tabanlarının ekip çalışmasında neden daha can yakıcı olduğunu merak ediyorum
      Benim deneyimimde C, C++'tan daha az acı vericiydi
    • “Daha az söyle, daha çok anlat” — yani mesele özlülük
    • Linux kernel'ine yalnızca 2025'te 2.134 geliştirici katkı verdi
      Bu gerçek, C'nin işbirliği sınırları iddiasını zayıflatıyor
  • “Kimse C ile oyun yapmıyor” sözü abartılı
    Bugün ana akım olmasa da hâlâ C ile oyun yapan çok insan var

    • “Kimse” ya da “herkes” gibi ifadeler genelde mutlak anlamda kullanılmaz
      Siz sadece istisnasınız; yine de o ifade istatistiksel olarak doğru kalır
  • C'yi seviyorum
    Bellek yönetimi üzerinde tam denetim kurabiliyor ve öngörülebilir davranış elde edebiliyorsunuz
    MISRA kuralları gibi önceden tahsis gerektiren ortamlarda özellikle kullanışlı
    Donanım düzeyindeki istisna ve hataları doğrudan ele almak için de iyi
    Birim test yazmak da kolay

  • C'nin giriş engeli düşük ama bellek yönetimi bilgisi şart
    Java geliştiricisi olarak, elimde sadece .h ve .so varken hızlıca bir bağlayıcı yazmam gerektiğinde C++ yerine C'yi seçtim
    C keskin bir bıçaksa, C++ dönen bıçaklardan oluşan bir sütun gibi — dalgın davranırsanız canınızı yakar
    Ama string işleme C'de fazla acı verici; bu yüzden C++'ın string sistemini ödünç almak istiyorum

    • C++'ın güzel yanı, istemediğiniz özellikleri kullanmak zorunda olmamanız