与 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]为游戏开发用例优化的快速数学库
更多点击标题