對此我非常好奇,根據我自己的經驗,所有圖形編程似乎都與C或C++相關。像Direct10X一樣。函數式編程語言是否提供某種圖形庫來開發視頻遊戲?函數式編程語言是否適合圖形編程?
回答
您可以像使用任何其他語言一樣使用函數式語言來執行圖形/遊戲編程。
這只是一個簡單的遊戲,但我在Clojure中寫了Ironclad: Steam Legions作爲遊戲開發函數式編程的練習。
這裏有一些教訓我學到/使用Clojure的遊戲編程一般性意見:
你需要小心性能如遊戲是非常苛刻和功能性語言做強加一些開銷。 Clojure對於大多數遊戲來說肯定是「足夠好的」,但你需要知道這些技巧來保持代碼的優化。例如,功能語言可能會產生大量的GC,產生大量的臨時對象。你需要學習的招數,以避免這種情況(例如,使用降低以避免產生新的序列對象,或利用原始artithmetic的方式)
可變性是在遊戲中非常有用。例如,如果您正在做物理或平滑動畫的任何事情,則通常會有許多對象具有不斷變化的位置。你可以模擬這與功能/不可變的數據結構,但如果你關心性能這不是一個好主意。因此,它是值得找出如何讓可變數據在你的函數式語言,即使它不是地道的(例如,在Clojure中,你可能會想利用Java數組)的
永恆持久數據結構實際轉出在遊戲中也非常有用。在Ironclad中,整個遊戲狀態都存儲在一個不可變的數據結構中。這允許一些很酷的技巧,例如有效地快照遊戲狀態/即時撤銷/及時倒退。
Clojure是真棒遊戲腳本。動態性與運行時編譯以及用宏定義任意DSLs的能力是一個巨大的勝利。事實上,即使我正在用Java等OOP語言編寫遊戲,我也會認真考慮使用Clojure(或其他Lisp)進行腳本編寫。
Clojure是真棒交互式開發。我經常發現自己在一個窗口中運行遊戲,同時在REPL中同時侵入運行代碼。改變遊戲數據結構並立即看到效果很有趣! This awesome video也讓您體驗到Clojure風格發展的可能性。
在Clojure中,至少您會經常希望使用Java庫來處理圖形,例如, Swing 2D或LWJGL 3D。在某些情況下,這些包裝已經存在,但我發現很容易直接從Clojure使用它們。畢竟,Java的互操作很簡單,只要
(.methodName object arg1 arg2)
總之,我認爲函數式語言進行遊戲開發非常不錯的選擇,具有非常性能密集型遊戲之外你仍然可能是更好的地方C/C++,以便更直接地控制硬件。
這是一個很好的系列話題:(4部分)Purely Functional Retrogames。你可以在Clojure中使用這種方法,並使用底層的Java遊戲庫來操縱圖形。
該系列產品是非常有趣的,感謝ü – castiel 2012-03-18 05:00:46
也許沒人關心這個現在五年的問題,也許連最初的提問者都不在乎。但作爲一個老式的圖形在Lisp的人,我想權衡。標題提到「圖形編程」,然後問題問遊戲開發圖書館。值得注意的是圖形編程包含許多與遊戲編程無關的主題。 (例如,在Clojure中進行數據可視化將是「適用於圖形編程的函數式編程語言」的一個例子,但不是遊戲編程。)基於函數的語言也是有區別的(比如Lisp,其中一切都是函數,但副作用是允許的)和純粹的功能只有不可變數據類型的語言(如Haskell或Clojure)。
確實存在以「多範式」風格編寫的基於Lisp的圖形系統,也就是說,不是純粹的功能/不可變的。例如,我在20世紀80年代早期在Symbolics工作,當時我們完全在Lisp中製作了第一個「數字內容創作」(如Maya或AutoCAD)系統之一。我的1978年碩士論文是關於程序動畫ASAS的基於Lisp的領域特定語言。我們用Triple-I(信息國際公司)爲特色電影中的特殊效果做了非常早期的CGI工作,包括1982年的TRON。 (這在SIGGRAPH paper中有描述。)最後,遊戲工作室Naughty Dog用一種名爲Game Oriented Assembly Lisp(GOAL)的Scheme語言編程了幾個遊戲的標題(Crash Bandicoot,Jak和Daxter系列?)的遊戲邏輯。
談到更現代化的努力,以及更嚴格的功能/一成不變的語言:「LambdaCube 3D是哈斯克爾式編程的GPU(圖形處理單元)純功能性領域特定語言。」
在約翰·卡馬克的基調在Quakecon 2013期間,他廣泛談了(約30分鐘)關於他對遊戲開發的純粹功能語言的興趣和實驗。他的觀點似乎是使用函數式編程有明顯的好處,但也有一些挑戰,並且他沒有走得太遠,沒有強烈的意見。他談到了對Haskell和Lisp的實驗。本主題介於video之間的1:17:00-1:49:00之間。
- 1. 圖形編程語言
- 2. 函數式編程語言中的CMS
- 3. r data.table語言中的函數式編程/元編程/計算
- 4. D編程語言是否有任何遊戲/圖形引擎?
- 5. 計算機圖形編程語言
- 6. 混合語言CUDA編程
- 7. Salesforce Apex編程語言是否支持函數參數?
- 8. CMS是否獨立於編程語言?
- 9. 使用函數式編程語言編寫的開源項目
- 10. 編程語言
- 11. 什麼是正式編程語言?
- 12. c編程語言 - declare()函數
- 13. 編程語言中的構造函數
- 14. 是否有任何體面的腳本語言使用函數式編程?
- 15. sicxe彙編語言編程
- 16. 編寫的編程語言
- 17. 數學編程語言
- 18. 標記語言是否被視爲編程語言?
- 19. 編程語言C
- 20. NesC編程語言
- 21. C編程語言
- 22. Siri編程語言
- 23. .NET編程語言
- 24. R語言編程
- 25. SIMD編程語言
- 26. Scheme編程語言
- 27. 編程語言樹
- 28. java編程語言
- 29. 帶編程語言的圓形反轉
- 30. Groovy編程語言是否存在正式的規範?
http://www.haskell.org/haskellwiki/Research_papers/Functional_reactive_programming – 2012-03-20 17:56:12