Dave, bazı mükemmel noktalardan bahseder, ancak Haskell'in her iki sorunu da çözdüğünü belirtmek zorundayım. Vatansızlık, Devlet monad'ı kullanılarak atlanabilir (EDIT: pek değil - ayrıntılar için aşağıya bakınız) ve sıralama, IO monad'ı (EDIT: veya bu konuda başka herhangi bir monad ...) kullanılarak yapılabilir .
Karşılaşacağınız zorluklar (ve hem oyun programlamayı hem de Haskell'i öğrenmeye çalıştım), daha çok bu satırlar boyunca. (Bunların hepsi Haskell'e özgü, çünkü henüz başka bir FP diliyle henüz derinlemedim.)
- FP Öğrenme eğrisi: FP, yinelemeli programlamadan eksiksiz bir zihniyet değişimi gerektirir. Döngü yerine haritalar ve kıvrımlar açısından düşünmeyi öğrenmek, alışkın değilseniz zihinsel bir antrenman gerektirir.
- Mathy öğrenme eğrisi: Haskell, tasarımcılarının matematiksel karmaşıklığı ile hem kutsanmış hem de lanetlenmiştir, çünkü FP'nin temellerini öğrendikten sonra, monadlarla, morfizmlerle, oklarla ve zorlu olmamakla birlikte, diğer tüm düşüncelere ev sahipliği yapıyor kendi içinde ve çok soyut.
- Monad'lar: Bu yavruları zihninizi etrafa sarmak özellikle zor değil, özellikle Eric Raymond'ın “fonksiyon kompozisyonunu fonksiyon çağrılarının sıralanmasını zorlama yoluna dönüştürmek için bir kesmek” olduğunu söylediklerini kabul ederseniz . Maalesef (bu Haskell'in popülerliği arttıkça daha da iyi bir hale gelse de), monadların birçok açıklaması ya programcıların çoğunun ("endofunctorlar kategorisindeki monoitler!") Ya da tamamen yararsız bir analoji üzerinden geliyor. Brent Yorgey'in üzücü derecede kesin bir örneği, "monadlar burritolar gibidir !" Şaka yapıyor mu sanıyorsun? Hiç kimsenin bir öğretici bu kadar aptalca bir benzetmeyle gelemeyeceğini mi? Tekrar düşün .)
- Ekosistem: Yoldaki diğer tüm darbelerin ötesine geçmeyi başardıysanız, hala büyük ölçüde deneysel bir dille çalışmanın pratik günlük gerçekliğine karşı yanak ve zinde olursunuz. Buraya geldiğinde Tanrı sana yardım etsin. Ben Scala veya F #, ya da en azından orada başka bir dil için jonesing ciddiye başladı İşte burada bazı diğer kütüphanelerle çalışabilirlik garantisi. Bir zamanlar, Windows'taki OpenGL kütüphanelerini bağlayıp yükleyebilmek için Haskell'e ulaştım. Bu beni oldukça iyi hissettirdi. Sonra OpenGL ciltleri yeniden serbest bırakıldı ve yaptığım her şeyi kopardı. Haskell-diyarındaki hayat bu. Açıkçası, bu bir acı olabilir. Bullet motoru için bir sarıcı ister misin? Tehlikede - abandonware olarakgeçen yılın kasım ayından itibaren. Ogre3d sever misiniz? Hackage, sadece kütüphanenin bir alt kümesine bağlar . Alt satırda, oyun geliştirme için dayak yolu kapalı bir dile bağlı kalırsanız, temel sıhhi tesisat üzerinde çalışarak sürüyü takip edip C ++ ile sıkışmış olduğunuzdan çok daha fazla zaman geçireceksiniz.
Bunun ters tarafı, işlerin hızla geliştiğidir. Ve gerçekten hepsi deneyimden ne istediğine bağlı. Bir oyun inşa etmek ve şöhret ve servet aramak için web sitenize koymak ister misiniz? C ++ veya Python ile yapıştırın. Ancak, süreçlerinizi geliştirmenizi gerektirecek yeni bir şey öğrenmek istiyorsanız, işlevsel bir dil deneyin. Öğrenirken sadece kendinize çok sabrınız.
Antti Salonen'in, Haskell oyun programlamasıyla tekrar tekrar açtıklarını anlatan ilginç bir blogu var . Okumaya değer.
Düzenleme (bir yıl sonra): Artık Devlet monadını daha fazla çalıştığımdan, devletin belirli bir işlevin dışında kalması amaçlanan için iyi bir çözüm olmadığını fark ettim. Vatansızlık için gerçek çözümler IOVar, ST, MVar (iplik güvenliği için) Haskell'de veya yine de geliştiriciden gizlenmiş olan iç durumu yönetmek için Oklar ve FRP kullanan Yampa gibi bir şey aracılığıyla bulunur. (Bu liste zorluk sırasına göre sıralanmıştır, ancak ilk üçü monadları anladığınızda özellikle zor değildir.)