用cocos2dx并选择lua开发游戏的时候,为什么要使用tolua绑定c/c++代码,而不直接用luajit的ffi?
优缺点各是什么呢? FFI 只能绑定 C 的结构和函数,所以要用 FFI 来绑定 C++ 接口,那么需要编写一个 C++ -> C 的封装层。具体参考:LuaJIT FFI/C++ binding, best approach?
另外 FFI 需要 JIT 才能获得良好的性能,而在 iOS 上由于苹果的限制是无法启用 JIT 的,此时 FFI 性能就不够理想了。
------ 华丽的分割线 ------
不过这些都不是根本原因。其实也就是懒,tolua++ 多省事儿啊,所以一直用到现在。
今年计划用一个新 luabinding 来替代 tolua++,目标如下:
- 高性能
- 容易使用
- 最小化中转层的代码量(缩减程序包体积)
现在 cocos2d-x 3.0 引入的 binding-generator 已经部分替代了 tolua++ 的功能,但仍然需要依赖 tolua++ 的 API 才能工作。而 tolua++ 已经很多年没更新了,其实问题是不少的,所以希望这个新的 luabinding 能够完全替代 tolua++。
当然,这个新的 luabinding 不一定要自己写,因为已经有许多开源项目可供选择了。下面的页面有一大堆选择:
lua-users wiki: Binding Code To Lua luajit不跨平台啊 因为脚本语言本身的限制,仅仅使用ffi可能无法使用C/C++库的某些内容,比如:库需要一个确保自身线程安全的回调函数,你不会觉得这能靠ffi.cast搞定吧。
当然你也可以一条路走到黑,先用ffi接个编译器,现场编译C代码来生成函数。
页:
[1]