Saya ingin tahu mengapa C ++ sangat populer untuk pengembangan game, dan bukan bahasa lain. Saya tahu Anda dapat membuat kode yang sangat cepat dengannya, tetapi apa sebenarnya yang membuatnya populer?
Apakah hanya karena cepat? Apakah ini fitur lain dalam bahasa ini, seperti paradigma OO atau portabilitas? Apakah karena semua perpustakaan yang telah dibuat dari waktu ke waktu? Atau kombinasi dari semua alasan ini (dan lainnya)?
Jika seseorang bisa mengisyaratkan saya tentang hal ini, saya akan sangat senang. :-)
Jawaban:
Berbagai alasan:
sumber
Ada beberapa alasan, yang ingin saya sebutkan di samping apa yang dibesarkan @Graham.
sumber
low-level
bahasa; tapihigh-level
assembler, IMO.Kecepatan mentah adalah alasan utama, tetapi sebenarnya itu bukan keputusan baik-atau jadi banyak perusahaan game mulai menggunakan bahasa lain untuk bagian-bagian dari permainan. Tugas-tugas tertentu mengharuskan komputer untuk bekerja secepat mungkin (mis. Rutin rendering inti) tetapi banyak tugas dalam kode gameplay tidak harus menjalankan semua itu dengan cepat (mis. Membuat pintu terbuka ketika pemain mengkliknya) yang berarti pintar untuk menggunakan bahasa yang lebih sederhana (dan dengan demikian lebih cepat untuk menulis program) untuk bagian-bagian itu. Itulah sebabnya banyak mesin game ditulis dalam C ++ tetapi menanamkan bahasa scripting seperti Lua untuk menulis kode gameplay.
Hal yang sulit untuk dipahami adalah bahwa ketika memilih bahasa pemrograman ada tradeoff keseluruhan antara efisiensi untuk komputer dan efisiensi untuk programmer. Artinya, mana yang lebih penting bagi Anda, seberapa cepat komputer menjalankan kode atau seberapa cepat programmer menulis kode?
sumber
Di C ++ Anda dapat mengalokasikan variabel lokal yang hilang setelah fungsi berakhir. Biasanya, ini dialokasikan pada tumpukan.
Variabel stack tidak berkontribusi pada masalah alokasi memori dinamis fragmentasi dan overhead. Mengalokasikan ruang pada tumpukan cepat dan mudah (hanya menyesuaikan pointer). Alokasi memori dinamis biasanya melibatkan pencarian wadah untuk blok memori yang memadai, menandai memori, lalu menandainya sebagai ditempati. Deallokasi melibatkan penambahan blok memori ke sebuah wadah, dan mungkin menggabungkannya dengan blok yang ada. Lebih banyak overhead daripada hanya mengubah pointer.
Java dan C # mengalokasikan memori secara dinamis, kecuali untuk tipe primitif. Bahasa-bahasa ini bergantung pada lingkungan run-time yang akan menandai variabel untuk dihapus, kemudian menjalankan pemulung secara berkala (tidak terjadwal) untuk mendapatkan kembali memori. Secara umum, programmer tidak memiliki kontrol kapan variabel akan ditandai untuk dihapus atau kapan akan direklamasi (reklamasi memori yang digunakan adalah topik lanjutan yang sebagian besar C + + dan programmer Java tidak mengalami).
Kecepatan C ++ terutama karena terjemahan langsung ke kode yang dapat dieksekusi. Java dan C # dikompilasi ke kode perantara yang kemudian ditafsirkan oleh mesin virtual. Secara umum, bahasa interpretatif lebih lambat kinerjanya daripada bahasa yang diterjemahkan secara langsung.
sumber
structs
. Lebih penting lagi, yang sangat sangat peningkatan kecil dalam kecepatan ini jaring Anda tidak hampir cukup untuk membenarkan satu bahasa atas yang lain. Alasan sebenarnya dikemukakan oleh @Graham Perks: itulah yang diharapkan diketahui oleh para pengembang game, jadi itulah yang dipelajari oleh para pengembang game baru, dan untuk apa SDK baru ditargetkan. Ada banyak bahasa (mis. Go) yang sama cepat atau lebih cepat, dan hampir tidak nyaman untuk menulis.Game pernah ditulis dalam bahasa mesin, karena mereka memiliki perangkat keras eksotis yang tidak ada kompilernya. Perangkat keras juga tidak memiliki fitur yang diterima oleh programmer C, seperti matematika integer 16-bit yang efisien.
Setelah game diselesaikan pada perangkat yang dikenal, kompiler C menjadi tersedia dan dalam waktu singkat semua game ditulis dalam C.
C ++ sepertinya ide yang bagus pada satu waktu, dan sebagian besar game adalah C ++ hari ini, tetapi insinyur sekarang bergumam tentang kembali ke C, dan itu mungkin benar-benar terjadi. Saya ingin sekali mengerjakan game di C, dan begitu juga banyak rekan kerja. Tidak ada fitur baru untuk C ++ yang saya pikir meningkatkan permainan.
Tampaknya sekarang bahwa komputer 1000x lebih cepat dari beberapa tahun yang lalu, bahasa tingkat tinggi akan mengurangi waktu pengembangan ($) membuat C usang.
Ini belum terjadi karena pembeli game tahu bahwa perangkat keras 1000x lebih baik, dan ingin menukar dolar mereka dengan game yang terlihat dan terdengar 1000x lebih baik. Ini menghilangkan slack dari sistem yang akan dikonsumsi oleh bahasa tingkat tinggi.
Persyaratan kinerja dalam gim ini brutal. Bingkai gambar baru harus dirender di bawah 33ms (atau 16ms!) Tanpa gagal. Segala yang dilakukan perangkat keras harus dipertanggungjawabkan, sehingga anggaran ini dapat dipenuhi. Bahasa apa pun yang berbunyi dan melakukan sesuatu dengan perangkat keras yang tidak dipahami atau diharapkan programmer akan membuatnya sangat sulit untuk memenuhi anggaran ini. Ini adalah minus otomatis terhadap tingkat tinggi apa pun.
Pemrogram game tidak hanya bekerja dalam bahasa tingkat rendah, tetapi mereka juga menghindari struktur data dan algoritma tingkat tinggi. Permainan biasanya tidak memiliki daftar yang ditautkan dan jarang memiliki pohon. Ada gerakan ke arah menghindari petunjuk bila memungkinkan *. Algoritma apa pun dengan lebih dari O (N) waktu atau O (1) ruang cenderung tidak menemukan penggunaan luas.
* Jika pointer tidak menyebabkan cache hilang, lalu mengapa menghabiskan 32 bit untuk menyimpannya? Jika sebuah pointer tidak menyebabkan cache hilang, sebaiknya singkirkan cache cache tersebut.
sumber
human
dengan derivasiplayer
danenemy
?Setiap bahasa pemrograman memiliki kekuatan dan kelemahan di berbagai faktor. Contoh dari faktor-faktor ini adalah:
Salah satu faktor terpenting yang diperhatikan oleh programmer game adalah kinerja. Mereka ingin menghasilkan pengalaman interaktif, yang berarti harus reaktif dan mampu menghasilkan sebanyak mungkin data yang berguna (atau menarik). Anda ingin tahu berapa banyak kesehatan yang Anda miliki setiap saat dan tidak ingin menunggu untuk itu. Dan jika Anda mengklik tombol, Anda mengharapkan senjata untuk menembak atau karakter Anda untuk melompat ketika Anda mengatakannya. Sedikit kelambatan dapat mengganggu interaktivitas ini sehingga Anda memerlukan kinerja.
Faktor penting lainnya adalah lebih suka program dalam bahasa masalah, bukan bahasa implementasi. Seorang programmer game ingin berurusan dengan manusia, orc dan mobil balap, bukan register memori ED0. Mereka masih menginginkan opsi untuk menyelami rincian implementasi jika mereka membutuhkan kinerja, tetapi akan lebih baik jika sebagian besar mereka dapat menangani level entitas di dunia game mereka. Mereka cukup khawatir tentang simulasi dunia game tanpa harus selalu peduli tentang cara kerja daftar tertaut.
C ++ sangat cocok dengan dua faktor utama ini. Anda dapat memiliki manfaat kinerja perakitan atau kode C dengan ekspresi objek. Untuk mengetahui mengapa ini cocok untuk game, bandingkan dengan beberapa opsi bahasa lainnya:
Poin terakhir adalah beberapa di antaranya bersifat historis dan politis. Banyak perang api telah terjadi antara berbagai bahasa pemrograman. C # misalnya mungkin hanya cocok untuk pengembangan game, tetapi itu muncul setelah C ++. Atau orang tidak suka itu dari Microsoft. Beberapa orang pindah ke C #, beberapa tidak. Beberapa orang masih memprogram permainan dalam BASIC, Pascal, dan C. Programmer mana pun yang nyaman, mereka akan tetap melakukannya. Pemrogram gim sebagian besar merasa nyaman dengan C ++, mungkin karena mereka tumbuh dengan C dan C ++, dan memenuhi kebutuhan mereka. Jika industri komputer dalam keadaan di mana kinerja dan penggunaan Java memuaskan cukup banyak orang, maka mungkin Jawa akan menjadi bahasa pengembangan game standar de facto.
sumber
Warisan dan momentum.
Sekali waktu kode ditulis dalam assembler untuk kinerja terbaik. Ketika daya komputasi meningkat, bahasa yang dikompilasi menjadi lebih layak, dan C menawarkan kompromi terbaik antara daya dan produktivitas, pada tingkat yang sangat dasar menjadi sedikit lebih banyak daripada assembler makro.
C ++ hanyalah penerus alami untuk C. Anda tidak membuang kode atau pengetahuan sebelumnya, namun memiliki potensi untuk berkembang menjadi metodologi baru. C ++ pada akhirnya sangat fleksibel, dan saya belum melihat paradigma desain yang tidak bisa paling tidak disimulasikan dalam C ++, sementara mampu mempertahankan kontrol total dekat atas kinerja.
sumber
Jika Anda mengembangkan untuk konsol, Anda tidak punya pilihan: SDK profesional hanya datang dalam rasa C ++. Biasanya mereka juga memiliki akses C ke banyak hal.
Karena banyak pengembang adalah Konsol + PC, masuk akal untuk melakukan semua pekerjaan PC mereka dalam bahasa yang sama dan langsung berbagi teknologi.
Karena di situlah industri pro hidup, dan sebagian besar orang ingin menjadi bagian dari itu, sebagian besar programmer game adalah programmer C ++.
Karena semua itu terjadi, sebagian besar pengembang mesin adalah pengembang C ++ juga, jadi ketika mengevaluasi mesin kelas profesional hampir semua pilihan Anda adalah C ++.
Ini semua mesin mandiri yang besar. Mengganggu itu akan membutuhkan lebih dari sekadar kemajuan teknis.
sumber
FWIW: C # semakin populer untuk pengembangan game. Lihat posting blog Miguel de Icaza . Sangat menarik dibaca, IMHO.
sumber
Meskipun saya cukup anti-C, C & C ++, satu-satunya hal yang mereka miliki dari beberapa bahasa lain adalah kontrol penuh atas platform yang sedang berjalan, Anda dapat yakin apa yang akan terjadi setiap saat, tidak GC, tidak ada gangguan.
Ini tidak sepenting hari ini, tetapi bisa untuk platform yang kurang bertenaga.
Pada PC / Mac / Linux, mungkin ini adalah bahasa yang paling portabel yang Anda temui hari ini, dan bonus kecepatan tidak lagi jauh berbeda - Minecraft (Java) halus dan bekerja pada platform yang sangat minim (dan OS apa pun) dengan satu executable - Saya belum melihat aplikasi indi C / C ++ tenaga kerja rendah dengan fungsionalitas sebanyak dan beberapa bug, apalagi bekerja pada tiga platform.
Jadi pada titik ini saya akan mengatakan bahwa sebagian besar adalah inersia dan konsepsi bahwa permainan nyata selalu dilakukan dalam C / C ++, meskipun kemampuan untuk "port" ke iPhone dan konsol adalah signifikan (Meskipun saya cukup yakin sebagian besar UI game membutuhkan BANYAK upaya untuk port kecuali antara Windows dan XBox).
sumber