Answers:
TL; DR:Lua确实有开销,但是如果使用得当,它可以忽略不计并且可以轻松缓解。不要将其用于繁重的数学运算或变换几何。使用它编写GUI脚本,您可能根本看不到任何性能问题。
我已经完成了一些关于Lua作为游戏脚本语言的性能的基本基准测试,而且非常快。使用tolua ++将LuaJIT绑定到我的游戏引擎上,我产生了2,000个actor,每个actor由一个称为每个游戏循环(带有time-delta参数)的Lua脚本控制。一半的演员有植绒脚本,另一半则进行某种随机游走(羊群避免了)。
关闭渲染组件后,我的Opteron 170(2x2.0GHz,虽然我的引擎当时是单线程的)每秒给我提供了400滴答声。我想如果我深入研究并进行优化,我可能会比现在挤出更多的东西,也许将一些繁重的工作移回C ++中。每秒更新2000名演员400次仍然令人印象深刻,并且远远超出了我当时的期望。
现在,我在所有项目中都使用Lua,它实际上构成了实际游戏代码(AI,GUI布局/逻辑,事件/消息)的很大一部分。当您可以快速更改某些内容并对其进行测试而不必退出,重新编译和重新初始化时,制作游戏会更加有趣。我不时遇到一些性能问题,但是可以通过在C ++中重新实现有问题的代码(然后从Lua调用它)来轻松解决这些问题。
EVE Online的服务器虽然有点偏离主题,但几乎完全是用Stackless Python编写的(我相信它们会将大多数数学运算推迟到C ++库中),这比Lua重得多,并且基于我个人的研究和一些可用的研究基准,远不及LuaJIT。他们设法处理30k +并发玩家,没有太多问题。当然,他们确实有大量昂贵的硬件运行所有这些,但是我相信大部分成本都在他们的数据库集群中。
致歉的文字墙。