Mengapa C / C ++ lebih disukai untuk pengembang game?


14

Beberapa orang mengatakan itu menawarkan lebih banyak kontrol kepada pengembang, tetapi apa tepatnya yang dapat dikontrol melalui C ++ yang tidak dapat dikontrol menggunakan, misalnya, Java?

Jawaban:


21

Java berjalan di mesin virtual, sementara C ++ dijalankan langsung di perangkat keras. Ini artinya Anda memiliki kontrol lebih besar ke mana ingatan Anda pergi dan apa yang dilakukan dengan C ++.

Java adalah bahasa sampah yang dikumpulkan. Anda tidak memiliki kendali langsung atas memori Anda. Anda dapat mengalokasikan potongan memori baru, tetapi Anda tidak memiliki (baik) kontrol ketika akan dihapus. Pengumpul sampah memeriksa setiap bagian dari memori yang Anda alokasikan setiap x bingkai dan menentukan apakah itu sampah atau masih digunakan.

Untuk game, ini bisa menjadi bencana. Setiap beberapa frame beberapa pengumpul sampah datang untuk memeriksa setiap alokasi yang Anda buat untuk melihat apakah itu masih digunakan? Bicara tentang perlambatan!

Kedua, sebagian besar perpustakaan yang kami gunakan ditulis dalam C atau ditulis dalam C ++. Saya berbicara tentang Scaleform, mesin fisika Havok, PhysX, SpeedTree, dll. Semua paket profesional, digunakan secara luas di industri. Jika bahasa lain ingin menjadi raja, lebih baik mendukung mereka.

Pandangan pribadi saya adalah bahwa Java sangat bagus untuk aplikasi dan aplikasi desktop, tetapi tidak untuk game. Java memiliki banyak alat yang bagus untuk pengembang dan secara teoritis dapat dijalankan pada platform apa pun yang memiliki implementasi Java Virtual Machine, tetapi saya masih lebih suka C ++ karena saya memerlukan kontrol atas memori saya. Terutama ketika Anda mulai bekerja dengan struktur data yang eksotis (pohon merah-hitam, daftar tertaut dua kali lipat, dll.) Membantu untuk menjaga gambaran umum yang baik dari semua alokasi memori Anda.

Saya tidak mengatakan: jangan gunakan Java. Saya katakan: pikirkan tentang mengapa Anda menggunakan Java. Minecraft dibangun di Jawa, jadi tentu saja mungkin untuk membangun game di Jawa. Tapi apakah itu game yang lebih baik, apakah itu dibangun di C ++? Yah, tentu saja tidak akan semurah itu untuk menjalankannya pada tiga besar (Windows, MacOS, Linux), tetapi meskipun demikian, ia menemukan banyak bug khusus platform dalam pengembangannya, bug yang tidak dapat di-Java dengan lancar lebih.

Ada banyak kerangka kerja C ++ sekarang untuk pemrogram pemula. Tidak ada alasan untuk tidak mempelajarinya, terutama jika Anda ingin memajukan karir Anda di industri ini.


1
Hanya sebuah nitpick, tetapi dalam sebagian besar lingkungan operasi kode asli berjalan di mesin virtual. Java berjalan di mesin virtual di dalam mesin virtual.
Skyler Saleh

1
@RTS: Agak sulit untuk memanggil op -> terjemahan mikro-op mesin virtual, jika itu yang Anda maksud.

Tidak, saya berbicara tentang mesin virtual yang dapat dimasukkan semua aplikasi oleh sistem operasi modern untuk memungkinkan multitasking yang aman. Ini terjadi pada OS yang berjalan pada arsitektur tanpa micro-ops (RISC). Ini termasuk memori virtual, interupsi perangkat lunak, sistem untuk akses perangkat keras bersamaan, penjadwal sistem operasi dan penanganan file register.
Skyler Saleh

@ RTS Saya tidak yakin bahwa isolasi tugas benar-benar memenuhi syarat sebagai VM. Ini adalah RM (Real Machine) dengan beberapa perlindungan bawaan. Tidak ada lapisan abstraksi instruksi yang jelas antara fetch / exec. Compiler dan linker menghasilkan kode yang dapat dipindahkan sebagai persyaratan. CPU menyediakan dukungan perangkat keras untuk sebagian besar hal ini - yang menghilangkan aspek "virtual".
3Dave

2

Jawaban singkat: C ++ mengkompilasi ke kode asli, jadi kinerjanya tergantung pada pengembang, bukan runtime atau VM.

Jawaban panjang:

C ++ menjadi "lebih cepat" tidak ada hubungannya dengan C ++. Saat ini, ini adalah salah satu dari sedikit bahasa yang tersedia yang didukung oleh alat yang menghasilkan kode asli mandiri untuk berbagai platform.

Kembali pada hari itu, Anda bisa menggunakan C, C ++, BASIC / 2, Delphi, dll, dan mendapatkan executable yang efisien dan berdiri sendiri. Pilihan bahasa adalah masalah preferensi pribadi dan kekuatan pasar.

Hari-hari ini, asumsi bahwa "C ++ lebih cepat" pada dasarnya adalah ramalan yang terpenuhi dengan sendirinya, meskipun LLVM berada dalam posisi yang baik untuk mengubah hal itu karena membuat apa pun masuk ke dalam pengurai parser, seperti dulu.

Borland melakukannya dengan benar: Banyak bahasa yang diuraikan, pengoptimalan pertama diterapkan, kemudian diteruskan ke kompiler dan tautan umum backend. Yang secara efektif merupakan salah satu pencapaian utama LLVM.

Java terstruktur sedemikian rupa sehingga akan sangat sulit untuk diterapkan tanpa JVM. Anehnya, C #, umumnya, dan salah, diasumsikan kira-kira setara dengan Java, sudah dikompilasi dengan kode asli pada beberapa platform, termasuk iOS.

Atas daftar Natal saya? Mesin waktu untuk kembali dan menambahkan properti, penanganan eksepsi nyata dan polimorfisme KERJA aktual ke C ++, dan menyingkirkan omong kosong sintaks panah atas yang dapat diuraikan oleh parser sendiri. Saya menulis preprosesor selama 10 tahun lalu karena itu sangat bodoh.


Apakah maksud Anda akses anggota tidak langsung (seperti dalam h-> x)? Menghapus itu akan membuat jenis pegangan dan penunjuk cerdas menjadi kurang bermanfaat. Jika Anda berpendapat untuk mengubahnya hanya untuk pointer mentah, Anda hanya membuat bahasa kurang konsisten.
Lars Viklund

1
Apa yang tidak berhasil tentang polimorfisme C ++?
Casey

@ LarsViklund ya, itulah yang saya maksud. Tetapi, sementara alamat, dereferensi dan operator anggota (&, *, ::, -> ...) semuanya memiliki arti yang berbeda, sebagian besar waktu memungkinkan untuk menyimpulkan hasil drsjt dari konteks. Segala sesuatu bisa disederhanakan di muka, seperti yang dilakukan dalam bahasa lain. Titik kecil yang menonjol, tetapi memiliki potensi untuk meningkatkan kompleksitas kode (dan karenanya menghabiskan waktu dan biaya).
3Dave
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.