Alibaba增强开源项目Wax

Wax是什么?

0?wx_fmt=png0?wx_fmt=png

还记得当年在iPhone上火爆无比的游戏《愤怒的小鸟》吗,它就是基于Wax框架编写的。WaxLua脚本语言与原生Objective-C底层runtime结合起来,使得你可以用Lua语言来开发iPhone应用。


为什么使用Wax

  • 使用Lua编写。Lua是一个简洁、轻量、可扩展的脚本语言,在大量的游戏中使用,它的体积小、速度快。Lua语法简单、学习速度快、开发效率高。

  • Wax是免费的、开源的。与其他一些基于Lua的移动开发解决方案不同,Wax是个开源框架,只需要你花一点点时间就可以上手,不需要花钱。Wax源代码可免费获取,你总是可以改动源代码,以满足自己的需要。

  • 可以利用原生API。这意味着你的应用程序在外观感觉上总是如同原生应用程序,同时你可以在Lua里使用所有的Objective-C库。

  • 没必要管理内存。不再需要操心内存分配之类的事务,Wax为你处理这一切。

  • 增强app的灵活性。由于Lua是脚本语言,所有Lua实现的功能都可以在不重新编译、发布的情况下更新。

  • bugfix。当原生代码出现bug的时候,可以将对应的原生方法替换为Lua的函数,在此Lua函数里编写正确的逻辑,从而修复bug


我们对Wax做了什么增强?

线程安全

Wax本身的设计的场景是针对主线程的UI等逻辑,当我们去替换一个会多线程异步调用的方法时就会出现crash,这样一来就会削弱使用的场景,所以我们给Wax在合适的地方进行多线程保护使其具有线程安全特性。


64位适配

iPhone5s开始,苹果推出了64cpu架构,从今年2月份开始陆续要求app必须支持64位。Lua字节码也有32位与64位编译区分,所以原来的Wax stdlib库在64位无法运行,我们修改原有的Lua字节码打包逻辑使其能在64位正常运行。 Wax的核心逻辑是替换函数,但原思路利用了32位函数入栈的特性,导致此方法在64位彻底失效。为此我们重新寻找新的函数替换思路,确保在64位也能正常运行。


block传递、调用

Objective-C中,block以其简洁、易用的特性使用越来越普遍,而Wax虽有Luaclosure却没有支持LuaOC block互通,这会使我们无法使用带有block的方法,为此我们对block的原理进行彻底的分析,同时绞尽脑汁利用32\64位函数参数入栈的特性,最终支持高达7个参数(当然,也可以支持更多)的block传递、调用。


get/set私有成员变量

Wax支持属性的get/set,但似乎忽略了私有成员变量,而我们的代码大量使用了私有成员变量,所以必须支持。庆幸的是Objective-C runtime有操作私有成员变量的api,因此我们在上层对NSObject扩展一些get/set的方法就可以支持私有成员变量的操作了。


常用C函数

要想在Lua里调用C函数,只需要在C代码里注册一下即可,所以看起来支持C函数很简单。但如果我们要把OC框架里的常用的几十、几百个函数都要支持呢?人肉一个个的写显然会显得乏力。所以我们将OC框架里的函数从文档拷贝出然后用脚本预处理,再使用tolua++进行自动代码生成、绑定,这样一来即使支持更多C函数也很简单了。


Lua代码调试

编写简单的Lua代码,只需要几个print 打点日志就可以判断逻辑的执行是否正确。但如果是量多、复杂的代码时,只能打日志就会很痛苦了。所以我们将开源届比较强大的Lua调试器ZeroBraneStudio引进,再配合mobdebug远程调试脚本,适配到Wax,就实现了Lua代码在Wax框架中的调试,支持常用的断点、单步,当然还有更方便的观察变量、显示调用栈、控制台调用等


bug修复

由于Wax2013年就不再维护,而我们的使用场景又多、又复杂,所以也会发现里面的不少bug,当然也做了修复。


感谢Corey Johnson

Wax是开源代码中LuaObjective-C桥接得最好的库,感谢Wax的作者@Corey Johnson 创造了这个伟大的项目。我们已将增强、改进后的代码提交到https://github.com/alibaba/Wax (点击文章底部阅读原文即可访问)。很荣幸Wax的作者在其github上改写了主页,将链接指向了Alibaba,这是对我们的一种莫大的肯定。

0?wx_fmt=png

我们将接过Wax的接力棒,持续开发和维护此库。同时也欢迎有兴趣的同学一起使用、维护、贡献代码。


点击阅读原文,访问:https://github.com/alibaba/Wax

MTT是手机淘宝技术团队(Mobile Taobao Tech team)的英文缩写,欢迎关注手机淘宝技术团队,一起交流分享无线技术,共创移动开发无限未来!扫描微信二维码关注我们!我们将分享更多的独家技术细节!

0?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值