【发布时间】:2013-04-14 10:49:12
【问题描述】:
我刚开始用 C++ 修改 Luajit,我发现它的 FFI 真的很容易使用,但我不确定它是否是所有(或至少大多数)情况的最佳解决方案。
那么是使用其中一个更好,还是只是偏好?
【问题讨论】:
标签: c++ scripting lua ffi luajit
我刚开始用 C++ 修改 Luajit,我发现它的 FFI 真的很容易使用,但我不确定它是否是所有(或至少大多数)情况的最佳解决方案。
那么是使用其中一个更好,还是只是偏好?
【问题讨论】:
标签: c++ scripting lua ffi luajit
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 绑定。
【讨论】:
正如 LuaJIT 网站上所说,通过 FFI 绑定的 C 函数调用可以进行 JIT 编译(相对于通过 Lua C/API 的调用),因此在性能方面 FFI 肯定更好。此外,使用 FFI,您可以在 Lua 中使用本机 C 类型进行计算,这可以在某些情况下进一步提高性能 (example)。
使用 FFI(如果您习惯于 C/API)时可能会遇到的一个问题是,您希望 C 函数返回多个值。在 Lua C/API 中这很简单,但在 FFI 的情况下,这需要一些技巧(例如,为 FFI C 调用编写包装函数)。但考虑到您获得的易用性和性能,我认为这是一个小缺点。
还有一些安全注意事项,例如,如果您的应用程序允许第三方脚本,因为他们滥用 FFI 会很高兴地在没有警告的情况下使您的应用程序崩溃。
【讨论】: