daybits的rust version

最近用rust重寫了daybits的java版。已經在淘系一些場景大規模使用,性能比溫少的java版本快30%以上。java

開源在https://github.com/maomaoguan/daybits4rgit

整個rust編寫過程仍是比較鬧心的。rust是門比較有趣的語言,他的pre-compilation很強大。C++或是Java運行期的一些問題,C++的內存釋放問題,Java的GC避免,這些都在rust的編譯過程會被抓出來,讓你編譯不過。github

不過,也爲此付出了代價,好比爲了確保Vec操做的ownership還有避免髒數據,使用Vec會很容易出現Data Moves的報錯。對於我這種寫慣了Java的,費解了好長時間。後來明白,由於rust擔憂你在index方式遍歷整個數組過程當中出現,1) 數組發生插入等操做 2) 因其餘操做引發的Vec內部指針從新申請,致使你引用了非法的指針。檢測到風險直接編譯不過。取而代之的是,rust給出了幾種解法,pull/pop方式遍歷數組等。 數組

還有不少對於Java同窗來講比較費解的編譯不過,好比borrow的對象由於ownership關係不能作mut等操做。函數

針對溫少的Java版本,從代碼結構上也作了進一步優化,哪怕只有百分之幾,這個函數在數據計算場景的調用量是驚人的大。好比Calendar的存儲上進一步壓縮空間。在mac air上測試性能對好比下:性能

Java版本(每百萬次調用耗時ms)
case1_parse-> cost 260
case1_output-> cost 389
case1_first-> cost 97
case1_last-> cost 29
case1_count-> cost 69
case2_or-> cost 4472
case2_and-> cost 5265.112212測試

rust版本(每百萬次調用耗時ms)優化

case1_parse-> cost 337.491378
case1_output-> cost 232.794272
case1_first-> cost 115.571636
case1_last-> cost 16.853881
case1_count-> cost 43.562107
case2_or-> cost 2534.386394
case2_and-> cost 2435.115885指針

相關文章
相關標籤/搜索