4

Rust 生态系统的非官方指南

 1 year ago
source link: https://www.jdon.com/63211
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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对您的代码和依赖项执行策略。

测试:

基准测试:

性能

调试宏:

发布自动化:

持续集成:

通用用途

随机数:

  • rand [docs]从标准库中分离出来的事实上的标准随机数生成库

时间和日期:
不幸的是,对于时间和计时之间哪个最好,没有明确的答案。在这两者之间自行评估,但请放心,两者都是值得信赖且维护良好的。

  • time [docs]一个更小、更简单的库。如果可以满足您的需求,则最好,但它提供的功能非常有限。
  • chrono [docs]最全面、功能最齐全的日期时间库,但因此更加复杂。

序列化(JSON、YAML 等):
有关支持的格式,请参见此处。

  • serde [docs]事实上的标准序列化库。与您正在使用的特定格式的 serde_json 等子 crate 结合使用。

常用表达:

  • 正则表达式 [docs]事实上的标准正则表达式库。非常快,但不支持更高级的功能,例如回溯。
  • fancy_regex [docs]如果需要,请使用正则表达式不支持的回溯等功能

UUID:

  • uuid [docs]实现生成和解析 UUID 和许多实用功能

临时文件:


Gzip(解)压缩:

  • flate2 [docs]默认使用纯 Rust 实现。使用功能标志选择加入系统 zlib。

插入排序的Map:

  • indexmap [docs]一个单独跟踪插入顺序并允许您按该顺序有效地迭代其元素的 HashMap

堆栈分配的数组:

  • arrayvec [docs]仅以 固定容量堆栈分配的数组
  • smallvec [docs]堆栈分配的数组,如果超过固定堆栈容量,则回退到堆
  • tinyvec [docs]在 100% 安全的 Rust 代码中堆栈分配的数组,但需要项目来实现 Default trait。

HTTP 请求:

  • reqwest [docs] HTTP 客户端。可用于同步和异步代码。需要 tokio 运行时。
  • ureq [docs]最小同步 HTTP 客户端,专注于简单性和最小化依赖关系。

错误处理

对于应用:

  • anyhow [docs]提供了一个可以保存任何错误的盒装错误类型,以及用于生成应用程序级堆栈跟踪的帮助程序。
  • color-eyre [docs]一个分支,可以让您更好地控制生成的错误消息的格式。如果您需要向最终用户显示错误消息,建议使用。否则无论如何都更简单。

对于库包:

日志记录

基于文本的日志记录:

  • tracking [docs]Tracing 现在是日志记录的首选 crate。
  • log [docs]如果您的需求很简单并且您没有使用任何异步代码,则可以使用更旧且更简单的 crate。

结构化日志记录:

语言扩展
扩展语言和/或标准库功能的通用实用程序。
惰性静态变量初始化:

  • once_cell [docs]具有更符合人体工程学的 API 的更新。有望纳入标准库。应该是所有新项目的首选。
  • lazy_static [docs]较旧。API 不太方便,但 crate 是稳定和维护的。

迭代器助手:

宏助手:

抽象不同的数字类型:

  • num [docs]诸如 Number、Add 等特性,允许您编写对特定数字类型通用的函数

安全类型转换:


位标志:

系统
用于与底层平台/操作系统的低级交互
内存映射文件:

库:

视窗(操作系统):

  • windows [docs]微软官方提供的用于与 windows API 交互的 crate
  • winapi [docs]与 Windows API 的旧绑定。非官方,但比windows-rs更完善

*nix (操作系统):

  • nix [docs]绑定到各种 *nix 系统函数。(Unix、Linux、MacOS 等)

联网
TCP、HTTP、GRPc 等。以及进行异步网络所需的执行器。

异步执行器
要在 Rust 中使用 async-await 进行异步编程,您需要一个运行时来执行驱动您的 Futures。
一般用途:

  • tokio [docs]Rust 生态系统中最古老的异步运行时,并且仍然得到最广泛的支持。推荐用于新项目。
  • async-std [docs]一个与 tokio 非常相似的新选项。它的 API 更接近于 std 库,但它没有 Tokio 那么多的吸引力。

io_uring:

  • glommio [docs]如果您需要 io_uring 支持,请使用。仍然有些实验性,但正在迅速成熟。

HTTP
HTTP 客户端和服务器库,以及较低级别的构建块。
类型和接口:

  • http [docs]`http` crate 实际上并不包含 HTTP 实现。只是有助于互操作性的类型和接口。

低级 HTTP 实现:

  • hyper [docs]低级 HTTP 实现(客户端和服务器)。实现 HTTP 1、2 和 3。最适用于 tokio 异步运行时,但可以支持其他运行时。

HTTP 客户端:

  • reqwest [docs]全脂 HTTP 客户端。可用于同步和异步代码。需要 tokio 运行时。
  • ureq [docs]最小同步 HTTP 客户端,专注于简单性和最小化依赖关系。

HTTP 服务器:

  • axum [docs]一个最小且符合人体工程学的框架。tokio 项目的官方部分。推荐用于大多数新项目。
  • actix-web [docs]一个以性能为中心的框架。所有 Rust 框架都很快,但如果您需要绝对最高的性能,请选择 actix-web。

GraphQL 服务器:

Socket网络套接字
本节包括供您仅使用 websockets 的库。但是请注意,上一节中的许多 HTTP 服务器框架也支持 websockets
低级:

一般用途:

gRPC

  • tonic [docs]gRPC over HTTP/2,完全支持异步代码。

数据库

SQL 数据库
多数据库:

  • sqlx [docs]适用于 Postgres、MySQL、SQLite 和 MS SQL。支持查询的编译时检查。异步:同时支持 tokio 和 async-std。

ORM:

  • sea-orm [文档]推荐。建立在 sqlx 之上。还有一个相关的 sea-query crate,它提供了一个没有完整 ORM 功能的查询构建器。
  • diesel [docs]稳定版本仅同步。预发布异步分支目前是 AGPL。在某些情况下可以提供更好的性能。

Postgres:


MySQL:


SQLite:

微软 SQL:

甲骨文:

其他数据库

实用程序
连接池:

  • deadpool [docs]一个简单的异步池,用于连接和任何类型的对象。

终端渲染
用于精美的终端渲染和 TUI。这里推荐的 crates 可以跨平台工作(包括 windows)。

并发

数据结构

  • 互斥体park_lot [docs]std::mutex 也可以正常工作。
  • 原子指针交换arc_swap [docs]用于共享有很多读者但很少有作者的数据

并发HashMap:
有关并发 HashMap 的比较基准,请参阅conc-map-bench


channel:
有关何时使用异步特定通道与通用通道的说明,请参阅communication-between-sync-and-async-code 。

并行计算:

  • rayon [docs]一次调用将顺序计算转换为并行计算 - `par_iter` 而不是 `iter`

图形
图形用户界面

GTK 和 Tauri 可能是唯一可以被描述为生产就绪且没有警告的选项。Rust 原生选项可用于简单项目,但仍然很不完整。
GTK:

  • gtk4-rs [docs]到 GTK4 的 Rust 绑定。尽管您经常需要使用 C 文档,但这些都得到了很好的支持。
  • relm4 [docs]位于 gtk4-rs 之上的高级库

基于网络的图形用户界面:

  • tauri [docs]类似电子的基于 Web 的 UI。除了它使用系统 webviews 而不是运送 chromium,而且非 UI 代码是用 Rust 而不是 node.js 编写的

Rust 原生 GUI:

  • iced [docs]具有良好 API 的保留模式 UI。它可用于基本应用程序,但缺少许多功能,包括多个窗口、图层和正确的文本渲染。
  • egui [docs]即时模式 UI。很多小部件。如果您的需求很简单并且您不需要自定义外观和感觉,那么开箱即用的最实用
  • druid [docs]比 iced 或 egui 有更好的基础,但是 API 非常笨重且文档记录不充分。
  • slint [docs]最完整的 rust-native UI 库。但请注意,它是双重 GPL3/商业许可。

文件对话框:

  • rfd [docs]平台原生打开/保存文件对话框。可与其他 UI 库结合使用。

游戏开发
游戏引擎:

  • bevy [docs]迄今为止最发达的 Rust 游戏引擎。它还为时过早,但已经令人印象深刻并且非常有用。
  • ggez [docs]仅适用于 2d 游戏的更简单的选项。
  • 3d 数学glam [docs]为游戏开发用例优化的快速数学库

更多点击标题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK