脚本和主机应用程序之间的责任

时间:2011-07-04 15:06:37

标签: c scripting binding lua

我一直在努力决定如何将Lua嵌入到我的应用程序中以实现脚本和扩展。 我有一个类来处理具有类似Lua表的结构的对象。 (特别是boost::any的哈希映射) Lua脚本将与这些对象及其哈希映射进行交互。

我越来越清楚,我可以在Lua中编写这个类的全部或大部分(并从C访问它),但我不确定这样做的后果,特别是关于创建的内存使用许多表来表示哈希映射。 得出这个结论的原因是我想在这些C对象中存储来自Lua的高级结构,但是每次将表存储到C对象或从C对象检索时,这样做都需要显式的表序列化。从理论上讲,这种方法可以在权衡中提供更少的内存使用,从而实现更高的每次访问延迟。

在这种情况下可能采取的行动方案及其优缺点是什么?

2 个答案:

答案 0 :(得分:2)

我最终决定使用LuaJIT Lua 中对我的大部分应用程序进行编程,原因有很多,其中包括:

  • 我试图通过 C / C ++ 实现的目标已经在 Lua ,特别是哈希表和元变量,我基本上重新发明了轮子。
  • 我做了一些简单的基准测试,发现我的大多数脚本总是会经常以非常频繁的方式调用 C 并返回 Lua ,并且我可以优化通过利用字节码编译器将运行时焦点限制在 Lua ,可以解决很多问题。
  • 根据我对即时编译主题的有限经验和研究, LuaJIT (2.0.0-beta8)证明足够快,足以满足我的需求,而且很可能接近 C ++ 类似数据结构的内存使用级别。
  • LuaJIT 也可以作为香草 Lua 的直接替代品,并且易于构建;我所要做的就是链接到它的库以使其运行起来。

我觉得通过这样做,我失去了对我的项目的“权力用户”控制权,但我认为这是由于我对 Lua 的错综复杂的经验与我的知识相比 C ++

答案 1 :(得分:0)

如果我已经正确理解了你的问题,你想简单地使用Lua来避免必须序列化数据(进出文件,我猜)。如果是这种情况,你可以使用Lua,但对我来说似乎有点矫枉过正。

回答你的上一个问题,Lua将占用比本机C更多的内存,并且运行速度会更慢(Lua VM比本机C慢,即使你只使用C来操纵从Lua到C的“跳跃”反之亦然会以Lua堆栈中的大量推送和弹出形式处罚。

如果您希望序列化更容易,可能最好使用直接与C串行化的库。例如,json