在使用Luajit时,是使用FFI还是普通lua绑定更好?

When using Luajit, is it better to use FFI or normal lua bindings?

本文关键字:lua 更好 绑定 FFI Luajit      更新时间:2023-10-16

我刚开始用c++修补Luajit,我看到它的FFI真的很容易使用,但我不确定它是否是所有(或至少大多数)情况下的最佳解决方案。

那么,是使用其中一个更好,还是使用另一个更好呢?

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

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

还有一些安全考虑,例如,如果您的应用程序允许第三方脚本,因为他们滥用FFI将很高兴地使您的应用程序崩溃而没有警告。

WRT到c++,这里有一个关于调用c++的lua-l列表的线程,涉及到这个:00492年http://lua-users.org/lists/lua-l/2011-07/threads.html

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

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