6

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

那么使用其中一个更好,还是只是偏好?

4

2 回答 2

12

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

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

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

于 2013-04-21T15:11:09.287 回答
1

WRT 到 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 绑定。

于 2016-10-13T13:21:45.117 回答