新的lua-protobuf发布啦

额,今天不小心睡了一整天……所以只好现在写文章了……话说回来旧版本的lua-protobuf bug实在是太多,所以我直接重写了一遍,而且为了不重蹈覆辙,加入了覆盖率测试,现在pb.c文件的覆盖率已经到了100%了,应该不会有那么多bug了……吧……

来讲讲新的设计吧。之前的做法仍然是pbc的那一套,就是提供一个完美的C接口,然后导入给Lua,后来发现这样做不到:Lua有很多种类型,这些类型和lua-protobuf的C接口不是一一对应的,那么要么写两份接口然后维护两份代码,要么就只能用很慢的转换来互相对应。所以新的实现摒弃了这一套,C的接口只提供了底层的支持,和Lua方面的对应全部放进了绑定里面,这样就只需要维护一套代码了,也为做覆盖率测试做好了准备。

内存模型方面也有改进,提供了Lua抄过来的字符串表,也就是说Lua风格的字符串现在是支持的了,基于引用计数的唯一字符串,因此哈希表也改进了,现在哈希表只支持数字key,因为字符串是唯一的,那么指针也是唯一的,直接比较指针就可以比较字符串了,所以哈希表的key做数字就足够了。

其他的改进在于终于提供了完整的英文文档,以及增加了纯Lua的protoc模块,这就意味着可以直接热更协议的文本内容了,不再需要编译成pb再热更(当然编译仍然是允许的)。protoc自带了谷歌的descriptor.proto的编译结果,所以谷歌的一些基础类型你可以直接encode/decode了,虽然对用户而言应该没什么用2333

啊大概就是这么多吧,大家用用看有什么新问题好了,测试上Lua 5.1/2/3 LuaJIT 2.0/1 都过了。

对了项目地址:github.com/starwing/lua

拖了半年的坑终于填了5555 实在是工作太忙了~不好意思~

编辑于 2018-01-29