你應該嘗試的12個殺手級Rust庫

多坦-納胡姆

·-6分鐘閱讀

我剛剛在我的一個較大的Rust專案中跨越了20K LOC,我想暫停一下並分享一些我所使用的偉大的Rust庫。

我還計劃在未來的文章中討論一些話題,比如在Rust與Go之間做決定,或者決定是否為你的團隊或專案採用Rust,以及在你決定接受它之後應該期待什麼。

更新:第二部分已經出來了。3萬行程式碼後在Rust中的10個關鍵學習內容

Clap

用Rust構建CLI工具是天作之合——看看ripgrep和Rust自己的Cargo。超快的啟動時間,較小的二進位制大小,型別安全的程式碼,執行時安全的二進位制,交叉編譯到你可能想要的幾乎所有架構。

要開始構建CLI工具,clap是一個非常棒的CLI庫,它是如此之好,我不認為有任何理由像其他語言中常見的那樣有一打替代品。事實上,如果你想嘗試Rust,我建議先看看rustup,然後試試這個庫,看看它能給你帶來什麼。

你應該嘗試的12個殺手級Rust庫

Serde

和clap一樣,serde是一個功能豐富、效能卓越的通用序列化庫。事實上,想想Java和。NET,我不記得有哪個序列化庫從各方面都做得這麼好——人體工程學

效能。

不要自己嘗試從/向檔案讀/寫,相反——先寫好你的資料型別,讓serde做所有的工作。作為獎勵,你可以在一切完成後混合和匹配資料格式(YAML、JSON)。

你應該嘗試的12個殺手級Rust庫

Reqwest

Reqwest遵循HTTP客戶端庫的黃金標準,如request、superagent和requests,並將其完美地應用於Rust。它是我的HTTP客戶端的首選庫,功能豐富且完整。

你應該嘗試的12個殺手級Rust庫

Rayon

Rayon是一個 “Rust的資料並行庫”,簡單地說,給它資料,它就知道如何把它分割成獨立的塊,讓你所有的CPU核心工作。

或者更簡單地說,給它一個列表,它就會在上面並行化對映,還有其他功能。這對CLI工具非常有用;不是所有的語言都能在命令列上實現並行化。

你應該嘗試的12個殺手級Rust庫

Slog

slog是一個非常完整的Rust日誌

套件

。它是一個核心,後面有很多外掛,比如終端輸出的term,JSON輸出的json等等。

你應該知道,還有log,它的目標是成為標準Rust的一部分,是一個更簡單的選擇。出於這個原因,我個人已經從slog轉到了log。

你應該嘗試的12個殺手級Rust庫

itertools

在你的列表上多加幾個運算子也無妨,尤其是許多或大多數運算子是零成本的。有了itertools,你就可以得到這些。如果你是一個像lodash這樣的庫的粉絲,那就太好了。

你應該嘗試的12個殺手級Rust庫

Hyper

hyper是一個用Rust編寫的快速HTTP實現,也是為Rust編寫的(相對於那些用C編寫的,涵蓋了動態語言的效能)。你會發現hyper幾乎出現在你使用的所有高階庫中,如果你直接使用它,感覺有點像Netty或Finagle。我發現自己既把hyper當作一個HTTP工具箱(使用其中的部分),也把它當作一個整體,在它上面建立一個伺服器。

你應該嘗試的12個殺手級Rust庫

猜猜看

什麼東西

使用Hyper?是Actix。Actix試圖變得更簡單,從我的經驗來看——它能做到。我經常使用Actix而不是Hyper,因為它更高階,對於服務的目的來說,更成熟。今天,我預設直接使用Actix而不是Hyper,除非我需要建立一些低級別的東西,或者有一個直接需要Hyper的庫(有很多)。

你應該嘗試的12個殺手級Rust庫

PyO3

PyO3是在Python中構建Rust庫(或者說是Rust中的Python庫? )的比較流行的庫之一。如果你想看看這種混合的結果,這裡有hyperjson——一個由Rust的serde支援的Python的JSON庫。

依靠Rust的安全性和Serde的效能,你幾乎不費吹灰之力就得到了一個安全的

最快的Python JSON庫之一。

想在3個步驟中改進Python嗎?

找到一個偉大的Rust 庫

用PyO3包住它

注意:PyO3(可能還有rust-cpython)可能有一些設計缺陷,可能會放棄安全。請閱讀這裡瞭解更多細節。

你應該嘗試的12個殺手級Rust庫

proptest

proptest是Rust的一個基於屬性的測試庫。自從我在短暫的Haskell工作中使用QuickCheck後,我就在我使用的每一種語言中尋找這類庫——這些庫提出它們會透過智慧地思考一組輸入資料來自動為你找到一個失敗的測試案例,使你的程式碼陷入困境。

你應該嘗試的12個殺手級Rust庫

libloading

對於那些想把Go或其他c-lib庫混入Rust前端的人來說,libloading使其變得簡單。

在過去的一年裡,我用Rust構建了大中型專案,我接受Rust生態系統的某些部分還沒有準備好,並且不吝於用其他語言(主要是Go)來構建這些專案——只是用libloading把所有東西都掛回Rust中。

你應該嘗試的12個殺手級Rust庫

效能

最後你應該知道的是,乾淨、簡單的Rust在預設情況下是非常快的。這裡有一個關於正確時間的談話。

還有幾個我幾乎一直喜歡使用的庫,它們在Rust已經提供的預設情況下給你帶來了不錯的效能提升。

regex - 一個Regex庫,速度

真的

很快,包括與其他程式語言相比。

jemalloc - 最快的記憶體分配器之一,在最近的Rust版本中被放棄了,轉而使用作業系統的預設值。我發現它比OSX的預設分配器更快,但只有在你知道你需要它的時候才使用它,因為它給你的二進位制檔案增加了一些重量(大約700kb)。

摘要

Rust,用一個詞來形容就是——強大。

但還有很多話要說。例如——與其他程式語言相比,Rust也是極其年輕的。