3 poin oleh GN⁺ 2026-02-09 | 1 komentar | Bagikan ke WhatsApp
  • Semua game dalam proyek pribadinya dikembangkan dengan ‘pure C’, pilihan yang kini tergolong langka
  • Kriteria utama dalam memilih bahasa adalah keandalan, portabilitas, dan keberlanjutan jangka panjang, sehingga tidak bergantung pada OS atau platform tertentu
  • Ia menekankan kesederhanaan dan kecepatan kompilasi, serta pemeriksaan tipe yang ketat dan sistem peringatan yang kuat
  • Bahasa alternatif seperti C++, C#, Java, Go, dan Haxe telah dipertimbangkan, tetapi dinilai kurang cocok karena kompleksitas, GC, pemaksaan OOP, dan alasan lain
  • C berbahaya tetapi sederhana dan cepat, dan tetap menjadi pilihan terbaik berkat dukungan platform yang luas serta ekosistem library yang kokoh

Kriteria Memilih Bahasa

  • Syarat yang paling penting adalah keandalan dan stabilitas, agar tidak membuang waktu untuk bug yang bukan ia buat sendiri
    • Di masa lalu ia mengembangkan game berbasis Flash, tetapi setelah Flash meredup ia ingin fokus membuat game baru alih-alih memindahkan semuanya ke platform baru
    • Agar tidak terikat pada OS tertentu dan tetap membuka kemungkinan pengembangan untuk console, ia mengutamakan portabilitas dan dukungan library serbaguna
  • Untuk syarat yang diinginkan, ia memilih sintaks yang sederhana dan struktur yang mudah diingat
    • Ia ingin menghindari proses terus-menerus mencari API atau fitur bahasa yang kompleks
  • Ia ingin mengurangi bug melalui pemeriksaan tipe yang ketat, peringatan yang kuat, dan analisis statis, serta memudahkan pencarian masalah dengan debugger yang baik dan alat analisis dinamis
  • Kecepatan kompilasi dianggap sangat penting
    • Waktu tunggu yang panjang merusak fokus dan menurunkan produktivitas
  • Ia bersikap skeptis terhadap object-oriented programming (OOP), dan lebih menyukai pendekatan memisahkan data dan kode lalu menanganinya sesuai konteks

Evaluasi Bahasa Alternatif Utama

  • C++
    • Masih menjadi standar dalam pengembangan game, tetapi dianggap kurang memuaskan karena kompleksitas dan kecepatan kompilasi yang lambat
    • Meski menawarkan performa tinggi dan beragam fitur, ada banyak fitur yang tidak diinginkan dan biaya kompleksitasnya besar
  • C# dan Java
    • Bertele-tele dan kompleks, serta kurang fleksibel karena struktur yang sangat berpusat pada OOP
    • Sebagai bahasa tingkat tinggi, keduanya menyembunyikan kompleksitas, tetapi tidak mencegah masalah mendasar
  • Go
    • Dinilai positif sebagai reinterpretasi modern dari C, tetapi stop-the-world garbage collection tidak cocok untuk pengembangan game
    • Ada juga kekhawatiran soal kurangnya library game dan keberlanjutan jangka panjang
  • JavaScript
    • Terasa tidak stabil karena perubahan cepat di lingkungan pengembangan web dan berakhirnya Flash
    • Karena sintaks yang longgar, bahasa ini dinilai tidak cocok untuk menulis software berskala besar
  • Haxe
    • Dinilai menjanjikan untuk pengembangan web, tetapi ada kekhawatiran soal keberlanjutan karena relatif masih baru
  • Membuat bahasa sendiri
    • Ini ide yang menarik, tetapi dianggap tidak realistis karena harus meninggalkan library yang sudah ada dan menanggung beban menjaga kompatibilitas

Alasan Memilih C

  • Sebagai bahasa yang berbahaya tetapi bisa diandalkan, C dapat tetap stabil bila digunakan dengan hati-hati berkat strukturnya yang sederhana
    • Ia mengibaratkannya seperti “pisau tajam”: sulit digunakan, tetapi menjadi alat yang kuat jika sudah dikuasai
  • Kecepatan kompilasinya sangat tinggi, dan dapat berjalan di hampir semua platform
    • Proses porting juga relatif sederhana, dan keberlanjutan jangka panjangnya tinggi
  • Dukungan library dan tooling sangat kuat dan terus dipelihara
  • Secara pribadi, ia sudah punya banyak pengalaman dengan kode ‘pure C’, jadi merasa akrab dengannya
  • Ia tidak menyarankan orang lain memakai C, karena ini adalah pilihan yang dioptimalkan untuk selera pribadi dan cara kerjanya sendiri

1 komentar

 
GN⁺ 2026-02-09
Komentar Hacker News
  • Saya kebanyakan menulis kode dengan gaya C, lalu hanya memakai fitur C++ saat benar-benar perlu
    Jadi sekilas kadang malah terlihat seperti kode Rust
    Orang yang bilang menulis game dengan C sering tidak suka fitur C++, tetapi pada akhirnya tetap mengimplementasikan sendiri antarmuka virtual atau membuat switch raksasa untuk melakukan hal yang mirip
    Menurut saya, kalau tidak mau memakai fitur yang ada di bahasa itu, ya jangan dipakai; mengeluhkan keberadaannya sendiri tidak terlalu berarti
    C++ tidak lambat untuk dikompilasi kalau template tidak disalahgunakan

    • Itu mungkin berlaku saat bekerja sendiri, tetapi pada proyek jangka panjang yang dirawat tim, situasinya berbeda
      Seiring waktu anggota tim dan pemimpin berganti, himpuan fitur yang dipakai makin membesar
      Sekali bertambah, sangat sulit menguranginya lagi
      Selain itu, bisa jadi Anda harus memakai library yang menggunakan fitur yang tidak Anda inginkan
      Misalnya, saya tidak suka pemanggilan implisit (destruktor, operator overloading, dan sebagainya), tetapi kalau library memakainya, pada akhirnya saya harus ikut menyesuaikan
    • Setidaknya switch masih bisa dibaca
      Salah satu hal terburuk dari C++ adalah terlalu banyak kode tersembunyi yang dihasilkan otomatis
    • Dynamic dispatch di C++ bekerja dengan menempelkan vtable ke semua tipe
      Meski sebagian besar kode menangani tipe konkret (Goose, Duck, dan sebagainya), semua objek tetap membawa pointer vtable
      Sementara itu Rust hanya memakai vtable di tempat yang memang perlu, sehingga menghemat memori
      Programmer C mengimplementasikan sendiri hanya fitur yang dibutuhkan, jadi tidak terlalu terikat pada struktur yang dipaksakan bahasa
    • C++ tetap lambat meski tidak menyalahgunakan template
      Hanya dengan meng-include <vector> saja, puluhan ribu baris kode ikut masuk
      Karena itu, kalau tidak memakai standard library, akan muncul debat “kenapa menciptakan ulang roda”
      Kalau perdebatan seperti ini terus berulang, rasanya jauh lebih mudah kembali ke C saja
      Saya sendiri beralih ke C sekitar 2017, dan sampai sekarang tetap lelah tiap kali harus memakai library C++
      Satu pengecualian adalah Dear ImGui, tetapi bahkan untuk itu pun saya lebih suka binding C
    • Saya pernah benar-benar menulis file C++ tanpa memakai satu pun fitur C++
      Setelah ekstensi file diubah menjadi .c, waktu kompilasi turun setengahnya
  • Saya suka sifat C yang kasar dan sederhana, meski saya tidak suka preprocessor
    Karena itu Zig terasa seperti anugerah — lebih sederhana daripada C tetapi dengan desain bahasa yang lebih presisi
    Misalnya, Zig membedakan pointer tunggal dan pointer array
    Anda bisa mengimpor library C lalu membuatnya lebih nyaman dipakai, yang sangat berguna dalam pengembangan game
    Kebanyakan library C++ juga menyediakan header C
    zig-gamedev punya banyak library C yang sudah di-Zig-kan seperti ini
    Dibanding preprocessor, fitur comptime di Zig jauh lebih baik, dan pada dasarnya hanya “kode Zig yang dijalankan saat waktu kompilasi”

    • Namun dalam praktiknya, terlalu sedikit library C++ yang benar-benar mengekspor header C
  • Saya juga setuju dengan penulis
    Alasan terbesar untuk menyukai sebuah bahasa adalah kesederhanaannya
    Karena itu saya menyukai bahasa seperti C, Go, Odin, dan Zig
    Namun bahasa yang bisa menangani kompleksitas yang memang dibutuhkan secara elegan juga penting
    Untuk kode jaringan yang membutuhkan keamanan memori, konkurensi, dan pola fungsional, Rust terasa alami
    Sebaliknya, untuk kode yang sederhana dan cepat seperti game indie, C atau Odin terasa pas
    Odin terasa seperti gabungan kesederhanaan Go dan performa C, jadi saya merekomendasikannya
    Membuat game dengan Raylib juga mudah

    • Menariknya, saya sering menjelaskan Zig sebagai titik tengah antara Go dan C
      Saya penasaran apakah Anda merasa Odin lebih cocok berada di posisi itu dibanding Zig
    • Sebagai catatan, nama bahasanya adalah Go, sedangkan golang hanyalah nama domain
  • Di tulisan asli disebutkan dukungan library game untuk Go kurang memadai, tetapi itu tampaknya tulisan sekitar 2015
    Bisa jadi sekarang situasinya sudah berbeda

    • Ada snapshot dari Januari 2016 di Wayback Machine
      Di sana juga bisa dilihat tangkapan layar game-game yang dibuat saat itu
      Misalnya Knossu punya gaya 3D yang unik
  • Membuat game dengan C pada 2026 mungkin agak gila, tetapi saya juga melakukannya
    Misalnya saya mengembangkan Chrysalis dengan C (memakai GLFW3 dan FMOD)

    • Saya sudah 2 tahun menangani codebase Jedi Academy (C & C++)
      Basisnya idTech3, dan sistem pertarungannya begitu presisi sehingga perubahan kecil saja bisa merusak seluruh balance
      Bahkan menambahkan satu i++ saja bisa mengubah timing
      Karena itu kami masih memakai compiler berusia 22 tahun yang sama
      Ada fork yang sudah dimodernisasi, tetapi rasanya berbeda dari aslinya
      idTech3 benar-benar menunjukkan esensi C sebagai engine
  • Ribuan game telah ditulis dengan C, dan API grafis seperti OpenGL, Vulkan, dan DX juga semuanya berbasis C
    Jadi ini sama sekali tidak aneh
    Sebagian besar game engine juga ditulis dalam C/C++

    • API Khronos berbasis C, DirectX berbasis COM/WinRT C++, dan Metal adalah campuran Objective-C dan C++
      Konsol berbeda-beda tiap generasi
    • SDL3 juga ditulis dalam C, dan versi terbaru Box2D juga ditulis ulang dalam C
    • DirectX adalah C++, dan sebagian besar game engine juga C++
      Tidak seperti pemrograman Linux, pengembangan game sudah berpusat pada C++ selama lebih dari 30 tahun
  • Pada dasarnya saya pecinta C
    Saya sudah memakainya dengan baik selama puluhan tahun, tetapi mengelola kode C dalam tim memang terasa makin menyakitkan
    Selain itu, kecepatan pengembangannya lebih lambat dibanding bahasa modern
    Meski begitu, daya tarik kesederhanaannya tetap kuat

    • Saya penasaran kenapa codebase C terasa lebih menyakitkan untuk kerja tim
      Dalam pengalaman saya, C justru lebih tidak menyakitkan daripada C++
    • “Katakan lebih sedikit dan maknanya lebih banyak” — intinya adalah keringkasan
    • Pada 2025 saja, kernel Linux diikuti 2.134 developer
      Fakta itu melemahkan argumen tentang batas kolaborasi C
  • Kalimat “tidak ada yang membuat game dengan C” itu berlebihan
    Memang sekarang bukan arus utama, tetapi masih banyak orang membuat game dengan C

    • Ungkapan seperti “tidak ada” atau “semua” biasanya bukan makna absolut
      Anda hanya pengecualian, dan secara statistik pernyataannya tetap benar
  • Saya suka C
    Saya bisa sepenuhnya mengendalikan manajemen memori dan mendapatkan perilaku yang dapat diprediksi
    Ini sangat berguna terutama di lingkungan seperti aturan MISRA yang menuntut alokasi di muka
    C juga bagus untuk menangani exception atau error di level hardware secara langsung
    Menulis unit test juga mudah

  • C punya hambatan masuk yang rendah, tetapi pengetahuan manajemen memori tetap wajib
    Saat saya yang seorang developer Java harus cepat membuat connector dalam situasi yang hanya memberi .h dan .so, saya memilih C daripada C++
    Jika C adalah pisau yang tajam, maka C++ seperti pilar pisau berputar — lengah sedikit langsung terluka
    Namun pemrosesan string di C terlalu menyakitkan, jadi saya ingin meminjam sistem string milik C++

    • Hal bagus dari C++ adalah Anda tidak perlu memakai fitur yang tidak Anda inginkan