在使用Luajit时,是使用FFI还是常规的Lua绑定更好呢?

我刚开始尝试使用用 C++ 和 Luajit 进行编程,我发现其 FFI 很容易使用,但我不确定它是否是所有(或至少大多数)情况下最好的解决方案。

所以是更好地使用其中之一,还是仅仅是个人偏好?

点赞
用户2198692
用户2198692

如LuaJIT网站所述,通过FFI绑定的C函数调用可以进行JIT编译(与通过Lua C/API进行的调用相反),因此在性能方面FFI肯定更好。此外,使用FFI,您可以在Lua中使用本机C类型进行计算,在某些情况下还可以进一步提高性能([示例](http://www.freelists.org/post/luajit/Suggestions-for-how-to-optimize-around-persistent-type-instability,5))。

使用FFI时可能会遇到的一个问题(如果您习惯使用C / API),就是当您希望一个C函数返回多个值时。在Lua C / API中,这很简单,但在FFI的情况下,这需要一些技巧(例如编写FFI C调用的包装器函数)。但我认为,考虑到易于使用和性能,这是一个小缺点。

还有一些安全注意事项,例如如果您的应用程序允许第三方脚本编写,那么可能会有误用FFI的风险,这将在没有警告的情况下导致应用程序崩溃。

2013-04-21 15:11:09
用户3233
用户3233

关于调用 C++ 的问题,lua-l 列表中有一篇关于此的讨论: http://lua-users.org/lists/lua-l/2011-07/threads.html#00492

除了 WB 的回答之外:这取决于您使用的是 JIT 编译器还是解释器。在某些平台上您无法运行 JIT(例如由于许可限制,iOS 就是这样)。因此,使用 LuaJit FFI 可能并不比使用 Lua 解释器快得多(因为后者的速度约为它的 8-10 倍),但是 LuaJit 解释器的速度却比 Lua VM 快 2-3 倍。

我也对从 Lua 调用 C++ 感兴趣,目前正在评估 LuaJit。我使用 Ponder 生成 Lua 绑定。

2016-10-13 13:21:45