函数式语言在Android上的性能如何?


10

我觉得这是这个问题的特例,我觉得这是特别相关的。

我正在开发适用于Android的游戏,并且正计划在libgdx中使用Scala。我正计划制作一款性能出色的游戏,但不一定是高性能游戏。我看过libgdx关于Garbage Collection的文档,这使我想到:

  1. 函数式编程意味着许多不可变的对象。
  2. 因此,使对象变异需要制作一个新对象。
  3. 因此,许多对象会被垃圾回收,从而降低性能。

这是一个无法解决的问题吗?Android上的功能样式是否还有其他重大问题?

Answers:


3

您可以使用Scala很好,但是您确实不想太频繁地分配新对象。没有暂停的GC仍然只是一个神话(在Android上),游戏玩家不喜欢您的游戏出现故障时。但这并不意味着您不会从使用更严肃的语言中获得任何好处-确实可以。而且您不会在主游戏循环中出现“功能样式”,这会很好。另外,Android上的Scala本身还需要解决一些额外的构建问题,但是一旦学习,它是可以忍受的。虽然将Scala命名为功能语言并不是很精确,但是它具有与功能编程相关的一些功能。


2

为了游戏?避免使用功能性语言。他们的整个范例无法与游戏完美融合。程序上的OOP语言更适合游戏对频繁状态更改,显式内存和资源管理,在许多地方有用的数据和模型的抽象,在某些系统中面向数据的设计等的需求。功能元素是一回事,真正的功能语言是另一回事。

与Java或C ++相比,性能最佳的Android功能语言仍会提供较差的开发体验。并不是因为这些语言都是周围更好的语言,而是因为它们对于手头的特定任务是更好的。适用于这项工作的工具。

在移动设备,PC,控制台等上都是如此。没有人在游戏中使用功能语言。顽皮狗使用LISP 编写脚本,但不使用核心游戏代码。他们不能。如果他们尝试,那是行不通的。

人们最接近的着色器是着色器,它在某些方面可以起作用,但是是以高度程序化的语言(例如HLSL或GLSL)编写的。


>玩游戏?避免使用功能性语言。有趣的是,Lisp机器人赢得了2010年的Google AI挑战赛。可能对编写游戏不利,但是玩游戏显然很方便。语义网

当然。不同的用例。LISP在真正的AI中很常见,与游戏AI无关。游戏AI就是要有效地做出选择,使选择者愚弄玩家看到智力并制作有趣的游戏。真正的AI就是要做出真正明智的决定,人的见解(聪明的人有时可以而且确实看上去很愚蠢,因为人类的观察者常常看不到AI那样的整体情况)。
肖恩·米德迪奇

2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.实际上,我读过一些知名游戏开发人员的文章,这些文章表达了对函数式编程的兴趣。Tim Sweeney 撰写了一篇scribd.com/doc/5687/…,约翰·卡马克(John Carmack)似乎对评估函数式语言很感兴趣,目前正在Haskell进行Wolfenstein 3d移植,tinyurl.com / cnzx57u
James McMahon

另外,您是否仅使用Lisp编写脚本来引用Naughty Dog?我给他们的印象是,他们有一个Lisp内部自定义方言,一个针对PS2硬件的自定义编译器,并且他们在其中编写了大部分Jax和Dexter系列。编辑:没关系,gamasutra.com / view / feature / 131394 /… Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
詹姆斯·麦克马洪
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.