【发布时间】:2010-09-11 07:51:18
【问题描述】:
您使用 Luabind、toLua++ 或其他库(如果使用,是哪一个)或根本不使用?
每种方法的优缺点是什么?
【问题讨论】:
-
有人讨论过这个话题here。
您使用 Luabind、toLua++ 或其他库(如果使用,是哪一个)或根本不使用?
每种方法的优缺点是什么?
【问题讨论】:
我真的不同意“自己动手”的投票,将基本类型和静态 C 函数绑定到 Lua 是微不足道的,是的,但是当您开始处理表和元表时,情况就发生了变化;事情很快变得棘手。
LuaBind 似乎可以完成这项工作,但我有一个哲学问题。对我来说,如果你的类型已经很复杂,那么 Luabind 被大量模板化的事实不会让你的代码更容易理解,正如我的一个朋友所说“你需要 Herb Shutter 来找出编译消息” .再加上它依赖于 Boost,加上编译时间会受到严重影响,等等。
在尝试了一些绑定之后,Tolua++ 似乎是最好的。 Tolua 似乎并没有在开发中,因为 Tolua++ 似乎工作正常(加上一半的“Tolua”教程实际上是“Tolua++”教程,相信我:) Tolua 确实生成了正确的东西,可以修改源代码,它似乎可以处理复杂的情况(如模板、联合、无名结构等)
Tolua++ 最大的问题似乎是缺乏适当的教程、预设的 Visual Studio 项目,或者命令行有点难以理解(你的路径/文件不能有空格 -in Windows 至少 - 等等)不过,对我来说,它是赢家。
【讨论】:
部分回答我自己的问题:
Luabind:一旦您知道如何通过这种笨拙的模板语法来绑定方法和类,添加新绑定就非常简单明了。但是,luabind 具有显着的性能影响,不应该用于实时应用程序。比调用直接操作堆栈的 C 函数的开销大约高 5-20 倍。
【讨论】:
我不使用任何库。前段时间我使用 SWIG 公开了一个 C 库,但是开销太大,我停止使用它。
优点是更好的性能和更多的控制,但它需要更多的时间来编写。
【讨论】:
使用原始 Lua API 进行绑定——并保持简单。从 API 本身(AUX 库)和 Lua 作者的库中汲取灵感。
经过一些练习,原始 API 是最佳选择——最大的灵活性和最小的不必要开销。你已经得到了你想要的,没有更多,你需要它的方式。
如果您必须绑定大型第三方库,请使用自动生成器,如 tolua、tolua++(甚至针对特定情况使用您自己的生成器)。它会让你从体力劳动中解放出来。
我不推荐使用 Luabind。目前它的发展停滞不前(但开始恢复活力),如果你遇到一些极端情况,你可能会靠自己。 Luabind 也大量使用模板元编程。这可能(也可能不会)是不可接受的,具体取决于观点。
【讨论】: