Ruby vs Lua作为C++的脚本语言

bl0*_*ter 23 c++ ruby lua

我目前正在构建一个游戏服务器(不是引擎),我希望它可以扩展,就像一个插件系统.
我找到的解决方案是使用脚本语言.到现在为止还挺好.

我不确定我是否应该使用Ruby或Lua.Lua更容易嵌入,但Ruby有一个更大的库,更好的语法(在我看来).问题是,我没有找到使用Ruby作为C++脚本语言的简单方法,而使用Lua则非常容易.

对此有些不满?使用Ruby作为脚本语言的建议(我试过SWIG,但它不像使用Lua那样整洁)?

谢谢.

dun*_*289 12

我之前看过将Ruby嵌入到C/C++中,看起来非常困难.你将面临很多挑战:

  • 从C/C++调用Ruby需要编写2层函数(一层要调用,一层用于捕获异常)
  • 从Ruby调用C/C++需要正常的SWIG类型工作
  • 来回移动数据需要仔细跟踪分配,因为Ruby会想要垃圾收集任何东西

我确信这可以做到,但对我来说这似乎非常困难,只有你能在最低限度的入口点跳进Ruby才有用.


Cal*_*602 8

我过去曾经广泛使用过Lua.

Luabind非常容易使用,不需要像SWIG这样的外部生成器,doc很棒.编译时间仍然不错.

我见过的最大问题:lua主要是......只写.你没有真正的类,但只有带有一点语法糖的关联数组(object ['key']可以写成object.key),所以你很容易在一个不起眼的函数中添加一个'成员',完全忘记了关于它,并在以后有副作用.

出于这个原因,仅此原因,我更喜欢Python.Boost :: Python是Luabind的基础,因此两者都有类似的API(Luabind以前稍微容易构建但不再容易).在功能方面,它们非常相同.

不直接相关:这些都不能在多线程环境中可靠地使用(因此这取决于服务器的复杂性).

  • N Python线程:GIL(全局解释器锁)即将推出.每一个你在一个线程中使用一个变量的时候,它是锁着的,所以它有点破坏了点,除了长的I/O操作和调用C函数.
  • lua有协同程序,但它们不可并行.
  • Ruby线程不是真正的线程,但与Lua的协同程序类似

请注意,您仍然可以为每个线程创建一个环境,但它们将无法通信(除了使用C++机制).这在Lua中尤其容易.

  • @ Calvin1602最新版本的Ruby(1.9+)使用真正的系统级线程.它仍然有一个GIL,这使它与Python平等. (4认同)
  • 使用Lua,可以使用[LuaLanes](http://kotisivu.dnainternet.net/askok/bin/lanes/)解决多线程问题。 (2认同)

Jam*_*mes 6

您可能有兴趣了解Squirrel.我相信它是Left 4 Dead 2使用的脚本语言.它比lua(使用对象和类)更先进,并且可以轻松嵌入到C++应用程序中,这听起来就像您正在寻找的那样.