Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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
C++ 集成到高性能应用程序中的好脚本语言是什么?_C++_Performance_Scripting_Cross Platform - Fatal编程技术网

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

C++ 集成到高性能应用程序中的好脚本语言是什么?,c++,performance,scripting,cross-platform,C++,Performance,Scripting,Cross Platform,我是一名游戏开发者,目前正在为我们公司编写一个跨平台的多线程引擎。可以说,游戏引擎中最强大的工具之一是它的脚本系统,因此我正在寻找一种新的脚本语言来集成到我们的引擎中(目前使用的是一个相对基本的内部引擎) 所需脚本系统的关键功能(按重要性顺序)包括: 性能-必须能够快速调用和更新脚本 跨平台-需要相对容易地移植到多个平台(不介意一点工作,但移植到每个平台只需要几天时间) 脱机编译-能够脱机预解析脚本代码几乎是必不可少的(有助于文件大小和加载时间) 与C++集成的能力应该能够支持语言中的面向对象

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

所需脚本系统的关键功能(按重要性顺序)包括:

  • 性能-必须能够快速调用和更新脚本
  • 跨平台-需要相对容易地移植到多个平台(不介意一点工作,但移植到每个平台只需要几天时间)
  • 脱机编译-能够脱机预解析脚本代码几乎是必不可少的(有助于文件大小和加载时间)
  • 与C++集成的能力应该能够支持语言中的面向对象代码,并将该功能与C++
  • 集成
  • 多线程-不需要,但需要。最好能够在互不干扰的多个线程上运行单独的实例(即,在运行时底层代码中没有需要更改的全局代码)。关键部分和基于互斥的解决方案不需要应用
到目前为止,我有过集成/使用Lua和Squirrel(基于Lua的OO语言)的经验,并编写了ActionScript2虚拟机

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

谢谢, Grant已在视频游戏行业使用多年。重量轻,效率高


尽管如此,并且是符合您需求的优秀候选人,语言水平比Lua更高,但历史和社区支持较少。

由于暴雪Activision将其作为视频游戏的主要平台,Lua的优势是经过了众多知名视频游戏开发商的时间考验,并且拥有一批知识渊博的开发商正在开发的魔兽世界插件。

Lua非常适合您的需要。我会按同样的顺序买

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

Lua使用ANSIC编译器在任何平台上编译,afaik包括所有游戏平台

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

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

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

从开始

如果你能证明你需要更快的速度,那么看看。这就是他们游戏的用武之地。

,然后是额外的blaziness

<>不要期望从自动C++绑定库中得到太多,大多数都是慢的和限制性的。最好为自己的对象进行自己的绑定

至于并发性,要么,要么自己滚。如果C++程序已经是多线程的,只要从每个线程调用单独的LuaStates,并且如果需要的话,使用您自己的C++共享结构作为通信通道。
正如您可能已经知道的,在Lua中最经常重复的答案是“自己滚”,这通常是最好的建议!除了绑定到常见的C/C++库之外,在这种情况下,很可能已经有了一个。JavaScript可能是一个合理的选择,因为在优化web浏览器中使用的各种实现方面付出了大量的努力

我想到了这些:

  • 卢阿
  • Python与boost::Python
  • MzScheme还是Guile
  • 红宝石与SWIG

    • 如果您还没有看过,我建议您退房

      我已经成功地将它应用于跨平台环境(Windows和Linux,只使用了一个重新编译),它被设计成与C++(对象和代码)很好的集成。p> 它是轻量级的,支持多线程(在这个问题被问到的意义上),性能良好,并且可以编译成字节码,这可以提前完成。

      到目前为止,我们的运气不错。Lua非常受欢迎,它正在成为一种标准


      我建议你更担心记忆而不是速度。大多数脚本语言都“足够快”,如果它们慢了,你总是可以把一些功能推回到C++中。不过,它们中的许多会消耗大量内存,而在控制台上,内存甚至比CPU时间更为稀缺。无限的内存消耗最终会使您崩溃,如果您必须仅为解释器分配4MB,就我的经验而言,Python在游戏环境中的缺点不在于速度,而在于它消耗了多少内存——解释器本身体积庞大,而且它会消耗大量内存,虽然GC运行会烧掉整个框架,但仍然不能释放所有内容。@Crashworks:我相信EVE online的开发人员会发现这一见解很有帮助。也许你应该和他们联系。我会在三月份写个便条问问范纳先生。对于MMO来说,这有点不同,因为服务器端有很多资源,而客户端设备是一台PC,它有巨大的内存资源。在控制台上,如果内存不足,就不会开始分页,速度也会变慢;关于内存,我们的一个平台是任天堂DS(可能最终会坚持使用该平台的内部引擎),这一点很好。我想Amaze设法把Lua塞进了他们的DS引擎,但我不敢发誓。在我看来