Bahasa fungsional apa yang paling cocok untuk membuat game? [Tutup]


19

Saya telah memperhatikan bahasa pemrograman fungsional untuk sementara waktu, tetapi saya ragu untuk benar-benar memahami mereka. Tapi saya pikir sudah waktunya saya setidaknya mulai melirik ke arah itu untuk memastikan saya siap untuk apa pun.

Saya telah melihat pembicaraan tentang Haskell, F #, Scala, dan sebagainya. Tetapi saya tidak tahu perbedaan antara bahasa dan komunitas mereka, saya juga tidak begitu peduli; kecuali dalam konteks pengembangan game.

Jadi, dari sudut pandang pengembangan game, bahasa pemrograman fungsional mana yang memiliki fitur paling cocok untuk pemrograman game? Sebagai contoh, apakah ada perpustakaan pengembangan mesin fungsional / mesin / kerangka kerja atau mesin grafis untuk bahasa fungsional? Apakah ada bahasa yang menangani struktur data tertentu yang biasanya digunakan dalam pengembangan game dengan lebih baik?

Intinya: bahasa pemrograman fungsional apa yang terbaik untuk pemrograman game fungsional, dan mengapa?

Saya percaya / berharap pertanyaan ini akan menyatakan bahasa terbaik yang jelas karena itu saya belum menandainya CW meskipun kecenderungan subyektifnya.


2
"Apa maksudmu, game 2D, atau game 3D?" "Hah? Aku tidak tahu - aieeee "
Cyclops

@ Cyclops uh, apa? Saya tidak mengerti ...
Ricket

@Ricket, sebagiannya adalah permintaan untuk menjelaskan jenis permainan apa yang Anda bicarakan, 2D atau 3D (dan mungkin berbasis waktu nyata atau berbasis giliran). Sebagian itu adalah lelucon Monty-Python yang mengaburkan bagian pertama. Wups. :) Dan saya pikir menentukan jenis permainan, berguna - kecuali ada satu bahasa fungsional yang sempurna untuk semuanya , maka bahasa yang berbeda mungkin lebih baik dalam hal yang berbeda.
Cyclops

Saya tidak percaya 2D atau 3D memengaruhi pilihan bahasa, kecuali oleh beragam mesin / perpustakaan yang tersedia untuk suatu bahasa. Saya pribadi tertarik pada 2D dan 3D jadi saya tidak memikirkan satu atau yang lain ketika menulis pertanyaan ini. Namun secara keseluruhan, game 2D dan 3D memiliki banyak sistem dan struktur data yang umum (mis. Audio, input, AI, struktur program, loop game) dan ada banyak game 3D yang dapat diangkut ke 2D atau sebaliknya. Dan ya saya belum melihat Monty Python jadi itu sebabnya saya tidak mengerti sama sekali. :)
Ricket

1
Saya tidak berpikir ada jawaban yang pasti tentang bahasa terbaik.
Wei Hu

Jawaban:


12

F # menjadi bagian dari keluarga .net Microsoft memiliki akses ke XNA, yang merupakan basis yang fantastis untuk membuat game. Sedikit googling menghasilkan beberapa tutorial, video, dan artikel. Dokumen XNA yang hebat juga harus membantu.

Ada beberapa gerakan dalam game untuk Haskell juga, lihat di sini . Anda mungkin akan menggunakan binding openGL.

Karena Scala bermain di tanah Jawa, ia terintegrasi dengan semua mesin / binding Java yang tersedia, lihat pos SO ini .

Saya pikir itu karena preferensi, sementara saya hanya bermain dengan Haskell, saya membayangkan setiap bahasa fungsional memiliki keistimewaan sendiri. Mungkin layak untuk membuat game uji kecil di masing-masing dan melihat mana yang terasa lebih baik bagi Anda.

Seperti yang saya katakan, saya hanya memiliki pengalaman Haskell minimal, jadi saya tidak bisa mengomentari yang terbaik, tetapi sumber daya ini semestinya membantu Anda memulai.


2
Antara masalah dengan JVM dan ketidakmatangan implementasi kompiler, saya menemukan kinerja Scala tidak dapat diterima ketika menggunakan gaya fungsional, meskipun bahasa itu sendiri mendukungnya dengan baik. Akhirnya menjadi secepat, katakanlah, Python atau Ruby, bukan F # atau OCaml. (Kecepatan Scala kompetitif untuk lebih banyak gaya OO / prosedural.)

Saya benar-benar mendapat proyek F # yang menjalankan XNA (itu adalah jendela XNA kosong dengan cornflower blue, hanya kodenya adalah F # dan bukan C #.
RCIX

8

Saya akan mengatakan Lisp.

Ini telah digunakan dalam permainan sebagai bahasa scripting, setidaknya di Dog Nakal (atau saya pikir itu), dan merupakan bahasa yang sangat dewasa.

Keuntungan Lisp adalah deserialisasi, yang merupakan bagian utama dari apa yang kita sebut manajemen aset. Deserializing lisp sepele, kode dan datanya satu. Ini membuatnya lebih mudah untuk memiliki format file untuk aset dan perilaku. Ini tidak seperti Anda yang di json / xml / yaml / bin dan satu file F # untuk AI. Anda dapat menyimpan semuanya sebagai ekspresi s yang akan menyederhanakan pipa aset banyak.


TBH saya akan merekomendasikan menentang ini. Bahasa scripting tidak hanya untuk digunakan oleh pengembang; modder akan ingin mod game, dan tidak ada yang akan menakut-nakuti mereka lebih cepat daripada (() ()))) () ((()). Ditambah, bahkan sejauh bahasa fungsional pergi, Lisp adalah esoterik.
RCIX

7
Jika menakut-nakuti modder adalah sesuatu yang membuat Anda khawatir, memilih bahasa fungsional mungkin bukan langkah yang tepat.
Paul Wicks

3
@RCIX & @ Jo - Necro kekuatan AKTIFKAN. Pokoknya, Skema yang digunakan sebagai bahasa pengajaran. SICP adalah sekitar setengah gelar CS dalam satu buku dan digunakan oleh banyak sekolah (termasuk MIT hingga saat ini), dan HTDP adalah pengantar yang tidak terlalu keras.
Jesse Millikan

1
@RCIX & Joe memang. cadel & skema yang satu bahasa pengantar di banyak universitas.
oberhamsi

1
Lisp bukanlah sesuatu yang ingin Anda gunakan. Naughty Dog memiliki SATU, programmer Lisp tunggal dan ketika ia berhenti mereka mentransisikan semua mesin mereka ke C ++. Tidak tahu mengapa mesin usang dari satu perusahaan diseret keluar sebagai contoh yang bersinar sepanjang waktu =)
Patrick Hughes

8

Setelah mendapatkan pengalaman praktis dengannya, saya akan memilih Clojure - sudah menulis satu permainan kecil di dalamnya, dan berencana untuk melakukan lebih banyak.

Alasan:

  • Produktivitas - Clojure adalah bahasa yang dinamis. Ini memiliki fitur hebat untuk pengembangan gaya REPL interaktif, misalnya Anda dapat menggunakan REPL untuk menanyakan atau mengubah keadaan di dalam instance aplikasi game yang sedang berjalan. Kode dalam Clojure juga sering ringkas. Saya kira saya 3-5 kali lebih produktif di Clojure daripada di Jawa atau C #.
  • Tidak Murni - sementara saya menghargai keindahan dan keanggunan dari bahasa fungsional murni seperti Haskell, pemrograman game adalah pengejaran berantakan di mana pragmatisme menang. Saya ingin dapat menempatkan efek samping dalam fungsi saya ketika saya membutuhkannya, dan Clojure memungkinkan ini. Karena itu, gaya Clojure idiomatik adalah untuk berfungsi murni sebagian besar waktu .
  • Metaprogramming - Warisan Lisp Clojure sebagai bahasa homoiconic membuatnya bagus untuk metaprogramming / pembuatan kode. Sangat mudah untuk "memperluas bahasa" untuk membuat DSL Anda sendiri atau menghilangkan biolerplate. Anda dapat dengan mudah menggunakan Clojure sebagai bahasa scripting game itu sendiri, dan kompilasi kode dinamis berarti bahwa skrip Anda akan berjalan secepat mesin gim inti Anda.
  • Akses ke perpustakaan Java . Anda dapat menggunakan semua pustaka suara / grafik / AI / jaringan dari Jawa, yang merupakan keuntungan besar vs. sebagian besar bahasa fungsional lainnya (di mana Anda harus menulis ini dari awal atau mengembangkan banyak kode penghubung yang rumit). Ini bisa menjadi penyelamat.
  • Cross-platform - ini gratis untuk tidak berjalan di JVM, tapi ini bonus yang bagus.
  • Kinerja - untuk bahasa fungsional dinamis, Clojure adalah tentang secepat yang Anda bisa. Itu selalu dikompilasi JIT, tidak pernah diartikan. dengan pengoptimalan yang cerdas, Anda dapat menandingi kecepatan kode Java tingkat rendah di Clojure. Sebagai contoh, Anda dapat menggunakan array primitif Java, atau memberikan petunjuk jenis untuk memastikan bahwa kompiler menghasilkan panggilan fungsi yang diketik secara statis dalam kode kritis kinerja.
  • Concurrency - Clojure memiliki model hebat untuk mengelola keadaan bersamaan, didukung oleh sistem memori transaksional perangkat lunak yang mengesankan. Layak melihat video ini untuk wawasan lebih lanjut tentang cara kerjanya.

Satu-satunya waktu saya tidak akan mempertimbangkan Clojure adalah jika saya menulis sebuah permainan intensif grafis canggih di mana Anda membutuhkan kinerja yang canggih (di mana saya masih berpikir Anda membutuhkan C / C ++).

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.