Apa yang Anda cari dalam bahasa scripting? [Tutup]

10

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?

Jon Purdy
sumber
2
Kebingungan: Karena jika itu dapat dikaburkan maka itu mungkin juga cukup fleksibel. Ambil Perl, misalnya, yang dapat dikaburkan sejauh itu terlihat seperti output yang disebabkan oleh derau garis dari modem 300bps (ketika seseorang mengambil telepon di ujung lain rumah) kembali pada hari-hari ketika ini cepat. ;-P
Randolf Richardson
1
@ Randolf: Poin bagus. Satu-satunya masalah dengan kebingungan adalah bahwa ia cenderung bergantung pada bahasa yang stabil, yang bahasa muda tidak. Obfuscator yang berfungsi dengan 0.10 mungkin tidak berfungsi dengan 0.11.
Jon Purdy
@ Jon Purdy: Itu benar (+1 untuk Anda). Ada juga aspek kode yang dikaburkan menjadi lebih sulit untuk dipelihara. Namun, hal penting yang perlu diperhatikan adalah bahwa kebingungan dapat memberikan satu ukuran menarik tentang seberapa fleksibel suatu bahasa.
Randolf Richardson
5
@ Randolf: kapan perl tidak terlihat seperti itu?
Ken
1
@ Jo Wreschnig Itu mengatakan 'mana yang harus saya pilih', ini lebih 'fitur apa yang baik dalam bahasa scripting'.
Bebek Komunis

Jawaban:

4

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 ini void*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.

DeadMG
sumber
Anda harus mencoba sesuatu seperti perpustakaan pembungkus ini yang saya tulis sendiri baru-baru ini untuk mengatasi beberapa masalah yang sama yang Anda alami. Anda dapat menggunakan shared_ptrs dan barang-barang dengan itu baik-baik saja, itu jenis aman (sebanyak itu dapat tetap), Anda dapat memutuskan apakah Anda ingin kehidupan sesuatu yang dikendalikan oleh kode Anda atau oleh lingkungan Lua, itu mendukung warisan, dan itu sangat mirip dengan Lua API normal. Saya tidak yakin mendapatkan keluhan tentang membuat binding, saya hanya menggunakan potongan vim untuk membuat binding saya 99% dari waktu.
Alex Ames
2

Untuk game berbasis web, tiga faktor penting bagi saya adalah:

  • Keakraban
  • Kecepatan
  • Integrasi

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.

Randolf Richardson
sumber
2

Diatur dalam urutan (menurun) kepentingan:

  • Sepintas dibaca. Sebenarnya, itu adalah persyaratan untuk bahasa apa pun yang ingin saya gunakan, tetapi untuk skrip itu bisa dibilang lebih penting: skrip, menurut definisi, lebih sering berubah daripada kode "inti". Jadi, tidak ada LISP atau PERL.
  • Kesakitan. Skrip selalu ditulis dan ditulis ulang, dan mengetik banyak dan banyak kode "boilerplate" tidak efisien.
  • Debugging mudah. Lebih disukai dengan breakpoint, step-through dll.
  • Integrasi yang mudah dengan teknologi "inti" pilihan saya. Jika saya menggunakan C ++ untuk gim saya, saya membutuhkan binding C ++ yang bagus, seperti di LUA. Jika gim ini dalam C #, saya akan memilih bahasa berbasis CLI: C #, IronPython, Boo.
  • Fitur bahasa: susunan asosiatif yang mudah, coroutine, mungkin lambdas. Sebenarnya, ini sebagian besar tergantung pada apa yang akan saya gunakan untuk skrip. Skrip AI berbeda dari, katakanlah, skrip inisialisasi.
  • Dokumentasi yang bagus. C # memiliki seluruh MSDN yang didedikasikan untuk itu, dan Boo hanya memiliki sumber. itu sebabnya C # jauh lebih baik.
  • Lingkungan pengembangan yang baik. VS atau Eclipse mengalahkan Notepad setiap saat.
Lupakan
sumber
+1 Ini membantu saya sedikit, terima kasih. Saya akan menunggu untuk melihat apakah ada diskusi lebih lanjut, tetapi saya pikir Anda sudah membahasnya dengan baik.
Jon Purdy