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 Analyzer Rust 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 客户端,注重简单和最小化依赖。 |