Seberapa baik kinerja bahasa fungsional di Android?

10

Ini adalah kasus khusus dari pertanyaan ini yang saya rasa sangat relevan.

Saya sedang mengerjakan game untuk Android, dan saya berencana menggunakan Scala dengan libgdx. Saya berencana membuat game berkinerja, tetapi tidak harus game berkinerja tinggi. Saya melihat dokumentasi libgdx tentang Pengumpulan Sampah , dan ini membuat saya berpikir:

  1. Pemrograman fungsional menyiratkan banyak objek abadi.
  2. Oleh karena itu, bermutasi suatu objek memerlukan pembuatan objek baru.
  3. Dengan demikian, banyak objek yang dikumpulkan, yang menurunkan kinerja.

Apakah ini masalah yang tidak dapat diatasi? Apakah ada masalah signifikan lainnya dengan gaya fungsional di Android?

Jason Baker
sumber

Jawaban:

3

Anda bisa baik-baik saja dengan Scala, tetapi Anda benar-benar tidak ingin terlalu sering mengalokasikan objek baru . GC tanpa jeda masih tidak lebih dari mitos (di Android), dan gamer tidak suka ketika gim Anda bermasalah. Tetapi ini tidak berarti bahwa Anda tidak dapat mengambil manfaat dari menggunakan bahasa yang lebih serius - memang, Anda bisa. Dan Anda akan baik-baik saja dengan "gaya fungsional" yang tidak terjadi di loop game utama. Juga, Scala di Android itu sendiri perlu bertarung dengan beberapa masalah build tambahan, tetapi begitu Anda mempelajarinya, ini bisa ditoleransi. Dan itu tidak terlalu tepat untuk menamai Scala bahasa fungsional, meskipun memiliki beberapa fitur yang berkaitan dengan pemrograman fungsional.

Nama tampilan
sumber
2

Untuk bermain game? Hindari bahasa fungsional. Seluruh paradigma mereka gagal sejalan dengan permainan. Bahasa prosedural, OOP lebih sesuai dengan kebutuhan gim untuk perubahan keadaan yang sering, memori eksplisit dan manajemen sumber daya, abstraksi data dan model yang berguna di banyak tempat, desain berorientasi data di beberapa sistem, dan sebagainya. Elemen fungsional adalah satu hal, bahasa fungsional sejati adalah hal lain.

Bahasa fungsional berkinerja terbaik untuk Android masih akan memberikan pengalaman pengembangan yang lebih buruk daripada Java atau C ++. Bukan karena itu adalah bahasa yang lebih baik di sekitar, tetapi karena mereka lebih baik untuk tugas tertentu yang ada. Alat yang tepat untuk pekerjaan dan semua itu.

Ini berlaku untuk ponsel, PC, konsol, dan sebagainya. Tidak ada yang menggunakan bahasa fungsional untuk game. Anjing nakal menggunakan LISP untuk scripting , tetapi bukan kode inti game. Mereka tidak bisa. Itu tidak akan berhasil jika mereka mencoba.

Kebanyakan orang terdekat adalah shader, yang fungsional dalam beberapa hal tetapi ditulis dalam bahasa yang sangat prosedural seperti HLSL atau GLSL.

Sean Middleditch
sumber
> Untuk bermain game? Hindari bahasa fungsional. Menarik bahwa Tantangan AI 2010 Google dimenangkan oleh bot Lisp. Mungkin tidak baik untuk menulis gim, tetapi tampaknya cukup praktis untuk memainkannya. semanticweb.com/…
Tentu. Kasus penggunaan berbeda. LISP adalah umum untuk AI nyata, yang tidak ada hubungannya dengan AI game. Game AI adalah tentang membuat pilihan secara efisien yang menipu pemain untuk melihat kecerdasan dan membuat permainan yang menyenangkan. AI nyata adalah tentang membuat keputusan yang benar-benar cerdas, opini manusia terkutuk (smart dapat dan memang kadang-kadang terlihat bodoh, karena pengamat manusia sering tidak melihat keseluruhan gambaran seperti AI).
Sean Middleditch
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.Sebenarnya saya telah membaca beberapa artikel dari pengembang game profil tinggi yang menyatakan minat dalam pemrograman fungsional. Ada satu oleh Tim Sweeney scribd.com/doc/5687/... dan John Carmack tampaknya memiliki minat aktif dalam mengevaluasi bahasa fungsional dan saat ini sedang melakukan port Wolfenstein 3d di Haskell, tinyurl.com/cnzx57u
James McMahon
Juga apakah Anda memiliki kutipan untuk Anjing Nakal hanya menggunakan Lisp untuk skrip? Saya mendapat kesan bahwa mereka memiliki dialek Lisp, dengan kompiler khusus yang menargetkan perangkat keras PS2 dan bahwa mereka telah menulis sebagian besar seri Jax dan Dexter di dalamnya. EDIT: Tidak apa-apa menemukannya, gamasutra.com/view/feature/131394/... Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
James McMahon