Saya sedang menulis sedikit bahasa untuk proyek lain. Meskipun pengembangan gim bukan tujuan awalnya, gim ini mulai terlihat cocok, dan saya pikir saya akan mengembangkannya dalam nada yang sama di beberapa titik.
Tanpa mengungkapkan detail (untuk menghindari bias), saya ingin tahu:
Fitur apa yang Anda sukai dalam bahasa scripting untuk pengembangan game?
Jika Anda telah menggunakan Lua, Python, atau bahasa tertanam lainnya seperti Tcl atau Guile sebagai bahasa skrip utama Anda dalam proyek game, aspek apa yang menurut Anda paling berguna?
Fitur bahasa (lambda, kelas, paralelisme)
Fitur implementasi (optimisasi kinerja, JIT, akselerasi perangkat keras)
Fitur integrasi (C, C ++, atau .NET binding)
Atau sesuatu yang sama sekali berbeda?
Jawaban:
Saya mencari dua hal - kecepatan, dan integrasi. Biasanya keduanya berjalan bersama, dan dengan keakraban. Sayangnya, untuk C ++, hampir tidak ada bahasa yang menawarkan kecepatan dan integrasi. Saya telah menggunakan Lua dan itu mengisap, mengerikan. Saya menghabiskan seluruh waktu untuk menulis binding dan tidak cukup dekat untuk menulis kode.
Fitur bahasa? Inti dari menanamkan bahasa skrip bukanlah agar ia dapat memiliki fitur-fitur bahasa dinamis whizzy yang tidak dimiliki oleh bahasa asli saya, itu agar dapat diinterpretasikan pada saat run-time . Saya benar-benar tidak peduli lebih dari itu, selama itu pada dasarnya fungsional, maka itu baik-baik saja dan cocok dengan bahasa host saya (dalam hal ini C ++). Namun, luar biasa, bahasa yang dirancang untuk diintegrasikan ke dalam aplikasi host sama sekali gagal bagian tentang integrasi .
Apakah saya perlu rutinitas bersama? Tidak, saya tidak perlu rutinitas bersama. Apakah saya perlu mengetik dinamis? Tidak, saya perlu tahu jenis apa yang kembali kepada saya dari bahasa skrip saya, dan karena semua kode saya yang ada dibangun dengan mengetik sangat kuat, saya sangat ingin kode skrip saya dapat menghormatinya juga. Apakah saya perlu pengumpulan sampah? Tidak, tipe saya sudah mengelola sumber daya mereka sendiri, dan saya pasti ingin kehancuran deterministik. Apakah saya mau goto? Tidak- Saya ingin melempar pengecualian.
Masalah yang saya temukan adalah bahwa pada dasarnya semua bahasa scripting yang ada dirancang untuk memperluas C, bukan C ++, dan tidak mendukung model C ++ dengan banyak cara, dan selain itu, mereka memiliki semantik yang sama sekali berbeda. Bagaimana saya bisa menerjemahkan
shared_ptr
, yang merupakan penghancuran deterministik otomatis, ke lingkungan yang dikumpulkan sampah? Anda dapat menulis pustaka pembungkus apa pun yang Anda inginkan, Anda tidak akan mengubah semantik bahasa yang mendasarinya menjadi tidak kompatibel dengan bahasa yang ingin Anda panjangkan dengannya. Bagaimana saya bisa memastikan bahwa inivoid*
adalah tipe yang tepat? Bagaimana saya bisa berurusan dengan warisan? Bagaimana cara saya melempar dan menangkap pengecualian? Itu tidak bekerja.Bahasa scripting yang baik untuk C ++ akan diketik secara statis, nilai semantik, secara deterministik hancur, lempar dan tangkap pengecualian dan hormati destruktor / konstruktor / salin konstruktor saya, karena dengan demikian semua tipe saya hanya akan berfungsi, bagus dan mudah, dan bahasa yang dihasilkan akan menjadi cepat dan mendukung semua semantik asli saya, mudah diikat.
sumber
Untuk game berbasis web, tiga faktor penting bagi saya adalah:
Saya terutama menyukai Perl, sebagian karena saya sudah terbiasa dengan bahasa, dan karena dengan modul server web seperti mod_perl2 ada kinerja yang sangat besar dan manfaat integrasi - mod_perl2 menyimpan versi skrip yang disusun dalam RAM (yang hanya ditafsirkan setelah loading pertama) yang memberikan keunggulan kecepatan utama dibandingkan bahasa lain yang ditafsirkan yang tidak memiliki opsi kompilasi, dan juga terintegrasi ke dalam server HTTPd Apache dengan API kaya fitur yang menyediakan akses ke banyak fitur yang sangat kuat.
Faktor-faktor ini dapat berguna untuk pengembangan game berbasis web (dan di mana akses basis data diperlukan, caching koneksi basis data membantu mengurangi waktu respons bagi pengguna). Tentu saja, ini mungkin bukan solusi yang paling ideal untuk semuanya karena setiap bahasa memiliki kelebihan (dan kekurangan), tetapi selalu bekerja dengan baik untuk kebutuhan saya.
sumber
Diatur dalam urutan (menurun) kepentingan:
sumber