函数式语言在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.