我刚开始使用C ++修改Luajit,我发现它的FFI非常易于使用,但我不确定它是否是所有(或至少大多数)案例的最佳解决方案。
那么使用其中一种更好,还是仅仅是偏好?
答案 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绑定。