Rust 生態系統的非官方指南
與 Python 和 Go 等其他程式語言相比,Rust 的標準庫非常小,僅包含標準庫中的核心資料結構,所有其他功能都外包給 3rd 方生態系統 crate,新 Rust 開發人員的一個常見抱怨是他們不知道從哪裡開始:他們應該使用哪些crate,應該信任哪些crate。
另請參閱lib.rs,它採用更自動化的方法(按下載次數排序 crate)並且還具有出色的搜尋功能。
用於處理 Rust 專案的開發人員工具:
工具鏈管理:
- rustup:安裝、管理和升級 rustc、cargo、clippy、rustfmt 等的版本。
linter:
- clippy:官方的 Rust linter。
程式碼格式:
- rustfmt:官方的 Rust 程式碼格式化程式。
交叉編譯:
管理依賴項:
- cargo-edit向 cargo 新增“cargo add”、“cargo rm”和“cargo upgrade”命令
- cargo-outdated查詢具有可用更新的依賴
- cargo-audit檢查依賴項以獲取報告的安全漏洞
- cargo-license列出所有依賴項的許可證
- cargo-deny對您的程式碼和依賴項執行策略。
測試:
- cargo-nexttest更快、更好的測試
基準測試:
- 標準 [docs]用於基準測試庫的統計準確基準測試工具
- 用於對已編譯二進位制檔案進行基準測試的超精細工具(類似於 unix time 命令但更好)
效能
- cargo-flamegraph執行火焰圖生成
- dhat [文件]堆記憶體分析
- cargo-show-asm [docs]為 Rust 函式列印生成的程式集
除錯宏:
- cargo-expand允許您檢查宏擴充套件為的程式碼
釋出自動化:
- cargo-releaseHelper 用於釋出新的 crate 版本。
持續整合:
- rust-toolchain (github action)透過 rustup 安裝 Rust 元件的 Github 操作
- rust-cache (github action)用於快取編譯工件並加速後續執行的 Github 操作。
通用用途
隨機數:
時間和日期:
不幸的是,對於時間和計時之間哪個最好,沒有明確的答案。在這兩者之間自行評估,但請放心,兩者都是值得信賴且維護良好的。
序列化(JSON、YAML 等):
有關支援的格式,請參見此處。
常用表達:
- 正規表示式 [docs]事實上的標準正規表示式庫。非常快,但不支援更高階的功能,例如回溯。
- fancy_regex [docs]如果需要,請使用正規表示式不支援的回溯等功能
UUID:
臨時檔案:
Gzip(解)壓縮:
插入排序的Map:
堆疊分配的陣列:
- arrayvec [docs]僅以 固定容量堆疊分配的陣列
- smallvec [docs]堆疊分配的陣列,如果超過固定堆疊容量,則回退到堆
- tinyvec [docs]在 100% 安全的 Rust 程式碼中堆疊分配的陣列,但需要專案來實現 Default trait。
HTTP 請求:
錯誤處理
對於應用:
- anyhow [docs]提供了一個可以儲存任何錯誤的盒裝錯誤型別,以及用於生成應用程式級堆疊跟蹤的幫助程式。
- color-eyre [docs]一個分支,可以讓您更好地控制生成的錯誤訊息的格式。如果您需要向終端使用者顯示錯誤訊息,建議使用。否則無論如何都更簡單。
對於庫包:
日誌記錄
基於文字的日誌記錄:
結構化日誌記錄:
語言擴充套件
擴充套件語言和/或標準庫功能的通用實用程式。
惰性靜態變數初始化:
- once_cell [docs]具有更符合人體工程學的 API 的更新。有望納入標準庫。應該是所有新專案的首選。
- lazy_static [docs]較舊。API 不太方便,但 crate 是穩定和維護的。
迭代器助手:
宏助手:
抽象不同的數字型別:
安全型別轉換:
位標誌:
系統
用於與底層平臺/作業系統的低階互動
記憶體對映檔案:
庫:
視窗(作業系統):
*nix (作業系統):
聯網
TCP、HTTP、GRPc 等。以及進行非同步網路所需的執行器。
非同步執行器
要在 Rust 中使用 async-await 進行非同步程式設計,您需要一個執行時來執行驅動您的 Futures。
一般用途:
- tokio [docs]Rust 生態系統中最古老的非同步執行時,並且仍然得到最廣泛的支援。推薦用於新專案。
- async-std [docs]一個與 tokio 非常相似的新選項。它的 API 更接近於 std 庫,但它沒有 Tokio 那麼多的吸引力。
io_uring:
HTTP
HTTP 客戶端和伺服器庫,以及較低階別的構建塊。
型別和介面:
低階 HTTP 實現:
HTTP 客戶端:
HTTP 伺服器:
- axum [docs]一個最小且符合人體工程學的框架。tokio 專案的官方部分。推薦用於大多數新專案。
- actix-web [docs]一個以效能為中心的框架。所有 Rust 框架都很快,但如果您需要絕對最高的效能,請選擇 actix-web。
GraphQL 伺服器:
- async-graphql [docs]一個完全符合規範的高效能 graphql 伺服器庫。
Socket網路套接字
本節包括供您僅使用 websockets 的庫。但是請注意,上一節中的許多 HTTP 伺服器框架也支援 websockets
低階:
- tungstenite-rs [docs]其他人構建的低階 crate
一般用途:
- tokio-tungstenite [docs]如果您使用的是 tokio 執行器
- async-tungstenite [docs]如果您使用的是 async-std 執行器
gRPC
資料庫
SQL 資料庫
多資料庫:
ORM:
- sea-orm [文件]推薦。建立在 sqlx 之上。還有一個相關的 sea-query crate,它提供了一個沒有完整 ORM 功能的查詢構建器。
- diesel [docs]穩定版本僅同步。預釋出非同步分支目前是 AGPL。在某些情況下可以提供更好的效能。
Postgres:
- sqlx [文件]
- tokio-postgres [docs]Postgres 特定的庫。效能優於 SQLx
MySQL:
- sqlx [文件]
- mysql_async [docs]有一個設計不佳的 API。更喜歡 MySQL 的 SQLx
SQLite:
微軟 SQL:
甲骨文:
其他資料庫
實用程式
連線池:
終端渲染
用於精美的終端渲染和 TUI。這裡推薦的 crates 可以跨平臺工作(包括 windows)。
併發
資料結構
併發HashMap:
有關併發 HashMap 的比較基準,請參閱conc-map-bench。
channel:
有關何時使用非同步特定通道與通用通道的說明,請參閱communication-between-sync-and-async-code 。
- crossbeam_channel [docs]可用的絕對最快的通道實現。實現類似 Go 的“選擇”功能。
- flume [docs]比 crossbeam_channel 更小更簡單,幾乎一樣快
- postage [docs]與非同步程式碼完美整合的頻道
平行計算:
圖形
圖形使用者介面
GTK 和 Tauri 可能是唯一可以被描述為生產就緒且沒有警告的選項。Rust 原生選項可用於簡單專案,但仍然很不完整。
GTK:
基於網路的圖形使用者介面:
Rust 原生 GUI:
- iced [docs]具有良好 API 的保留模式 UI。它可用於基本應用程式,但缺少許多功能,包括多個視窗、圖層和正確的文字渲染。
- egui [docs]即時模式 UI。很多小部件。如果您的需求很簡單並且您不需要自定義外觀和感覺,那麼開箱即用的最實用
- druid [docs]比 iced 或 egui 有更好的基礎,但是 API 非常笨重且文件記錄不充分。
- slint [docs]最完整的 rust-native UI 庫。但請注意,它是雙重 GPL3/商業許可。
檔案對話方塊:
遊戲開發
遊戲引擎:
- bevy [docs]迄今為止最發達的 Rust 遊戲引擎。它還為時過早,但已經令人印象深刻並且非常有用。
- ggez [docs]僅適用於 2d 遊戲的更簡單的選項。
- 3d 數學glam [docs]為遊戲開發用例最佳化的快速數學庫
更多點選標題
相關文章
- Hadoop工具生態系統指南Hadoop
- NoSQL生態系統SQL
- 產品的生態系統
- Hadoop 生態系統Hadoop
- hadoop生態系統Hadoop
- 【轉】Nosql生態系統SQL
- 作業系統:計算機的生態系統作業系統計算機
- 豐富的包(packages)生態系統Package
- 國產作業系統的生態之路作業系統
- Hadoop的生態系統 - KEYWORDHadoop
- LinkedIn的生態系統–資訊圖
- 雲端計算生態系統
- 集團資訊生態系統
- 初入Hadoop生態系統Hadoop
- Hadoop生態系統介紹Hadoop
- 圖解:RTB廣告生態系統圖解
- .NET 生態系統的蛻變之 .NET 6
- 商業生態系統角色定位與系統整合
- 聊聊鴻蒙系統與開發者生態前景鴻蒙
- hadoop 之Hadoop生態系統Hadoop
- Laravel 生態系統Forge Vapor Nova EnvoyerLaravelVapor
- 全方位解析俄語系勒索軟體的生態系統
- [譯] 構建未來的設計生態系統
- SuperAwesome:兒童遊戲生態系統是如何改變的遊戲
- [譯] Security Token 生態 — 專案指南
- 深度探索MMO生態構建——社交系統
- EOS生態系統技術開發搭建
- LinkedIn開放API 打造生態系統API
- 簡說Python生態系統的14年演變Python
- 自由經濟系統的設計(二):生態設計
- .NET 生態系統的蛻變之 .NET 6雲原生
- 移動5年 Android生態系統的演進Android
- Orleans - 1 .NET生態構建分散式系統的利器分散式
- 保險業報告:全面瞭解生態系統
- 2018 JVM生態系統報告JVM
- JVM生態系統報告2018JVM
- 國產作業系統生態發展趨勢作業系統
- 黑莓CEO首次承認生態系統失敗