Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 函数式编程语言适合于图形编程吗? P>对这一点很好奇,从我自己的经验来看,所有的图形编程似乎都是C或C++相关的。比如Direct10X。函数式编程语言是否提供了某种图形库来开发视频游戏?_Clojure_Functional Programming_Lisp - Fatal编程技术网

Clojure 函数式编程语言适合于图形编程吗? P>对这一点很好奇,从我自己的经验来看,所有的图形编程似乎都是C或C++相关的。比如Direct10X。函数式编程语言是否提供了某种图形库来开发视频游戏?

Clojure 函数式编程语言适合于图形编程吗? P>对这一点很好奇,从我自己的经验来看,所有的图形编程似乎都是C或C++相关的。比如Direct10X。函数式编程语言是否提供了某种图形库来开发视频游戏?,clojure,functional-programming,lisp,Clojure,Functional Programming,Lisp,这是一个关于以下主题的好系列:(4部分)。您可以在Clojure中采用这种方法,并使用底层Java游戏库来操作图形。您可以使用函数式语言进行图形/游戏编程,就像在任何其他语言中一样 这只是一个简单的游戏,但我在Clojure中写了一篇游戏开发函数编程练习 以下是我在使用Clojure进行游戏编程方面的一些经验教训/一般观察: 您需要在性能方面保持谨慎,因为游戏可能要求很高,函数式语言确实会带来一些开销。Clojure对于大多数游戏来说确实“足够好”,但您需要知道保持代码优化的诀窍。例如,函数式

这是一个关于以下主题的好系列:(4部分)。您可以在Clojure中采用这种方法,并使用底层Java游戏库来操作图形。

您可以使用函数式语言进行图形/游戏编程,就像在任何其他语言中一样

这只是一个简单的游戏,但我在Clojure中写了一篇游戏开发函数编程练习

以下是我在使用Clojure进行游戏编程方面的一些经验教训/一般观察:

  • 您需要在性能方面保持谨慎,因为游戏可能要求很高,函数式语言确实会带来一些开销。Clojure对于大多数游戏来说确实“足够好”,但您需要知道保持代码优化的诀窍。例如,函数式语言可能会产生大量临时对象,从而导致GC负担过重。您需要学习避免这种情况的技巧(例如,以避免创建新的序列对象的方式使用reduce,或者利用原始的artithmetic)

  • 易变性在游戏中很有用。例如,如果您正在使用物理或平滑动画进行任何操作,则通常会有许多位置不断变化的对象。您可以使用功能性/不可变的数据结构来模拟这一点,但如果您关心性能,这不是一个好主意。因此,有必要了解如何在函数式语言中获取可变数据,即使它不是惯用语言(例如,在Clojure中,您可能希望使用Java数组)

  • 不可变的持久数据结构实际上在游戏中也非常有用。在Ironcold中,整个游戏状态存储在一个不可变的数据结构中。这就允许了一些很酷的技巧,比如有效地抓拍游戏状态/即时撤销/时间倒转

  • Clojure在游戏脚本编写方面非常出色。动态特性加上运行时编译和使用宏定义任意DSL的能力是一个巨大的胜利。事实上,即使我用java语言编写一个游戏,我也会认真考虑使用Culjule(或另一个LISP)来编写脚本。
  • Clojure在交互开发方面非常出色。我经常发现自己在一个窗口中运行游戏,同时在一个REPL中破解运行代码。改变游戏数据结构并立即看到效果很有趣!还可以让您体验Clojure风格开发的可能性

  • 至少在Clojure中,您通常希望使用Java库进行图形处理,例如Swing for 2D或LWJGL for 3D。在某些情况下,已经存在这些的包装器,但是我发现直接从Clojure使用它们非常容易。毕竟,Java互操作就像
    (.methodName对象arg1 arg2)


总之,我认为函数式语言对于游戏开发来说是非常好的选择,但性能非常高的游戏除外,在这些游戏中,为了更直接地控制硬件,您可能会更好地使用C/C++。

可能没有人关心这个已经存在了五年的问题,甚至可能不是最初的询问者。但作为一个口齿不清的老家伙,我想加入进来。标题提到了“图形编程”,然后问题是关于游戏开发库的问题。值得注意的是,图形编程包括许多与游戏编程无关的主题。(例如,在Clojure中进行数据可视化是“适合图形编程的函数式编程语言”的一个例子,但不是游戏编程。)基于函数的语言之间也有区别(比如Lisp,其中所有内容都是函数,但允许有副作用)以及仅具有不可变数据类型的纯函数语言(如Haskell或Clojure)

当然,也有一些基于Lisp的图形系统是以“多范式”的风格编写的,也就是说,不是纯粹的功能性/不变的。例如,我在20世纪80年代初在Symbolics工作,当时我们制作了第一个完全用Lisp语言编写的“数字内容创建”(如Maya或AutoCAD)系统。我1978年的硕士论文是关于一种基于Lisp的程序动画领域专用语言ASAS。我们在triple-I(信息国际公司)利用它为故事片中的特效制作早期CGI作品,包括1982年的《TRON》。最后,游戏工作室淘气狗用一种称为面向游戏的汇编语言Lisp(目标)编程了多个游戏(Crash Bandicoot、Jak和Daxter系列?)的游戏逻辑

谈到更现代的努力,以及更严格的功能性/不可变语言:“LambdaCube 3D是用于编程GPU(图形处理单元)的类似Haskell的纯功能领域专用语言。”


在John Carmack 2013年Quakecon大会的主旨演讲中,他广泛(约30分钟)谈到了他对纯函数式语言用于游戏开发的兴趣和实验。他的观点似乎是,使用函数式编程有明显的好处,但也有一些挑战,而且他在这方面做得还不够深入,没有形成强烈的意见。他谈到同时使用Haskell和Lisp进行实验。这个主题是在1:17:00-1:49:00之间。

非常感谢,你的回答非常周到和详细,真的非常吸引人。@Mikera,如果可能的话,你能详细解释一下当你谈论不可变的数据结构时,你所说的“时间倒流”是什么意思吗?@endbegin:Clojure的数据结构非常便宜