Rust Cookbook 中文版

《Rust Cookbook 中文版》是 Rust 程序设计语言(Rust 2018 简体中文版文档)的简要实例示例集合:展示了在 Rust 生态系统中,使用各类 crate 来完成常见编程任务的良好实践。

了解更多关于《Rust Cookbook 中文版》一书的信息,请阅读关于本书,包括:如何阅读本书的提示、如何使用实例示例,以及关于注释的约定。

注1:《Rust Cookbook 中文版》翻译自 rust-lang-nursery 团队撰写的 “A Rust Cookbook”,感谢 rust-lang-nursery 团队的无私奉献!

注2:《Rust Cookbook 中文版》计划为两个阶段:
第一阶段:经仔细斟酌,形成专业、通俗、容易理解的 Rust 生态实践指南中文版本;
第二阶段:对书中代码进行详细讲解,在实际应用场景中对 Rust 生态 crate 进行分析、比较,以及拓展。
目前,第一阶段已经完成,并且和 rust-lang-nursery 团队项目同步更新。
第二阶段正在进行中,但可能需要另开一个开源项目,欢迎参与。
若需要,欢迎联系:linshi@budshome.com。

做贡献

《Rust Cookbook 中文版》的目的是让 Rust 程序员新手能够更容易地参与到 Rust 社区中,因此它需要——并欢迎——你做出自己力所能及的贡献。

构建和测试

首先,从 git 克隆《Rust Cookbook 中文版》并进入目录:

git clone https://github.com/zzy/rust-cookbook-zh-cn.git
cd rust-cookbook-zh-cn

《Rust Cookbook 中文版》使用 mdBook中文文档)构建,所以需要通过 Cargo中文文档)安装它:

cargo install --version 0.3.5 mdbook

若要在本地生成和阅读《Rust Cookbook 中文版》,请运行:

mdbook serve

然后在浏览器中打开 http://localhost:3000,即可阅读本书。对源代码所做的任何更改都将自动重新生成页面,并会主动刷新浏览器,因此在编辑源码时打开浏览器窗口是很有帮助的。

书中的所有实例都是使用 skeptic 测试的,它是测试任意 markdown 文档的工具,风格类似于 rustdoc。

提交前,请对整个仓库进行测试:

cargo test

祝你学习愉快,欢迎提交问题,欢迎发送 PR。

算法

生成随机值

实例名称Crates类别
生成随机数rand-badgecat-science-badge
生成范围内随机数rand-badgecat-science-badge
生成给定分布随机数rand-badge rand_distr-badgecat-science-badge
生成自定义类型随机值rand-badgecat-science-badge
从一组字母数字字符创建随机密码rand-badgecat-os-badge
从一组用户定义字符创建随机密码rand-badgecat-os-badge

Vector 排序

实例名称Crates类别
整数 Vector 排序std-badgecat-science-badge
浮点数 Vector 排序std-badgecat-science-badge
结构体 Vector 排序std-badgecat-science-badge

命令行

参数解析

实例名称Crates类别
解析命令行参数clap-badgecat-command-line-badge

ANSI 终端

实例名称Crates类别
ANSI 终端ansi_term-badgecat-command-line-badge

压缩

使用 tar 包

实例名称Crates类别
解压 tar 包flate2-badge tar-badgecat-compression-badge
压缩目录为 tar 包flate2-badge tar-badgecat-compression-badge
从路径移除前缀时,解压 tar 包flate2-badge tar-badgecat-compression-badge

并发/并行

显式线程

实例名称Crates类别
生成短期线程crossbeam-badgecat-concurrency-badge
创建并发的数据管道crossbeam-badgecat-concurrency-badge
在两个线程间传递数据crossbeam-badgecat-concurrency-badge
保持全局可变状态lazy_static-badgecat-rust-patterns-badge
对所有 iso 文件的 SHA256 值并发求和threadpool-badge walkdir-badge num_cpus-badge ring-badgecat-concurrency-badgecat-filesystem-badge
将绘制分形的线程分派到线程池threadpool-badge num-badge num_cpus-badge image-badgecat-concurrency-badgecat-science-badgecat-rendering-badge

数据并行

实例名称Crates类别
并行改变数组中元素rayon-badgecat-concurrency-badge
并行测试集合中任意或所有的元素是否匹配给定断言rayon-badgecat-concurrency-badge
使用给定断言并行搜索项rayon-badgecat-concurrency-badge
对 vector 并行排序rayon-badge rand-badgecat-concurrency-badge
Map-reduce 并行计算rayon-badgecat-concurrency-badge
并行生成 jpg 缩略图rayon-badge glob-badge image-badgecat-concurrency-badgecat-filesystem-badge

密码学

散列(哈希)

实例名称Crates类别
计算文件的 SHA-256 摘要ring-badge data-encoding-badgecat-cryptography-badge
使用 HMAC 摘要对消息进行签名和验证ring-badgecat-cryptography-badge

加密

实例名称Crates类别
使用 PBKDF2 对密码进行加密(salt)和散列(hash)运算ring-badge data-encoding-badgecat-cryptography-badge

数据结构

位域

实例名称Crates类别
定义并操作位域风格的类型bitflags-badgecat-no-std-badge

数据库

SQLite

实例名称Crates类别
创建 SQLite 数据库rusqlite-badgecat-database-badge
数据插入和查询rusqlite-badgecat-database-badge
事务处理rusqlite-badgecat-database-badge

使用 Postgres

实例名称Crates类别
Postgres 数据库中创建表postgres-badgecat-database-badge
数据插入和查询postgres-badgecat-database-badge
数据聚合postgres-badgecat-database-badge

日期及时间

期间和计算

实例名称Crates类别
测量运行时间std-badgecat-time-badge
执行日期检查和时间计算chrono-badgecat-date-and-time-badge
时间的时区转换chrono-badgecat-date-and-time-badge

解析与显示

实例名称Crates类别
检查日期和时间chrono-badgecat-date-and-time-badge
日期和 UNIX 时间戳的互相转换chrono-badgecat-date-and-time-badge
日期和时间的格式化显示chrono-badgecat-date-and-time-badge
将字符串解析为 DateTime 结构体chrono-badgecat-date-and-time-badge

开发工具

调试工具

日志信息

实例名称Crates类别
记录调试信息到控制台log-badge env_logger-badgecat-debugging-badge
记录错误信息到控制台log-badge env_logger-badgecat-debugging-badge
记录信息时,用标准输出 stdout 替换标准错误 stderrlog-badge env_logger-badgecat-debugging-badge
使用自定义日志记录器记录信息log-badgecat-debugging-badge
记录到 Unix 系统日志log-badge syslog-badgecat-debugging-badge

日志配置

实例名称Crates类别
启用每个模块的日志级别log-badge env_logger-badgecat-debugging-badge
用自定义环境变量设置日志记录log-badge env_logger-badgecat-debugging-badge
在日志信息中包含时间戳log-badge env_logger-badge chrono-badgecat-debugging-badge
将信息记录到自定义位置log-badge log4rs-badgecat-debugging-badge

版本控制

实例名称Crates类别
解析并递增版本字符串semver-badgecat-config-badge
解析复杂的版本字符串semver-badgecat-config-badge
检查给定版本是否为预发布版本semver-badgecat-config-badge
查询适配给定范围的最新版本semver-badgecat-config-badge
检查外部命令的版本兼容性semver-badgecat-text-processing-badge cat-os-badge

构建时

实例名称Crates类别
编译并静态链接到绑定的 C 语言库cc-badgecat-development-tools-badge
编译并静态链接到绑定的 C++ 语言库cc-badgecat-development-tools-badge
编译 C 语言库时自定义设置cc-badgecat-development-tools-badge

编码

字符集

实例名称Crates类别
百分比编码(URL 编码)字符串percent-encoding-badgecat-encoding-badge
将字符串编码为 application/x-www-form-urlencodedurl-badgecat-encoding-badge
编码和解码十六进制data-encoding-badgecat-encoding-badge
编码和解码 base64base64-badgecat-encoding-badge

CSV 处理

实例名称Crates类别
读取 CSV 记录csv-badgecat-encoding-badge
读取有不同分隔符的 CSV 记录csv-badgecat-encoding-badge
筛选匹配断言的 CSV 记录csv-badgecat-encoding-badge
用 Serde 处理无效的 CSV 数据csv-badge serde-badgecat-encoding-badge
将记录序列化为 CSVcsv-badgecat-encoding-badge
用 Serde 将记录序列化为 CSVcsv-badge serde-badgecat-encoding-badge
转换 CSV 文件的列csv-badge serde-badgecat-encoding-badge

结构化数据

实例名称Crates类别
对非结构化 JSON 序列化和反序列化serde-json-badgecat-encoding-badge
反序列化 TOML 配置文件toml-badgecat-encoding-badge
以小端模式(低位模式)字节顺序读写整数byteorder-badgecat-encoding-badge

错误处理

处理错误变量

实例名称Crates类别
在 main 方法中对错误适当处理error-chain-badgecat-rust-patterns-badge
避免在错误转变过程中遗漏错误error-chain-badgecat-rust-patterns-badge
获取复杂错误场景的回溯error-chain-badgecat-rust-patterns-badge

文件系统

文件读写

实例名称Crates类别
读取文件的字符串行std-badgecat-filesystem-badge
避免读取写入同一文件same_file-badgecat-filesystem-badge
使用内存映射随机访问文件memmap-badgecat-filesystem-badge

目录遍历

实例名称Crates类别
过去 24 小时内修改过的文件名std-badgecat-filesystem-badge cat-os-badge
查找给定路径的循环same_file-badgecat-filesystem-badge
递归查找重名文件walkdir-badgecat-filesystem-badge
使用给定断言递归查找所有文件walkdir-badgecat-filesystem-badge
跳过隐藏文件遍历目录walkdir-badgecat-filesystem-badge
在给定深度的目录,递归计算文件大小walkdir-badgecat-filesystem-badge
递归查找所有 png 文件glob-badgecat-filesystem-badge
忽略文件名大小写,使用给定模式查找所有文件glob-badgecat-filesystem-badge

硬件支持

处理器

实例名称Crates类别
检查逻辑 cpu 内核的数量num_cpus-badgecat-hardware-support-badge

内存管理

常量

实例名称Crates类别
声明延迟计算常量lazy_static-badgecat-caching-badge cat-rust-patterns-badge

网络

服务器

实例名称Crates类别
监听未使用的 TCP/IP 端口std-badgecat-net-badge

操作系统

外部命令

实例名称Crates类别
运行外部命令并处理 stdoutregex-badgecat-os-badge cat-text-processing-badge
运行传递 stdin 的外部命令,并检查错误代码regex-badgecat-os-badge cat-text-processing-badge
运行管道传输的外部命令std-badgecat-os-badge
将子进程的 stdout 和 stderr 重定向到同一个文件std-badgecat-os-badge
持续处理子进程的输出std-badgecat-os-badgecat-text-processing-badge
读取环境变量std-badgecat-os-badge

科学计算

数学

线性代数

实例名称Crates类别
Vector 范数ndarray-badgecat-science-badge
Vector 比较ndarray-badgecat-science-badge
矩阵相加ndarray-badgecat-science-badge
矩阵相乘ndarray-badgecat-science-badge
标量、vector、矩阵相乘ndarray-badgecat-science-badge
矩阵求逆nalgebra-badgecat-science-badge
(反)序列化矩阵ndarray-badgecat-science-badge

三角学

实例名称Crates类别
计算三角形的边长std-badgecat-science-badge
验证正切(tan)等于正弦(sin)除以余弦(cos)std-badgecat-science-badge
地球上两点之间的距离std-badgecat-science-badge

复数

实例名称Crates类别
创建复数num-badgecat-science-badge
复数相加num-badgecat-science-badge
复数的数学函数num-badgecat-science-badge

统计学

实例名称Crates类别
集中趋势度量std-badgecat-science-badge
计算标准偏差std-badgecat-science-badge

其它数学计算

实例名称Crates类别
大数num-badgecat-science-badge

文本处理

正则表达式

实例名称Crates类别
验证并提取电子邮件登录信息regex-badge lazy_static-badgecat-text-processing-badge
从文本提取标签元素唯一的列表regex-badge lazy_static-badgecat-text-processing-badge
从文本提取电话号码regex-badgecat-text-processing-badge
通过匹配多个正则表达式来筛选日志文件regex-badgecat-text-processing-badge
文本模式替换regex-badge lazy_static-badgecat-text-processing-badge

字符串解析

实例名称Crates类别
收集 Unicode 字符unicode-segmentation-badgecat-encoding-badge
自定义结构体并实现 FromStr traitstd-badgecat-text-processing-badge

Web 编程

抓取网页

实例名称Crates类别
从 HTML 网页中提取所有链接reqwest-badge select-badgecat-net-badge
检查网页死链reqwest-badge select-badge url-badgecat-net-badge
从 MediaWiki 标记页面提取所有唯一性链接reqwest-badge regex-badgecat-net-badge

URL

实例名称Crates类别
解析 URL 字符串为 Url 类型url-badgecat-net-badge
通过移除路径段创建基本 URLurl-badgecat-net-badge
从基本 URL 创建新 URLsurl-badgecat-net-badge
提取 URL 源(scheme/ host/ port)url-badgecat-net-badge
从 URL 移除片段标识符和查询对url-badgecat-net-badge

媒体类型(MIME)

实例名称Crates类别
从字符串获取 MIME 类型mime-badgecat-encoding-badge
从文件名获取 MIME 类型mime-badgecat-encoding-badge
解析 HTTP 响应的 MIME 类型mime-badge reqwest-badgecat-net-badge cat-encoding-badge

客户端

请求处理

实例名称Crates类别
发出 HTTP GET 请求reqwest-badgecat-net-badge
为 REST 请求设置自定义消息标头和 URL 参数reqwest-badge hyper-badge url-badge cat-net-badge

Web API 调用

实例名称Crates类别
查询 GitHub APIreqwest-badge serde-badgecat-net-badge cat-encoding-badge
检查 API 资源是否存在reqwest-badgecat-net-badge
使用 GitHub API 创建和删除 Gistreqwest-badge serde-badgecat-net-badge cat-encoding-badge
使用 RESTful API 分页reqwest-badge serde-badgecat-net-badge cat-encoding-badge
处理速率受限 APIreqwest-badge hyper-badge cat-net-badge

下载

实例名称Crates类别
下载文件到临时目录reqwest-badge tempdir-badgecat-net-badge cat-filesystem-badge
使用 HTTP range 请求头进行部分下载reqwest-badgecat-net-badge
POST 文件到 paste-rsreqwest-badgecat-net-badge