是否有使用功能性编程语言的游戏引擎?[关闭]


10

是否有任何游戏引擎使用类似于Scheme,Common Lisp,Clojure或JavaScript的功能编程语言?

我已经尝试过Unity3D,但是它们的“ JavaScript”实际上不是JavaScript,是强类型的并且不起作用。


2
我正在使用ThreeJS,但是尽管它很棒,但是缺少一个活跃的社区,文档是一个严重的问题。
MaiaVictor 2012年

5
您为什么要使用功能性编程语言进行编程?您面临的问题是什么?请更具体。就目前而言,这个问题太笼统了,无法给出一个正确答案,并且很容易生成这样的(都是同等“正确”)答案列表:-Clojure与任何Java游戏引擎结合在一起怎么样?-如何采用本身不起作用的语言来采用函数式编程风格?(阅读在C ++函数编程通过卡马克。) -等
埃里克

2
Unity3D的Javascript具有与常规 Javascript 一样的功能,您只需要使用C#4.0类型,例如:var add : Func<int, int, int> = ...
寓言

2
请参阅有关“使用哪种技术” 的常见问题。如答案所示,这个问题只是生成一个列表。这不是建设性的,因为没有一个正确的答案(除了“是”之外)。这不是编译列表的地方。
MichaelHouse

2
这是一种“正确的工具,适合正确的工作”的问题。函数式编程非常注重最小化和消除可变状态。这对于某些类别的应用程序可能效果很好,但与任何游戏的工作方式完全相反。
梅森惠勒

Answers:


7

有一个用Haskell编写的LambdaCube(它不完全是游戏引擎,而更像是图形引擎)。


2
可能也对此感兴趣(来自Epic的Tim Sweeney的一般评论)
2012年

有趣的联系,有一个PPT 这里
bobobobo


2

我没有书面问题的答案,但我相信您可能会想问“为什么没有更多的功能游戏引擎”,而不是寻找要使用的特定游戏引擎。如果是正确的话,您应该改一下这个问题。如果没有,请忽略我。:)

单纯的功能性方法不适用于游戏。游戏(以及图形,物理和AI)基本上都是关于状态变化的。解决这些问题的正确功能方法是每个循环计算一次完整的新状态,与更直接地编码实际硬件的工作方式相比,这将带来非常严重的性能损失。

因此,您在生产中看不到任何功能样式的游戏引擎。对于游戏引擎要解决的大多数问题,这只是错误的编程范例。对于大多数需要在高级脚本和游戏逻辑代码中解决的问题,这也是错误的编程范例。虽然几乎可以肯定的是,可以制作出功能强大的游戏引擎,但使用起来却很慢,困难且麻烦,除了作为炫耀的演示/玩具之外,没有任何实际目的。

这并不是说函数式编程在游戏中没有位置。我在C#,Unity JavaScript甚至C ++ 11中使用非常实用的编码风格(在适当的地方)。一些非常具体的问题最好或至少最容易用一种功能样式解决,并且当今大多数流行语言都支持这种形式的编程,尽管比“实际”功能语言更麻烦。通常,使用功能性方法解决的这些问题不在核心引擎代码中,也不在游戏本身中运行的代码中。功能编码对于工具和脱机数据处理(例如烘焙模型和其他资产)可能非常有益。在算法编写方面,GPU编程的功能模糊不清也是有争议的,

当然,最好还是在非常特殊的情况下避免使用功能性方法,因为您希望这些脱机工具尽可能快。功能语言擅长并行处理,这对于某些问题很有用,但是硬件的抽象往往导致非常低效的单线程性能。(LISP之类的语言在这里表现出色,因为它们不是纯粹的功能,并且事实上Common LISP是多范式。)对于游戏引擎或相关工具包来说,绝对最糟糕的事情是内容迭代的瓶颈。一个花哨的引擎具有很多功能,需要美工或关卡设计师花费数小时才能完成5分钟(或理想情况下,几乎是立即完成)的工作,这只会导致游戏质量下降或由于预算增加而取消。


1
请参阅:清洁游戏​​库(Clean)和Nikki和机器人(Haskell)。
Andres F.

1
这个答案主要是错误的,并且似乎是基于对实际功能语言的理解很差。
CA McCann

1
您有实际的计数器吗?
肖恩·米德迪奇

4
...您对使用功能语言发布行业质量的游戏有多少经验?如果您有经验,请分享。做出带有解释和辩解的声明,不得诉诸专业知识或权威或个人指责。这种愤怒的争论和个人争吵的可能性正是为什么这个问题被关闭了。
肖恩·米德迪奇

4
你是在说我的话。我没有说明我的经验水平,因为您对我的专业知识的看法与该主题完全无关。不要声称您没有时间陈述事实,而又有时间攻击个人技能水平。您可能有真正的更正,但您需要声明它们。“那个家伙是错的”对于任何人来说都不是有价值的答案。我可以断言你是错的,然后我们就有了无休止,毫无意义的争吵循环。请说为什么答案错误。
肖恩·米德迪奇

0

Naugthy Dog公司在其游戏引擎上使用了List,它被称为Game Oriented Assembly Lisp。

一些信息可以在这里找到:http : //en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp

一些代码示例:http : //web.archive.org/web/20070127022728/http : //lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html

不适用于公共用途。


如果您查看Wikipedia的描述,尽管LISP起源,但很快就会发现GOAL几乎不是一种功能语言。
梅森惠勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.