İşlevsel diller Android'de ne kadar iyi performans gösterir?


10

Bu, özellikle uygun olduğunu düşündüğüm bu sorunun özel bir örneğidir .

Android için bir oyun üzerinde çalışıyorum ve Scala'yı libgdx ile kullanmayı planlıyorum. Performanslı bir oyun yapmayı planlıyorum, ancak hiper performanslı bir oyun olmak zorunda değilim. Libgdx'in Çöp Toplama ile ilgili belgelerini gördüm ve bu beni düşündürüyor:

  1. Fonksiyonel programlama birçok değişmez nesneyi ifade eder.
  2. Bu nedenle, bir nesnenin mutasyona uğratılması için yeni bir nesne yapılması gerekir.
  3. Böylece, birçok nesne çöp toplanır ve bu da performansı düşürür.

Bu aşılmaz bir sorun mu? Android'de işlevsel stille ilgili başka önemli sorunlar var mı?

Yanıtlar:


3

Scala ile iyi olabilirsiniz, ancak yeni nesneleri çok sık tahsis etmek istemezsiniz . Duraklama olmadan GC hala bir efsane değildir (Android'de) ve oyuncular oyununuz bozulduğunda sevmiyor. Ancak bu, daha ciddi bir dil kullanmaktan hiçbir şekilde yararlanamayacağınız anlamına gelmez - gerçekten de yapabilirsiniz. Ve ana oyun döngüsünde yer almayan "fonksiyonel tarz" ile iyi olacaksınız. Ayrıca, Android'de Scala'nın kendisi bazı ekstra yapı sorunları ile savaşmayı gerektirir, ancak bir kez öğrendikten sonra katlanılabilir. Ve Scala'yı işlevsel bir dil olarak adlandırmak çok kesin değil, yine de fonksiyonel programlama ile ilgili bazı özelliklere sahip.


2

Oyun için mi? İşlevsel dillerden kaçının. Onların tüm paradigması oyunlarla iyi uyum sağlayamıyor. Yordamsal, OOP dilleri, oyunların sık durum değişiklikleri, açık bellek ve kaynak yönetimi, birçok yerde yararlı olan veri ve model soyutlama, bazı sistemlerde veri odaklı tasarım vb. Fonksiyonel elemanlar bir şeydir, gerçek bir işlevsel dil başka bir şeydir.

Android için en iyi performans gösteren işlevsel dil, Java veya C ++ 'dan daha kötü bir geliştirme deneyimi sağlayacaktır. Bunlar her yerde daha iyi diller olduğu için değil, mevcut görev için daha iyi oldukları için. İş ve tüm bunlar için doğru araç.

Bu, mobil, PC, konsollar vb. İçin geçerlidir. Hiç kimse oyunlar için fonksiyonel diller kullanmaz. Yaramaz Köpek komut dosyası yazmak için LISP kullanır , ancak temel oyun kodunu kullanmaz. Yapamazlar. Deneseler işe yaramazdı.

Çoğu insanın en yakın olduğu gölgeler, bazı şekillerde işlevsel olan ancak HLSL veya GLSL gibi son derece prosedürel dillerde yazılmış gölgelerdir.


> Oyun oynamak için mi? İşlevsel dillerden kaçının. 2010 Google AI Mücadelesinin bir Lisp botu tarafından kazanılması ilginçtir. Oyun yazmak için iyi olmayabilir, ancak bunları oynamak söz konusu olduğunda oldukça kullanışlı. semanticweb.com/…

Elbette. Farklı kullanım durumu. LISP, oyun AI ile çok az ilgisi olan gerçek AI için yaygındır. Oyun AI, oyuncuyu zekayı görmeye kandırmak ve eğlenceli bir oyun yapmak için etkili seçimler yapmakla ilgilidir. Gerçek AI gerçekten akıllı kararlar vermekle ilgilidir, insan görüşleri lanetlenir (akıllı gözlemciler bazen AI'ın yaptığı gibi tüm resmi görmediği için bazen aptal görünebilir).
Sean Middleditch

2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.Aslında, işlevsel programlamaya ilgi duyduğunu ifade eden yüksek profilli oyun geliştiricilerinden bazı makaleler okudum. Tim Sweeney scribd.com/doc/5687/… tarafından bir tane vardı ve John Carmack fonksiyonel dilleri değerlendirmek için aktif bir ilgi alanına sahip gibi görünüyor ve şu anda Haskell, Wolurstein 3d'in
James McMahon

Ayrıca Naughty Dog için alıntılama sadece Lisp kullanarak komut dosyası için var mı? PS2 donanımını hedefleyen özel bir derleyici ile Lisp'in kendi şirket içi lehçesine sahip oldukları ve Jax ve Dexter serilerinin çoğunu içinde yazdıklarını gördüm. EDIT: Bunu aldırma, 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.