ToLua#里面集成了这个东西,但是这个东西有坑
https://github.com/sean-lin/protoc-gen-lua
Google并没有提供转到lua的解决方案,所以目前的解决方案其实应该是先转成python,然后利用python转成lua吧,所以集成的时候要安装python。
但是这个东西有个坑,就是如果一个proto文件import另一个之后,尤其是里面还有repeated的情况的时候,就悲剧了,各种找不到。
git上有解决方案
https://github.com/sean-lin/protoc-gen-lua/pull/7
https://github.com/sean-lin/protoc-gen-lua/pull/22
这两个解决方案在proto文件定义比较少的message和enum的时候是可行的,但是当这个数量上升之后,就会有问题,生成的xxx_pb.lua文件中会有很多个local变量,而lua的一个区块中,local变量不能超过两百个。
解决方案么,要么不要用import,要么放弃这个方案,改用云风的pbc。
但是pbc也有问题,lua 5.1对于64位长整形的支持好像不太好,云风说这个问题他不修,要么就用lua 5.3。但是现在ToLua#用的是lua jit,这个东西用的是lua 5.1,所以如果要用pbc的话,在遇到uint64的时候要看看怎么处理了。可能需要改一下pbc的底层代码。(有说pbc不支持基本的默认值设置)
或者就等到lua jit改用lua5.3之后,ToLua#也改了之后再说。(据群里大神表示,lua5.3的性能远逊于luajit……所以暂时不改)
另外import超过200的问题也可以解决,就是拆proto文件,这个就要前后端协调解决了,这个问题管理员明确表示不修。
或者xlua支持lua5.3,直接用xlua集成pbc。
参考文献