使用Luajit时,使用FFI或普通的lua绑定是否更好?

时间:2013-04-21 13:45:31

标签: c++ scripting lua ffi luajit

我刚开始使用C ++修改Luajit,我发现它的FFI非常易于使用,但我不确定它是否是所有(或至少大多数)案例的最佳解决方案。

那么使用其中一种更好,还是仅仅是偏好?

2 个答案:

答案 0 :(得分:11)

正如在LuaJIT网站上所述,通过FFI绑定的C函数调用可以进行JIT编译(而不是通过Lua C / API调用),因此在性能方面,FFI肯定更好。此外,使用FFI,您可以使用本机C类型在Lua中进行计算,这可以在某些情况下进一步提高性能(example)。

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

如果您的应用程序允许第三方脚本编写,还有一些安全注意事项,例如,因为误用FFI会很快崩溃您的应用程序而不会发出警告。

答案 1 :(得分:1)

WRT to C ++,这是一个关于调用C ++的lua-l列表中的一个线程,它触及了这个: http://lua-users.org/lists/lua-l/2011-07/threads.html#00492

除了WB的答案:它取决于您使用的是JIT编译器还是解释器。您无法在某些平台上运行JIT(例如iOS,由于许可限制)。因此,使用LuaJit FFI可能不会快得多(因为使用解释器时速度要慢8到10倍),但LuaJit解释器的速度比Lua VM快2-3倍。

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