İşlevsel bir programlama dili kullanan herhangi bir oyun motoru var mı? [kapalı]


10

Şema, Ortak Lisp, Clojure veya JavaScript'e benzer işlevsel bir programlama dili kullanan herhangi bir oyun motoru var mı?

Unity3D denedim ama onların "JavaScript" aslında JavaScript değil, güçlü yazılmıştır ve fonksiyonel değildir.


2
ThreeJS kullanıyorum, ama harikalarla dolu olsa da, aktif bir topluluk eksikliği ve dokümantasyon ciddi bir sorundur.
MaiaVictor

5
Neden fonksiyonel bir programlama dilinde programlamak istersiniz? Karşılaştığınız sorun nedir? Lütfen daha spesifik ol. Bu soru, doğru bir cevap vermek için çok genel ve bu gibi (hepsi aynı derecede "doğru") cevapların bir listesini oluşturmak için eğilimli: - Clojure herhangi bir Java oyun motoru ile birlikte ne dersiniz? - İşlevsel olmayan bir dilde işlevsel bir programlama stilini benimsemeye ne dersiniz? ( Carmack tarafından C ++ 'da Fonksiyonel Programlamayı okuyun .) - vb.
Eric

2
Unity3D'nin Javascript'i normal Javascript kadar işlevseldir , sadece C # 4.0 türlerini kullanmanız yeterlidir, örneğin:var add : Func<int, int, int> = ...
fableal

2
"Hangi teknolojiyi kullanacaksınız" soruları hakkındaki SSS'ye bakın . Bu soru, cevapların gösterdiği gibi, sadece bir liste oluşturuyor. Tek bir doğru cevap olmadığı için yapıcı değildir ("Evet var" dışında). Bu listeleri derlemek için bir yer değil.
MichaelHouse

2
Bu bir çeşit "doğru iş için doğru araç" problemidir. Fonksiyonel programlama, mümkün olan en uygun durumu en aza indirmeye ve ortadan kaldırmaya odaklanmıştır. Bu, belirli uygulama sınıfları için iyi olabilir, ancak herhangi bir oyunun çalışmasıyla ilgili tamamen antitetiktir.
Mason Wheeler

Yanıtlar:




2

Yazılı olarak soruya bir cevabım yok, ancak muhtemelen belirli bir tane kullanmak yerine "neden daha fazla işlevsel oyun motoru yok" diye sormaya çalıştığınıza inanıyorum. Bu doğruysa, soruyu yeniden ifade etmelisiniz. Değilse ... beni görmezden gel. :)

Saf işlevsel bir yaklaşım, oyunlar için uygun değildir. Oyunlar (ve grafikler, fizik ve yapay zeka) ve temel olarak devlet değişiklikleri hakkında. Bu sorunlara doğru işlevsel yaklaşım, döngü başına bir kez tüm yeni bir durumu hesaplamak olacaktır, bu da gerçek donanımın nasıl çalıştığına daha doğrudan kodlamaya kıyasla çok ciddi bir performans cezasına sahip olacaktır.

Bu nedenle üretimde herhangi bir işlevsel tarz oyun motoru görmüyorsunuz. Bir oyun motorunun çözmesi gereken sorunların çoğu için basitçe yanlış programlama paradigmasıdır. Üst düzey komut dosyası oluşturma ve oyun mantığı kodunda da çözülmesi gereken sorunların çoğu için yanlış programlama paradigmasıdır. İşlevsel bir oyun motoru yapmak neredeyse kesinlikle mümkün olsa da, kullanımı yavaş, zor ve hantal olacaktır ve gösteriş yapmak için düzgün bir demo / oyuncak olmaktan başka gerçek bir amaca hizmet etmeyecektir.

Bu, işlevsel programlamanın oyunlarda bir yerde olmadığı anlamına gelmez. C #, Unity JavaScript ve hatta C ++ 11 kodlama çok fonksiyonel bir stil kullanın (uygun olduğunda). Bazı çok spesifik problemler en iyi veya en azından en kolay şekilde işlevsel bir stille çözülür ve günümüzde popüler dillerin çoğu "gerçek" fonksiyonel dillerden daha hantal bir şekilde de olsa bu programlama biçimini desteklemektedir. Genellikle fonksiyonel yaklaşımlarla çözülen bu problemler çekirdek motor kodunda veya oyunun kendisinde çalışan kodda değildir. Fonksiyonel kodlama, araçlar ve çevrimdışı veri işleme (örneğin pişirme modelleri ve diğer varlıklar) için oldukça yararlı olabilir. GPU programlamanın algoritmaların yazılma biçiminde belirsiz bir şekilde işlevsel olması da tartışılabilir.

Elbette, bu çevrimdışı araçların olabildiğince hızlı olmasını istediğiniz için çok özel koşullar dışında fonksiyonel yaklaşımlardan kaçınmak en iyisi olabilir. İşlevsel diller, bazı problemler için iyi olan paralellikte mükemmeldir, ancak donanımdan soyutlamalar çok verimsiz tek iş parçacıklı performansa yol açma eğilimindedir. (LISP gibi diller burada iyi işlev görüyorlar ve aslında Ortak LISP çok paradigma.) Bir oyun motoru veya ilgili araç seti için mutlak tek kötü şey, içerik yinelemesi için bir darboğaz olmaktır. Sanatçıların veya seviye tasarımcılarının 5 dakika içinde (veya ideal olarak neredeyse anında) yapılabilecekleri yapması için saatlerce süren birçok özelliğe sahip süslü bir motor, düşük kaliteli oyunlara veya bütçenin artırılması nedeniyle iptal edilmesine yol açacaktır.


1
Bakınız: Temiz Oyun Kütüphanesi (Temiz) ve Nikki ve Robotlar (Haskell).
Andres

1
Bu cevap çoğunlukla yanlıştır ve gerçek işlevsel dillerin çok iyi anlaşılmamasına dayanmaktadır.
CA McCann

1
Gerçek karşı puanlarınız var mı?
Sean Middleditch

4
... İşlevsel dillerde nakliye endüstrisi kalitesinde oyunlar ne kadar deneyime sahipsiniz? Deneyiminiz varsa, paylaşın. Uzmanlığa veya otoriteye ya da kişisel suçlamalara itiraz etmeyecek şekilde açıklama ve gerekçelerle beyanda bulunun. Bu tür öfkeli tartışma ve kişisel çekişme olasılığı, tam olarak bu sorunun neden kapatıldığıdır.
Sean Middleditch

4
Kelimeleri ağzımın içine koyuyorsun. Deneyim seviyemi belirtmiyorum çünkü uzmanlığım hakkındaki fikriniz konu ile tamamen alakasız. Kişisel beceri seviyelerine saldırmak için zamanınız olduğunda gerçekleri belirtmek için zamanınız olmadığını iddia etmeyin. Muhtemelen gerçek düzeltmeleriniz vardır, ancak bunları belirtmeniz gerekir. "Bu adam yanlış," kimse için değerli bir cevap geri bildirimi değildir. Sadece yanıldığını iddia edebilirim ve sonra sonsuz ve anlamsız bir kavga döngümüz var. Lütfen bir cevabın neden yanlış olduğunu söyleyin .
Sean Middleditch

0

Naugthy Dog şirketi, Oyun Motorlarında List'i kullandı ve buna Game Oriented Assembly Lisp adı verildi.

Bazı bilgileri burada bulabilirsiniz: http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp

Bazı kod örnekleri: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html

Herkese açık olarak kullanılamaz.


Wikipedia'nın açıklamasına bakarsanız, GOAL'in neredeyse hiç işlevsel bir dil olduğu açıkça görülüyor, LISP soyuna rağmen.
Mason Wheeler
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.