เดฟกล่าวถึงบางจุดที่ยอดเยี่ยมแม้ว่าฉันจะต้องชี้ให้เห็นว่า Haskell ได้แก้ไขปัญหาของเขาทั้งสอง ไร้สัญชาติสามารถข้ามได้โดยใช้ monad รัฐ(แก้ไข: ไม่ได้จริงๆ - ดูรายละเอียดด้านล่าง)และลำดับสามารถจัดการได้โดยใช้ monad IO (แก้ไข: หรือ monad อื่น ๆ สำหรับเรื่องที่ ... )
ความท้าทายที่คุณจะได้รับ (และสิ่งที่ฉันได้พยายามเรียนรู้ทั้งการเขียนโปรแกรมเกมและ Haskell) นั้นมีมากกว่าในสายเหล่านี้ (นี่คือเฉพาะ Haskell เนื่องจากฉันยังไม่ได้ลึกลงไปกับภาษา FP อื่น ๆ เลย)
- FP Learning curve: FP ต้องการการเปลี่ยนแปลงที่สมบูรณ์ของความคิดจากการเขียนโปรแกรมซ้ำ การเรียนรู้ที่จะคิดในแง่ของแผนที่และการพับมากกว่าการวนซ้ำนั้นจำเป็นต้องมีการฝึกจิตหากคุณไม่คุ้นเคย
- โค้งการเรียนรู้ทางคณิตศาสตร์: Haskell มีทั้งความสุขและการสาปแช่งโดยความซับซ้อนทางคณิตศาสตร์ของนักออกแบบเพราะหลังจากที่คุณเรียนรู้พื้นฐานของ FP แล้วคุณจะติดอยู่กับ Monads, morphisms, ลูกศรและโฮสต์อื่น ๆ ในและของตัวเองเป็นนามธรรมมาก
- Monads:ลูกสุนัขเหล่านี้ไม่ได้ยากเป็นพิเศษที่จะปิดล้อมใจของคุณโดยเฉพาะถ้าคุณยอมรับคำสั่งของ Eric Raymondว่าพวกเขาเป็น "แฮ็คที่จะเปลี่ยนการจัดองค์ประกอบของฟังก์ชั่นเป็นวิธีบังคับให้เรียงลำดับการเรียกใช้ฟังก์ชัน" โชคไม่ดี (แม้ว่านี่จะดีขึ้นเมื่อ Haskell ได้รับความนิยม) คำอธิบายมากมายของ monads ก็มุ่งไปที่หัวของโปรแกรมเมอร์ส่วนใหญ่ ("พวกเขากำลัง monoids ในหมวดหมู่ของ endofunctors!") หรือในการเปรียบเทียบที่ไม่ช่วยเหลือ (เช่น ตัวอย่างที่แม่นยำของ Brent Yorgey“ monads เปรียบเสมือน burritos !” คุณคิดว่าเขาล้อเล่นใช่ไหมไม่มีใครเคยคิดแบบนี้ในการสอนแบบคร่าวๆลองคิดดูอีกครั้ง )
- ระบบนิเวศ:หากคุณสามารถก้าวข้ามอุปสรรคอื่น ๆ ในท้องถนนได้คุณจะได้สัมผัสกับความเป็นจริงในชีวิตประจำวันของการทำงานกับภาษาที่ยังคงทดลองอยู่เป็นส่วนใหญ่ พระเจ้าช่วยคุณเมื่อคุณมาที่นี่ นี่คือสิ่งที่ผมเริ่มอย่างจริงจัง jonesing สำหรับ Scala หรือ F # หรือบางภาษาอื่น ๆ ที่มีอยู่อย่างน้อยบางรับประกันการทำงานร่วมกันกับห้องสมุดอื่น ๆ กาลครั้งหนึ่งฉันได้ Haskell เพื่อเชื่อมโยงและโหลดไลบรารี OpenGL ใน Windows นั่นทำให้ฉันรู้สึกดีทีเดียว จากนั้นการผูกของ OpenGL จะได้รับการเผยแพร่อีกครั้งและทำลายทุกสิ่งที่ฉันได้ทำไป นั่นคือชีวิตใน Haskell-land สุจริตอาจเป็นความเจ็บปวด คุณต้องการ wrapper สำหรับเครื่องยนต์ Bullet หรือไม่? มันอยู่ใน Hackage - เป็นabandonwareตั้งแต่เดือนพฤศจิกายนปีที่แล้ว คุณชอบ Ogre3d? แฮกเกอร์มีการเชื่อมโยงกับไลบรารีบางส่วนเท่านั้น บรรทัดล่างคือถ้าคุณยึดติดกับภาษานอกเส้นทางตีสำหรับการพัฒนาเกมคุณจะใช้เวลามากขึ้นในการทำงานเกี่ยวกับการประปาพื้นฐานกว่าที่คุณจะถ้าคุณเพียงแค่ติดตามฝูงและติดกับ C ++
ด้านพลิกนี้เป็นสิ่งที่พัฒนาอย่างรวดเร็ว และทุกอย่างขึ้นอยู่กับสิ่งที่คุณต้องการจากประสบการณ์ คุณต้องการสร้างเกมและวางไว้บนเว็บไซต์ของคุณเพื่อค้นหาชื่อเสียงและโชคลาภ? ติดกับ C ++ หรือ Python แต่ถ้าคุณต้องการเรียนรู้สิ่งใหม่ที่จะทำให้คุณต้องคิดค้นกระบวนการของคุณลองใช้ภาษาที่ใช้งานได้ เพียงแค่มีความอดทนกับตัวเองมากในขณะที่คุณกำลังเรียนรู้
Antti Salonen มีบล็อกที่น่าสนใจโดยมีรายละเอียดเรื่องเกี่ยวกับการเขียนโปรแกรมเกม Haskell มันคุ้มค่าที่จะอ่าน
แก้ไข (หนึ่งปีต่อมา):ตอนนี้ฉันได้ศึกษารัฐ monad เพิ่มเติมฉันรู้ว่ามันไม่ใช่ทางออกที่ดีโดยเฉพาะอย่างยิ่งสำหรับรัฐที่มีจุดประสงค์เพื่อคงอยู่ข้างนอกหน้าที่เฉพาะ โซลูชั่นที่แท้จริงสำหรับการไร้สัญชาติพบได้ใน Haskell ใน IOVar, ST, MVar (สำหรับความปลอดภัยของเธรด) หรือผ่านทาง Yampa ซึ่งใช้ Arrows และ FRP เพื่อจัดการสถานะภายในที่ยังไม่ถูกซ่อนจากนักพัฒนา (รายการนี้เรียงตามลำดับความยากลำบากแม้ว่าสามรายการแรกนั้นไม่ยากโดยเฉพาะเมื่อคุณเข้าใจพระ)