新的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 實在是工作太忙了~不好意思~

推薦閱讀:

caffe 入門(一)- before start: protobuf
Python 中a.py和./a.py兩種執行方式的不同之處是什麼?

TAG:Lua | protobuf | 客戶端開發 |