Sebuah port Go baru dari engine game klasik DOOM telah memicu diskusi menarik di antara para developer tentang posisi Go dalam pengembangan game dan perbandingannya dengan bahasa pemrograman lain. Proyek yang disebut GORE ini merupakan transpilasi lengkap dari engine game legendaris tersebut dari C ke Go, menghilangkan ketergantungan platform sambil mempertahankan pengalaman gameplay asli.
Fitur Proyek GORE:
- Platform agnostik (berjalan di mana pun Go berjalan)
- Tidak ada dependensi CGo
- Mendukung beberapa versi DOOM ( DOOM , DOOM II , Ultimate DOOM , Final DOOM )
- Aman memori dengan garbage collector Go
- Dukungan cross-compilation
- Memerlukan Go 1.24+ dan file WAD
Kesesuaian Go untuk Pengembangan Game
Respons komunitas menunjukkan sentimen yang beragam namun umumnya positif tentang penggunaan Go untuk pengembangan game. Beberapa developer mengapresiasi bahwa proyek ini mendemonstrasikan alternatif dari pendekatan tradisional C dan C++ dalam gaming. Diskusi tersebut menyoroti kemampuan kompilasi lintas platform Go dan fitur keamanan memori sebagai keunggulan signifikan dibandingkan bahasa level rendah.
Namun, percakapan tersebut juga menyentuh keterbatasan Go dalam ruang gaming. Bahasa ini saat ini masih kekurangan library grafis dan pengembangan game yang ekstensif dibandingkan dengan ekosistem yang lebih mapan. Ebitengine, yang disebutkan dalam proyek ini, tampaknya menjadi salah satu dari sedikit framework pengembangan game yang notable untuk developer Go.
Keterbatasan Saat Ini:
- Satu instance per proses karena variabel global
- Konstanta yang diekspor secara acak dari konversi C
- API eksternal terbatas untuk inspeksi state
- Beberapa blok kode unsafe yang masih tersisa
- Dukungan input terbatas dalam versi terminal
Perbandingan Bahasa dan Filosofi Desain
Perdebatan yang cukup sengit muncul seputar perbandingan Go dengan Python, dengan para developer mendiskusikan apakah Go bisa dianggap sebagai Python 4.0. Komunitas menunjukkan perbedaan fundamental antara kedua bahasa tersebut - sifat compiled Go versus pendekatan interpreted Python, dan fokus Go pada concurrency versus penekanan Python pada kemudahan penggunaan.
Go fokus pada concurrency, Python pada kemudahan melakukan hal-hal dengan kode. Banyak hal yang merupakan one-liner di Python, di Go membutuhkan cukup banyak baris atau boilerplate.
Diskusi tersebut mengungkapkan bahwa meskipun Go menawarkan fleksibilitas structural typing yang mirip dengan bahasa scripting, Go membutuhkan kode yang lebih verbose untuk tugas-tugas yang ditangani bahasa lain dengan lebih ringkas.
Implementasi Teknis dan Keterbatasan
Proyek GORE menunjukkan baik kekuatan Go maupun keterbatasan saat ini. Port tersebut berhasil menghilangkan ketergantungan CGo dan kode spesifik platform, membuatnya benar-benar lintas platform. Namun, para developer mencatat beberapa tantangan yang masih tersisa, termasuk keberadaan variabel global yang mencegah multiple game instance dan beberapa blok kode unsafe yang masih tersisa.
Pendekatan proyek dalam mentranspilasi kode C ke Go, kemudian membersihkannya secara manual, merepresentasikan jalan tengah yang menarik antara konversi otomatis dan penulisan ulang lengkap. Metode ini mempertahankan struktur game asli sambil membuatnya lebih idiomatis dengan gaya pemrograman Go.
Diskusi komunitas menunjukkan bahwa meskipun Go mungkin bukan pilihan pertama untuk pengembangan game, proyek seperti GORE mendemonstrasikan viabilitasnya untuk aplikasi gaming tertentu, khususnya yang memprioritaskan kompatibilitas lintas platform dan keamanan memori daripada performa mentah.
Referensi: GORE