Rust生态系统非官方指南(翻译)

本文是Blessed - An unofficial guide to the Rust ecosystem的翻译。

blessed.rs 设什么?

Rust 的标准库要比 PythonGo 小得多。这些语言对 HTTP(S)JSON时区随机数异步 IO 等都提供了 "内置"支持。另一方面,Rust 可以从 crates.io 生态系统和 Cargo 软件包管理器中获得这些支持。但是,由于有近 10 万个 crates 可供选择,Rust 新开发者经常抱怨不知道从何入手,不知道应该使用哪些 crates,不知道应该信任哪些 crates。本列表试图回答这些问题。

另请参阅 lib.rs,它采用了一种更为自动化的方法(根据下载数量对板条箱进行排序),同时还具有出色的搜索功能。

工具

用于处理 Rust 项目的开发人员工具。

应用场景推荐的 crate
工具链管理rustup
安装、管理和升级 rustccargoclippyrustfmt 等版本。
代码检查clippy
官方 Rust linter
cargo-semver-checks
检查您的 crate 版本是否存在语义版本控制违规。
代码格式化rustfmt
官方 Rust 代码格式化程序。
交叉编译cross
使用 Docker 容器进行无缝交叉编译。
cargo-zigbuild
使用 Zig 作为链接器,可轻松进行交叉编译。
依赖管理cargo-edit
cargo命令添加了 cargo upgradecargo 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 源代码生成的 AssemblyLLVM-IRMIRWASM
调试宏Rust Analyzer
Rust Analyzer 还允许你在编辑器中直接扩展宏。
cargo-expand
允许您检查宏扩展到的代码。
发布自动化cargo-release
发布cargo新版本的助手。
Release-plz
通过CI发布Rust cratesRelease 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
从标准库中分离出来的事实上的随机数生成库
时间和日期遗憾的是,在timechrono之间,并没有哪个比另一个更好。请自行评估这两个库。不过,这两个库都是值得信赖的并且维护的都很好。
time
一个很小,很简单的库。如果能够满足你的需求,那么它将是你的首选,但是它提供的功能非常的有限。
chrono
一个非常完整的时间库,它提供了很多功能,同时也包含了很多不必要的功能,因此也更为复杂。
序列化(JSON、YAML等)serde
事实上的标准序列化库。请与 serde_json 等子库结合使用,以满足您使用的特定格式。
正则表达式regex
事实上的标准 regex 库。速度非常快,但不支持回溯等更高级的功能。
fancy-regex
如果需要回溯等 regex 不支持的功能,请使用该库。
UUIDuuid
实现生成和解析 UUID 以及一系列实用功能。
临时文件tempfile
同时支持临时文件和临时目录。
(解)压缩flate2
默认使用存 Rust 实现,通过使用 feature 可使用系统 zlib
有序插入Mapindexmap
单独跟踪插入顺序的 HashMap,可让您按照该顺序有效地遍历其元素。
栈分配的数组arrayvec
只采用固定容量栈分配的数组。
smallvec
栈分配的数组,如果超过固定栈容量,则使用堆分配。
tinyvec
使用100%的安全Rust进行栈分配的数组,但是要求实现Default trait
HTTP 请求reqwest
全功能HTTP客户端,支持在同步和异步两种方式,需要tokio运行时。
ureq
最小化的同步HTTP客户端,注重简单和最小化依赖。