Mengapa kami menggunakan skrip dalam pengembangan?

67

Dalam proyek saya saat ini, skrip Lua dipanggil oleh fungsi C ++ di sisi server. Setelah itu, skrip memanggil lagi fungsi C ++ masih dalam solusi itu. Mengapa kita harus melakukan hal-hal seperti itu dan tidak memanggil fungsi C ++ secara langsung? Apa situasi di mana skrip diperlukan?

Josh
sumber

Jawaban:

73

Script biasanya dikompilasi pada saat run time , sedangkan bahasa host akan dikompilasi pada waktu kompilasi. Ini berarti bahwa kita tidak perlu mengkompilasi ulang jika skrip berubah. Mengkompilasi ulang permainan penuh bisa memakan waktu beberapa menit hingga berjam-jam, yang menyiratkan hit produktivitas besar.

Biasanya, kode kritis atau kode backend tidak akan dituliskan. Kode ini harus berjalan cepat dan seringkali manajemen memori sangat penting.
Dalam gim, logika dan konfigurasi gim biasanya terkandung dalam file skrip. Skrip ini dapat dengan mudah diperbarui oleh non-programmer (seperti perancang) untuk mengubah gameplay. Bahasa skrip mudah dan bertindak dengan cara yang memaafkan untuk tujuan itu.

Seringkali, bahasa skrip juga digunakan untuk melakukan scripting secara real time . Ini berguna untuk mengubah beberapa elemen gameplay atau bahkan untuk debugging. Banyak game menyediakan konsol untuk tujuan ini (sebagian besar di-rumah).

Sangat mungkin bagi Anda untuk membuat game menggunakan mesin game yang ada, hanya dengan scripting. The lapisan mesin permainan dengan demikian sepenuhnya memisahkan dari lapisan logika permainan . Mesin modern biasanya dapat digunakan untuk membuat game FPS atau RTS dengan mudah seperti ini, tetapi tidak mungkin untuk genre apa pun. MMO mungkin akan membutuhkan jenis mesin lain.

Jadi intinya adalah decoupling. Manfaat yang tercantum di atas sering kali melebihi pekerjaan tambahan untuk membuat atau mengintegrasikan bahasa skrip.

Nef
sumber
7
+1 untuk mengatakan bahwa skrip biasanya lebih mudah diperbarui oleh non-programmer. Desainer tidak selalu programmer, dan mereka tidak harus seperti itu.
Oak
19
Saya merasa seperti saya mengulangi sendiri dalam setiap pertanyaan tentang scripting - jika alur kerja Anda membutuhkan non-programmer untuk memprogram (yang termasuk scripting), itu akan menggigit Anda di pantat nanti. Desainer tidak selalu programmer, tetapi segera setelah mereka menulis skrip non-sepele (misalnya begitu mereka mencoba untuk mendefinisikan suatu fungsi atau menggunakan loop) mereka berpura-pura menjadi satu. Jika mereka tidak memiliki pelatihan pemrograman, itu akan berakhir dengan air mata dan membuang-buang waktu untuk semua orang.
5
Joe - itu tidak membatalkan argumen, itu hanya berarti bahwa Anda harus memutuskan di mana decouple "hal-hal pemrograman" dari "hal-hal desain" dan garis pemisah akan berbeda berdasarkan keahlian teknis desainer Anda (atau kurangnya daripadanya).
Ian Schreiber
3
Saya cukup yakin bahwa setiap desainer yang menghargai diri sendiri diajarkan dengan baik dalam setidaknya satu bahasa. Untuk mengklarifikasi hal-hal sedikit, saya ingin nuansa istilah "non-programmer" sebagai seseorang yang berprofesi bukan insinyur perangkat lunak. Saya menyesal menggunakan istilah ini, terima kasih kepada Joe saya melihat itu ambigu. Saya percaya ada berbagai programer, dari mereka yang menulis XML sederhana untuk perakitan hardcore untuk pemrosesan sinyal matematika berat. Saya harap ini memecahkan masalah dualitas "non-programmer".
Nef
8
Saya tidak mendengar ada yang menyarankan bahwa desainer harus menulis skrip yang rumit, misi-kritis untuk produksi. Namun, desainer dengan pemahaman pemrograman yang sederhana masih dapat mengubah beberapa skrip secara eksperimental (dan kemudian menyerahkannya kepada programmer yang sebenarnya). Mereka tentu bisa menulis skrip ad hoc sederhana dari konsol saat runtime untuk memfasilitasi pengujian mereka sendiri. Saya membayangkan desainer mungkin ingin memanfaatkan scripting dasar untuk membuat prototipe desain layar baru (bahkan jika mereka tidak lebih dari semi-fungsional, maket interaktif). Banyak kode non-produksi perlu ditulis.
Mike Strobel
38

Anda mengajukan pertanyaan yang salah. Pertanyaan sebenarnya, saya pikir, adalah mengapa kita memasang bahasa "non-scripting" seperti C, C ++, Java, dan sebagainya? Dan jawabannya adalah satu alasan: kinerja. (Dan mungkin inersia, tetapi inersia itu ada karena kinerja, dan siapa pun yang dapat menulis C / C ++ / Java yang baik dapat menulis setidaknya Ruby / Python / Lua / JavaScript yang lumayan.)

Kami menggunakan bahasa "scripting" (yang benar-benar berarti, tingkat sangat tinggi, sampah dikumpulkan, dan biasanya beberapa bentuk pengetikan lebih longgar dan kompilasi dinamis) karena mereka umumnya bahasa yang lebih mudah bagi siapa saja - termasuk programmer - untuk menulis kode. Ada sedikit hal - hal bodoh seperti mengingat untuk bebas setelah Anda malloc atau memastikan kode Anda aman dari pengecualian, atau mengingat untuk membuat semua destruktor Anda virtual. Jika komputer kita sangat cepat, kita akan menggunakan bahasa "scripting" untuk semuanya.


sumber
4
Saya suka argumen ini begitu jauh lebih baik daripada "sehingga desainer dapat memprogram." Merupakan ide yang sangat buruk untuk mengabaikan nilai perkembangan yang cepat dan dapat bereksperimen dengan perubahan tanpa mengkompilasi ulang semuanya.
ojrac
8
  1. Setiap kelas lua baru adalah dua baris. Setiap kelas C ++ baru adalah rasa sakit.
  2. Tidak ada rengekan tentang jenis ketika semua yang Anda inginkan adalah nilai acak di sekitar.
  3. Pengumpulan sampah.
  4. Kode skrip diisolasi dengan baik di mesin virtual, jauh dari semua segfault yang berkeliaran dan array array yang buruk.
zaratustra
sumber
5

Perubahan skrip mudah diterapkan. Misalnya, Anda dapat menyimpan skrip dalam database yang berarti bahwa alih-alih pengalihan biner penuh dan kemungkinan restart layanan, Anda cukup mengeluarkan pernyataan SQL UPDATE tunggal, mungkin diikuti oleh sinyal ke layanan Anda yang sedang berjalan untuk memuat ulang skrip.

Juga bahasa skrip seringkali mudah dipahami dan mudah diprogram sehingga Anda tidak memerlukan dev 'hardcore' (yang menangani Memory Management / Pointer dan optimisasi level cpu) untuk sebagian besar kode (jika RPG besar, skrip untuk AI, Mantra, Efek Barang dan dunia itu sendiri seringkali lebih besar daripada kode mesin). Bahasa skrip memungkinkan lebih banyak fokus pada 'apa' daripada 'bagaimana' karena Pengumpulan Sampah (dalam kasus Lua) dan tingkat abstraksi yang lebih tinggi.

Michael Stum
sumber
4

Satu skenario di mana skrip berguna adalah ketika kita ingin mesin kita dapat dikembangkan oleh plugins / addons. Ekstensi ini dibuat dalam banyak kasus oleh orang-orang non-profesional (seperti gamer dan penggemar tingkat lanjut). Skrip lebih aman dan lebih mudah untuk tujuan ini. Dengan menggunakan skrip, mereka tidak perlu menggunakan kompiler, dan tidak perlu menyadari petunjuk ...

Contoh yang bagus dari ini adalah game World of Warcraft. Ini memiliki ribuan addons yang dibuat oleh komunitas. AddOns ini ditulis menggunakan LUA + XML.

Dani
sumber