Rust生态系统非官方指南(翻译)
本文是Blessed - An unofficial guide to the Rust ecosystem的翻译。
blessed.rs 设什么?
Rust 的标准库要比 Python 或 Go 小得多。这些语言对 HTTP(S)、JSON、时区、随机数和异步 IO 等都提供了 "内置"支持。另一方面,Rust 可以从 crates.io 生态系统和 Cargo 软件包管理器中获得这些支持。但是,由于有近 10 万个 crates 可供选择,Rust 新开发者经常抱怨不知道从何入手,不知道应该使用哪些 crates,不知道应该信任哪些 crates。本列表试图回答这些问题。
另请参阅 lib.rs,它采用了一种更为自动化的方法(根据下载数量对板条箱进行排序),同时还具有出色的搜索功能。
工具
用于处理 Rust 项目的开发人员工具。
| 应用场景 | 推荐的 crate |
|---|---|
工具链管理 | rustup 安装、管理和升级 rustc、cargo、clippy、rustfmt 等版本。 |
代码检查 | clippy 官方 Rust linter。 cargo-semver-checks 检查您的 crate 版本是否存在语义版本控制违规。 |
代码格式化 | rustfmt 官方 Rust 代码格式化程序。 |
交叉编译 | cross 使用 Docker 容器进行无缝交叉编译。 cargo-zigbuild 使用 Zig 作为链接器,可轻松进行交叉编译。 |
依赖管理 | cargo-edit cargo命令添加了 cargo upgrade 和 cargo set-version。 cargo-outdated 查找有可用更新的依赖项。 cargo-audit 检查依赖项是否存在已报告的安全漏洞。 cargo-license 列出所有依赖项的许可证。 cargo-deny 对代码和依赖关系执行策略。 |
测试 | cargo-nextest 更快、更好的测试运行器。 insta 支持内联快照的快照测试。 |
基准测试 | criterion 用于基准测试库的统计准确的基准测试工具。 divan 简单而强大的基准测试库,具有分配分析功能。 hyperfine 用于对编译后的二进制文件进行基准测试的工具(类似于 unix time 命令,但效果更好)。 |
性能 | cargo-flamegraph 生成执行火焰图。 dhat 堆内存分析。 cargo-show-asm 用于显示为 Rust 源代码生成的 Assembly、LLVM-IR、MIR 和 WASM。 |
调试宏 | Rust AnalyzerRust Analyzer 还允许你在编辑器中直接扩展宏。 cargo-expand 允许您检查宏扩展到的代码。 |
发布自动化 | cargo-release发布 cargo新版本的助手。 Release-plz 通过 CI发布Rust crates的Release PR。 |
持续集成 | rust-toolchain (github action)使用 Github Action通过rustup安装Rust组件。 rust-cache (github action) 使用 Github Action生成编译缓存,并加速运行。install-action (github action) 使用 Github Action安装开发工具(主要来自Github发行版)。 |
常用的
每个人都应该知道的常用crate
用于处理 Rust 项目的开发人员工具。
| 应用场景 | 推荐的 crate |
|---|---|
随机数 | rand 从标准库中分离出来的事实上的随机数生成库 |
时间和日期 | 遗憾的是,在time和chrono之间,并没有哪个比另一个更好。请自行评估这两个库。不过,这两个库都是值得信赖的并且维护的都很好。time 一个很小,很简单的库。如果能够满足你的需求,那么它将是你的首选,但是它提供的功能非常的有限。 chrono 一个非常完整的时间库,它提供了很多功能,同时也包含了很多不必要的功能,因此也更为复杂。 |
序列化(JSON、YAML等) | serde 事实上的标准序列化库。请与 serde_json 等子库结合使用,以满足您使用的特定格式。 |
正则表达式 | regex 事实上的标准 regex 库。速度非常快,但不支持回溯等更高级的功能。fancy-regex 如果需要回溯等 regex 不支持的功能,请使用该库。 |
UUID | uuid 实现生成和解析 UUID 以及一系列实用功能。 |
临时文件 | tempfile 同时支持临时文件和临时目录。 |
(解)压缩 | flate2 默认使用存 Rust 实现,通过使用 feature 可使用系统 zlib。 |
有序插入Map | indexmap 单独跟踪插入顺序的 HashMap,可让您按照该顺序有效地遍历其元素。 |
栈分配的数组 | arrayvec 只采用固定容量栈分配的数组。 smallvec 栈分配的数组,如果超过固定栈容量,则使用堆分配。 tinyvec 使用100%的安全 Rust进行栈分配的数组,但是要求实现Default trait。 |
HTTP 请求 | reqwest 全功能 HTTP客户端,支持在同步和异步两种方式,需要tokio运行时。ureq 最小化的同步 HTTP客户端,注重简单和最小化依赖。 |
错误处理
更容易处理错误的 ctares
