Dalam game industri yang saya maksud seperti Quake, CoD dll.
Dalam game industri yang saya maksud seperti Quake, CoD dll.
Jawaban:
Dalam arti tertentu, C ++ benar-benar digantikan - tidak hanya oleh C #, tetapi oleh banyak bahasa lain. Tetapi jika Anda bertanya, apakah akan diganti sepenuhnya - maka jawabannya pasti tidak .
Itu karena C ++ secara tradisional digunakan dalam dua kapasitas. Pertama, untuk membuat mesin permainan : komponen tingkat rendah yang memuat sumber daya, dorong poligon ke layar dan angka-angka dalam simulasi fisika. Kedua, untuk kode logika game : aturan aktual yang membuat gameplay.
Kapasitas kedua ini tidak memerlukan poin kuat C ++ (seperti kontrol penuh atas detail level rendah), tetapi menderita kelemahannya (seperti manajemen memori kode-rawan bug). Dan dalam kapasitas kedua ini C ++ sedang digantikan oleh bahasa scripting yang berbeda. Banyak pengembang menggunakan Lua; beberapa menggunakan Python. Tetapi jika platform CLI tersedia, dalam bentuk .NET atau Mono, itu menghadirkan kandidat host skrip yang hebat. Platform ini cukup cepat, dapat diandalkan, menawarkan bahasa yang dikenal luas (C #) dan perpustakaan kelas dasar yang komprehensif. Jangan lupa alat: MS Visual studio dan SharpDevelop / MonoDevelop mungkin bukan IDE terbaik di dunia, tetapi mereka cukup bagus.
Yang mengatakan, mesin gim tidak akan ditulis dalam C # (atau Lua, atau Python dalam hal ini). Mengapa? Karena mereka tidak cukup cepat.
Berlawanan dengan banyak kepercayaan populer, kinerja tunggal terbesar yang dicapai hari ini adalah karena latensi memori . Ini berarti bahwa mengakses memori adalah urusan serius. Dan bahasa yang dikelola tidak memungkinkan pengguna untuk mengontrol akses memori - itulah sebabnya mereka "dikelola" sejak awal. Jadi, tidak ada bahasa yang dikelola yang akan memungkinkan untuk menulis mesin permainan yang sangat cepat. Sebenarnya, semua mesin "C #" besar yang dapat saya pikirkan - XNA, MOGRE, Unity - didasarkan pada kode C ++ asli ; tetapi izinkan untuk menulis logika game dalam C #.
Singkatnya : C # akan digunakan sebagai pengganti C ++ atau bahasa lainnya. Tapi itu tidak akan pernah menggantikan C ++, setidaknya sampai seseorang menemukan latensi, memori akses instan.
Pilihan bahasa sangat tergantung pada platform. Saat ini tampaknya sangat tidak mungkin bahwa apa pun selain platform Microsoft akan benar-benar membutuhkan .NET sebagai implementasi.
Kebijaksanaan konvensional akan mengatakan bahwa platform kecil harus dekat dengan logam untuk menjadi pemain, tetapi di sisi lain, platform yang dikelola lebih aman . Itu mungkin alasan Windows Phone 7 memaksa Anda untuk menggunakan .NET.
Pasti akan menarik jika Xbox baru membutuhkan platform yang dikelola. Jika perangkat keras ponsel dapat menanganinya (dan itu benar), saya pasti bisa melihatnya menggunakannya pada konsol ukuran penuh. Ini akan membangkitkan ekosistem konsol sedikit karena akan lebih sulit untuk menulis game lintas platform tanpa menulis semua kode game Anda dalam bahasa scripting. Jika itu masalahnya, maka C # tidak akan menggantikan C ++, tetapi akan berjalan seiring.
Saat ini Anda dapat menggunakan Mono sebagai bagian belakang scripting (mirip dengan apa yang dilakukan Unity), tetapi saya akan membayangkan bahwa sebagian besar pembuat mesin ingin menggulung sendiri, atau menggunakan sesuatu yang lebih kompak seperti Lua atau Python daripada C #.
Apa pun itu, ini semua tentang alat yang tepat untuk pekerjaan yang tepat. Anda benar-benar harus mempelajari kedua bahasa itu, karena C # membuatnya lebih mudah untuk melakukan hal-hal tertentu (pengembangan alat, pengembangan server mungkin, dll), dan Anda tidak dapat menggunakan apa pun selain C ++ dalam beberapa kasus.
Itu tidak mungkin. C ++ memiliki manfaat tingkat rendah sehingga pengembang dapat benar-benar mengubah detail terkecil untuk mendapatkan kinerja terbaik.
Dengan C # dan .NET, Anda memiliki pengumpulan sampah yang sangat berguna, tetapi ketika bekerja dengan platform dengan memori dan sumber daya terbatas (konsol portabel dan beberapa konsol rumah), Anda harus memiliki kendali atas memori sebanyak mungkin untuk memanfaatkan sebaik mungkin sumber daya. Mengizinkan bahasa yang dikelola untuk dialokasikan dan membebaskan memori bagi Anda kemungkinan besar akan menyebabkan Anda banyak masalah.
Kecepatan juga menjadi masalah (meskipun mungkin kurang begitu). Seiring waktu, saya yakin bahwa bahasa yang dikelola dapat dibuat untuk melakukan yang sebanding dengan kompiler C ++.
Secara keseluruhan, dalam pengalaman saya, pengembang game cenderung mengendalikan orang aneh ketika datang ke memori, waktu CPU dan sumber daya (untuk memeras kinerja sebanyak yang mereka bisa), itulah sebabnya C / C ++ adalah bahasa yang terutama digunakan.
AFAIK .NET GC masih menderita karena menghentikan algoritme gaya dunia . Meskipun ini bisa sesuai untuk berbagai aplikasi - itu tidak dapat diterima untuk aplikasi real-time seperti game.
Faktanya, sangat sulit untuk menggunakan bahasa yang dikelola secara efektif untuk program waktu-nyata sampai kita memiliki beberapa terobosan dalam GC.
Tidak. Bergantung pada .NET akan menyiratkan penulisan ulang besar-besaran untuk platform tanpa Kerangka yang tersedia, seperti PS3, dan kerugian kinerja mungkin sangat dapat diterima pada PC atau untuk game Arcade Langsung, tetapi game yang lebih besar akan membutuhkan setiap memo kinerja dari konsol mereka berjalan cukup cepat. Lebih dari itu, ada basis kode yang sangat besar di C ++ yang tidak seorang pun mampu memutakhirkan, bahkan jika mereka menginginkannya. C ++ ada di industri game dan akan tetap di sana untuk waktu yang lama.
Pada saat-saat di mana daya komputer sangat langka, semua yang perlu diprogram dalam C atau C ++, hanya karena bahasa sampah yang dikumpulkan mengambil kendali memori dari programmer, dan dengan demikian, kinerja dapat turun.
Saat ini, komputer lebih cepat, tetapi seperti kata Knuth dan singkatnya, optimasi bisa jahat:
jelas bahwa fungsionalitas inti level rendah perlu dioptimalkan, karena komputasi geometri 3D, fisika, tabrakan, pencahayaan, dapat dengan cepat mengasapi prosesor terbaik yang ada. Anda dapat dengan mudah mengatakan bahwa peningkatan kualitas visual pada mesin hampir selalu secara signifikan membunuh kinerja.
Sekarang, ada fungsi-fungsi lain, seperti status gim, AI, suara, input, jaringan, yang masih penting dalam gim, tetapi yang hampir tidak pernah memakan sumber daya komputer sebanyak itu. Fungsi-fungsi itu, sebagian besar waktu, belum dioptimalkan. Itulah tujuan dari bahasa scripting dan sampah yang dikumpulkan: Anda tidak harus memikirkan koherensi memori dan organisasi aplikasi Anda, karena kode yang akan Anda tulis dengan bahasa-bahasa ini, jika Anda tidak mengkodekan hal-hal tingkat rendah, tidak akan pernah menjadi kemacetan.
Contoh dengan 2 kasus
keduanya berada pada jarak 500 km.
Dalam kedua kasus apakah penting untuk membuat proses bongkar / muat lebih cepat untuk membuat seluruh waktu transportasi lebih kecil, mengetahui bahwa Anda TIDAK BISA membuat perahu atau truk bergerak lebih cepat?
Jawabannya adalah: itu penting dengan truk, tetapi tidak dengan kapal lagi, karena Anda sudah melakukan banyak hal dengan memindahkan stok dengan kapal.
Saya tidak tahu apakah Anda memahami metafora ini, tetapi dengan satu cara, itu bisa membuat Anda membayangkan masalah matematika, yang lebih penting daripada memahami jawabannya.
Bahasa scripting memungkinkan untuk membuat game lebih cepat jika Anda sudah memiliki mesin yang diprogram dalam C / C ++: mesin 3D memecahkan masalah tingkat rendah, sekarang Anda harus membuat game dengan skrip Anda.
Tapi ingat: Anda benar-benar tidak akan pernah bisa mengganti bahasa yang dikompilasi level rendah, EVER. Bahasa dikompilasi, dikompilasi secara statis adalah inti dari kinerja dan Anda TIDAK BISA mengesampingkan mereka, apakah itu kernel, mesin 3D atau driver kartu grafis.
Tetapi tentu saja, jika gim Anda sederhana secara grafis dan tidak memerlukan banyak perhitungan vektor, Anda dapat fokus pada gameplay dan melupakan pengoptimalan, karena dalam hal ini Anda tidak akan pernah harus berurusan dengan pengoptimalan karena mesin Anda sangat cepat untuk itu
Kecuali jika Anda berencana untuk port ir pada DS. Tapi saya akan berhenti di situ.
Dengar, aku tahu ini kata-kata kasar tapi aku tidak hanya membelah rambut. Saya merasa sebagian besar programmer tidak benar-benar menyatukan ini. Bahasa itu sendiri tidak ada hubungannya dengan kecepatan lari / kinerja. Ini adalah kompiler / framework. Anda bisa lebih baik berdebat gcc terhadap cl (microsoft compiler pre 2010) atau msbuild (c ++ compiler untuk 2010). Setiap rilis kompiler ini menjadi lebih baik sehingga Anda juga harus membandingkannya dengan versi sebelumnya. Saya sangat terkesan dengan .net dan itu berkinerja baik tetapi bahkan jika itu berkinerja lebih baik saya tidak melihatnya mengambil alih, satu alasan: portabilitas.
Game AAA ingin berada di Windows, Linux, Mac, XBox, PS3, Nintendo, dll.