什么是很好的脚本语言可以集成到高性能应用程序中?

时间:2009-02-27 17:38:45

标签: c++ performance scripting cross-platform

我是游戏开发人员,目前正处理为我们公司编写跨平台,多线程引擎的过程。可以说,游戏引擎中最强大的工具之一就是它的脚本系统,因此我正在寻找一种新的脚本语言来集成到我们的引擎中(目前使用相对基本的内部引擎)。

所需脚本系统的主要功能(按重要性排序)为:

  • 性能 - 必须快速呼叫&amp;更新脚本<​​/ li>
  • 跨平台 - 需要相对容易地移植到多个平台(不介意一点工作,但只需要几天时间移植到每个平台)
  • 离线编译 - 能够脱机预解析脚本代码几乎是必不可少的(有助于文件大小和加载时间)
  • 能够与c ++很好地集成 - 应该能够在语言中支持OO代码,并将此功能与c ++集成
  • 多线程 - 不是必需的,但是需要。最好能够在不会相互干扰的多个线程上运行它的单独实例(即,在运行时需要更改的底层代码中没有全局变量)。基于Critical Section和Mutex的解决方案无需适用。

到目前为止,我已经积累/使用Lua,Squirrel(OO语言,基于Lua)并编写了一个ActionScript 2虚拟机。

那么,您推荐哪种脚本系统符合上述标准? (如果可能的话,您是否也可以发布或链接到您可能拥有的其他脚本语言的任何比较)

谢谢, 格兰特

10 个答案:

答案 0 :(得分:9)

由于Blizzard-Activision将其作为开发魔兽世界加载项的主要平台,Lua的优势在于受到众多大牌视频游戏开发商和知识渊博的开发者的良好基础的时间测试。

答案 1 :(得分:7)

Lua 多年来一直用于视频游戏行业。轻巧高效。

话虽如此,ChaiScriptFalcon可以满足您的需求,并且语言水平高于Lua,但历史和社区支持较少。

答案 2 :(得分:7)

Lua非常适合您的需求。我会以相同的顺序接受它们。

Lua是最快的脚本语言之一。编译速度快,运行速度快。

Lua在任何具有ANSI C编译器的平台上编译,其中afaik包括所有游戏平台。

Lua可以预编译,但作为一种非常动态的语言,大多数错误只能在运行时检测到。预编译的代码(作为字节码)在大小方面通常比源代码更大。

有许多Lua / C ++绑定工具。

它不支持多线程(你不能从多个线程访问解释器的单个实例),但你可以有多个解释器实例,每个线程一个,甚至每个游戏对象一个。

答案 3 :(得分:6)

答案 4 :(得分:3)

到目前为止,我们已经与Squirrel好运了。 Lua非常受欢迎,正在成为一个标准。

我建议你更关心内存而不是速度。大多数脚本语言都“足够快”,如果它们变慢,你总是可以将一些功能推回到C ++中。但是,它们中的许多都会耗费大量内存,并且在控制台内存上比CPU时间更加稀缺。无限的内存消耗最终会让你崩溃,如果你只需要为解释器分配4MB,那就像必须从窗口中抛出30个纹理来腾出空间。

答案 5 :(得分:2)

Lua,然后LuaJIT以获得额外的诽谤!

只是不要期望自动C ++绑定库太多,大多数都是缓慢和限制性的。最好为自己的对象做自己的绑定。

至于并发,LuaLanes或自己滚动。如果您的C ++程序已经是多线程的,只需从每个线程调用单独的LuaStates,并在需要时使用您自己的C ++共享结构作为通信通道。

你可能已经知道,Lua中最经常重复的答案是“滚动你自己的”,这通常是最好的建议!除非它是关于绑定到常见的C / C ++库,在这种情况下很可能已经有一个。

答案 6 :(得分:2)

如果您还没看过,我建议您查看Angelscript

我已经在跨平台环境(仅使用重新编译的Windows和Linux)中成功使用它,它可以很好地与C ++(对象和代码)集成。

它是轻量级的,支持多线程(从某种意义上说是问题),运行良好并编译为可以提前完成的字节代码。

答案 7 :(得分:1)

Python开始。

如果您能证明自己需要更快的速度,请查看Stackless Python。这就是EVE Online用于游戏的内容。

答案 8 :(得分:0)

JavaScript可能是一个合理的选择,因为大量的努力已经用于优化用于Web浏览器的各种实现。

答案 9 :(得分:0)

这些想到了:

  • 的Lua
  • Python with boost :: python
  • MzScheme或Guile
  • Ruby with SWIG