找回密码
 立即注册
查看: 292|回复: 3

用cocos2dx并选择lua开发游戏的时候,为什么要使用tolua绑定c/c++代码,而不直接用luajit的ffi?

[复制链接]
发表于 2021-8-10 16:06 | 显示全部楼层 |阅读模式
优缺点各是什么呢?
发表于 2021-8-10 16:13 | 显示全部楼层
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
发表于 2021-8-10 16:20 | 显示全部楼层
luajit不跨平台啊
发表于 2021-8-10 16:25 | 显示全部楼层
因为脚本语言本身的限制,仅仅使用ffi可能无法使用C/C++库的某些内容,比如:库需要一个确保自身线程安全的回调函数,你不会觉得这能靠ffi.cast搞定吧。
当然你也可以一条路走到黑,先用ffi接个编译器,现场编译C代码来生成函数。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:40 , Processed in 0.092268 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表