在使用Luajit时,是使用FFI还是普通lua绑定更好?
When using Luajit, is it better to use FFI or normal lua bindings?
我刚开始用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绑定。
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 比使用 s.str().c_str() 更好的表达?
- 在使用Luajit时,是使用FFI还是普通lua绑定更好?