我剛剛在我的一個較大的Rust項目中跨越了20K LOC,我想暫停一下并分享一些我所使用的偉大的Rust庫。
我還計劃在未來的文章中討論一些話題,比如在Rust與Go之間做決定,或者決定是否為你的團隊或項目采用Rust,以及在你決定接受它之后應該期待什么。
Clap
用Rust構建CLI工具是天作之合--看看ripgrep和Rust自己的Cargo。超快的啟動時間,較小的二進制大小,類型安全的代碼,運行時安全的二進制,交叉編譯到你可能想要的幾乎所有架構。
要開始構建CLI工具,clap是一個非常棒的CLI庫,它是如此之好,我不認為有任何理由像其他語言中常見的那樣有一打替代品。事實上,如果你想嘗試Rust,我建議先看看rustup,然后試試這個庫,看看它能給你帶來什么。
Serde
和clap一樣,serde是一個功能豐富、性能卓越的通用序列化庫。事實上,想想Java和.NET,我不記得有哪個序列化庫從各方面都做得這么好--人體工程學和性能。
不要自己嘗試從/向文件讀/寫,相反--先寫好你的數據類型,讓serde做所有的工作。作為獎勵,你可以在一切完成后混合和匹配數據格式(YAML、JSON)。
Reqwest
Reqwest遵循HTTP客戶端庫的黃金標準,如request、superagent和requests,并將其完美地應用于Rust。它是我的HTTP客戶端的首選庫,功能豐富且完整。
Rayon
Rayon是一個 "Rust的數據并行庫",簡單地說,給它數據,它就知道如何把它分割成獨立的塊,讓你所有的CPU核心工作。
或者更簡單地說,給它一個列表,它就會在上面并行化映射,還有其他功能。這對CLI工具非常有用;不是所有的語言都能在命令行上實現并行化。
Slog
slog是一個非常完整的Rust日志套件。它是一個核心,后面有很多插件,比如終端輸出的term,JSON輸出的json等等。
你應該知道,還有log,它的目標是成為標準Rust的一部分,是一個更簡單的選擇。出于這個原因,我個人已經從slog轉到了log。
itertools
在你的列表上多加幾個運算符也無妨,尤其是許多或大多數運算符是零成本的。有了itertools,你就可以得到這些。如果你是一個像lodash這樣的庫的粉絲,那就太好了。
Hyper
hyper是一個用Rust編寫的快速HTTP實現,也是為Rust編寫的(相對于那些用C編寫的,涵蓋了動態語言的性能)。你會發現hyper幾乎出現在你使用的所有高級庫中,如果你直接使用它,感覺有點像Netty或Finagle。我發現自己既把hyper當作一個HTTP工具箱(使用其中的部分),也把它當作一個整體,在它上面建立一個服務器。
猜猜看,什么東西不使用Hyper?是Actix。Actix試圖變得更簡單,從我的經驗來看--它能做到。我經常使用Actix而不是Hyper,因為它更高級,對于服務的目的來說,更成熟。今天,我默認直接使用Actix而不是Hyper,除非我需要建立一些低級別的東西,或者有一個直接需要Hyper的庫(有很多)。
PyO3
PyO3是在Python中構建Rust庫(或者說是Rust中的Python庫? )的比較流行的庫之一。如果你想看看這種混合的結果,這里有hyperjson--一個由Rust的serde支持的Python的JSON庫。
依靠Rust的安全性和Serde的性能,你幾乎不費吹灰之力就得到了一個安全的、最快的Python JSON庫之一。
想在3個步驟中改進Python嗎?
- 找到一個偉大的Rust 庫
- 用PyO3包住它
- 注意:PyO3(可能還有rust-cpython)可能有一些設計缺陷,可能會放棄安全。
proptest
proptest是Rust的一個基于屬性的測試庫。自從我在短暫的Haskell工作中使用QuickCheck后,我就在我使用的每一種語言中尋找這類庫--這些庫提出它們會通過智能地思考一組輸入數據來自動為你找到一個失敗的測試案例,使你的代碼陷入困境。
libloading
對于那些想把Go或其他c-lib庫混入Rust前端的人來說,libloading使其變得簡單。
在過去的一年里,我用Rust構建了大中型項目,我接受Rust生態系統的某些部分還沒有準備好,并且不吝于用其他語言(主要是Go)來構建這些項目--只是用libloading把所有東西都掛回Rust中。
性能
最后你應該知道的是,干凈、簡單的Rust在默認情況下是非常快的。這里有一個關于正確時間的談話。
還有幾個我幾乎一直喜歡使用的庫,它們在Rust已經提供的默認情況下給你帶來了不錯的性能提升。
- regex - 一個Regex庫,速度真的很快,包括與其他編程語言相比。
- jemalloc - 最快的內存分配器之一,在最近的Rust版本中被放棄了,轉而使用操作系統的默認值。我發現它比OSX的默認分配器更快,但只有在你知道你需要它的時候才使用它,因為它給你的二進制文件增加了一些重量(大約700kb)。
摘要
Rust,用一個詞來形容就是--強大。
但還有很多話要說。例如--與其他編程語言相比,Rust也是極其年輕的。
原文地址:https://www.toutiao.com/a7012499999946883597/