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,budshome(个人微信),晨曦中(微信公众号)。
做贡献
《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 | 类别 |
---|---|---|
生成随机数 | ||
生成范围内随机数 | ||
生成给定分布随机数 | ||
生成自定义类型随机值 | ||
从一组字母数字字符创建随机密码 | ||
从一组用户定义字符创建随机密码 |
Vector 排序
实例名称 | Crates | 类别 |
---|---|---|
整数 Vector 排序 | ||
浮点数 Vector 排序 | ||
结构体 Vector 排序 |
命令行
参数解析
实例名称 | Crates | 类别 |
---|---|---|
解析命令行参数 |
ANSI 终端
实例名称 | Crates | 类别 |
---|---|---|
ANSI 终端 |
压缩
使用 tar 包
实例名称 | Crates | 类别 |
---|---|---|
解压 tar 包 | ||
压缩目录为 tar 包 | ||
从路径移除前缀时,解压 tar 包 |
并发/并行
显式线程
实例名称 | Crates | 类别 |
---|---|---|
生成短期线程 | ||
创建并发的数据管道 | ||
在两个线程间传递数据 | ||
保持全局可变状态 | ||
对所有 iso 文件的 SHA256 值并发求和 | ||
将绘制分形的线程分派到线程池 |
数据并行
实例名称 | Crates | 类别 |
---|---|---|
并行改变数组中元素 | ||
并行测试集合中任意或所有的元素是否匹配给定断言 | ||
使用给定断言并行搜索项 | ||
对 vector 并行排序 | ||
Map-reduce 并行计算 | ||
并行生成 jpg 缩略图 |
密码学
散列(哈希)
实例名称 | Crates | 类别 |
---|---|---|
计算文件的 SHA-256 摘要 | ||
使用 HMAC 摘要对消息进行签名和验证 |
加密
实例名称 | Crates | 类别 |
---|---|---|
使用 PBKDF2 对密码进行加密(salt)和散列(hash)运算 |
数据结构
位域
实例名称 | Crates | 类别 |
---|---|---|
定义并操作位域风格的类型 |
数据库
SQLite
实例名称 | Crates | 类别 |
---|---|---|
创建 SQLite 数据库 | ||
数据插入和查询 | ||
事务处理 |
使用 Postgres
实例名称 | Crates | 类别 |
---|---|---|
Postgres 数据库中创建表 | ||
数据插入和查询 | ||
数据聚合 |
日期及时间
期间和计算
实例名称 | Crates | 类别 |
---|---|---|
测量运行时间 | ||
执行日期检查和时间计算 | ||
时间的时区转换 |
解析与显示
实例名称 | Crates | 类别 |
---|---|---|
检查日期和时间 | ||
日期和 UNIX 时间戳的互相转换 | ||
日期和时间的格式化显示 | ||
将字符串解析为 DateTime 结构体 |
开发工具
调试工具
日志信息
日志配置
实例名称 | Crates | 类别 |
---|---|---|
启用每个模块的日志级别 | ||
用自定义环境变量设置日志记录 | ||
在日志信息中包含时间戳 | ||
将信息记录到自定义位置 |
版本控制
实例名称 | Crates | 类别 |
---|---|---|
解析并递增版本字符串 | ||
解析复杂的版本字符串 | ||
检查给定版本是否为预发布版本 | ||
查询适配给定范围的最新版本 | ||
检查外部命令的版本兼容性 |
构建时
实例名称 | Crates | 类别 |
---|---|---|
编译并静态链接到绑定的 C 语言库 | ||
编译并静态链接到绑定的 C++ 语言库 | ||
编译 C 语言库时自定义设置 |
编码
字符集
CSV 处理
实例名称 | Crates | 类别 |
---|---|---|
读取 CSV 记录 | ||
读取有不同分隔符的 CSV 记录 | ||
筛选匹配断言的 CSV 记录 | ||
用 Serde 处理无效的 CSV 数据 | ||
将记录序列化为 CSV | ||
用 Serde 将记录序列化为 CSV | ||
转换 CSV 文件的列 |
结构化数据
实例名称 | Crates | 类别 |
---|---|---|
对非结构化 JSON 序列化和反序列化 | ||
反序列化 TOML 配置文件 | ||
以小端模式(低位模式)字节顺序读写整数 |
错误处理
处理错误变量
实例名称 | Crates | 类别 |
---|---|---|
在 main 方法中对错误适当处理 | ||
避免在错误转变过程中遗漏错误 | ||
获取复杂错误场景的回溯 |
文件系统
文件读写
实例名称 | Crates | 类别 |
---|---|---|
读取文件的字符串行 | ||
避免读取写入同一文件 | ||
使用内存映射随机访问文件 |
目录遍历
实例名称 | Crates | 类别 |
---|---|---|
过去 24 小时内修改过的文件名 | ||
查找给定路径的循环 | ||
递归查找重名文件 | ||
使用给定断言递归查找所有文件 | ||
跳过隐藏文件遍历目录 | ||
在给定深度的目录,递归计算文件大小 | ||
递归查找所有 png 文件 | ||
忽略文件名大小写,使用给定模式查找所有文件 |
硬件支持
处理器
实例名称 | Crates | 类别 |
---|---|---|
检查逻辑 cpu 内核的数量 |
内存管理
常量
实例名称 | Crates | 类别 |
---|---|---|
声明延迟计算常量 |
网络
服务器
实例名称 | Crates | 类别 |
---|---|---|
监听未使用的 TCP/IP 端口 |
操作系统
外部命令
实例名称 | Crates | 类别 |
---|---|---|
运行外部命令并处理 stdout | ||
运行传递 stdin 的外部命令,并检查错误代码 | ||
运行管道传输的外部命令 | ||
将子进程的 stdout 和 stderr 重定向到同一个文件 | ||
持续处理子进程的输出 | ||
读取环境变量 |
科学计算
数学
线性代数
三角学
实例名称 | Crates | 类别 |
---|---|---|
计算三角形的边长 | ||
验证正切(tan)等于正弦(sin)除以余弦(cos) | ||
地球上两点之间的距离 |
复数
统计学
其它数学计算
实例名称 | Crates | 类别 |
---|---|---|
大数 |
文本处理
正则表达式
实例名称 | Crates | 类别 |
---|---|---|
验证并提取电子邮件登录信息 | ||
从文本提取标签元素唯一的列表 | ||
从文本提取电话号码 | ||
通过匹配多个正则表达式来筛选日志文件 | ||
文本模式替换 |
字符串解析
实例名称 | Crates | 类别 |
---|---|---|
收集 Unicode 字符 | ||
自定义结构体 并实现 FromStr trait |
Web 编程
抓取网页
实例名称 | Crates | 类别 |
---|---|---|
从 HTML 网页中提取所有链接 | ||
检查网页死链 | ||
从 MediaWiki 标记页面提取所有唯一性链接 |
URL
实例名称 | Crates | 类别 |
---|---|---|
解析 URL 字符串为 Url 类型 | ||
通过移除路径段创建基本 URL | ||
从基本 URL 创建新 URLs | ||
提取 URL 源(scheme/ host/ port) | ||
从 URL 移除片段标识符和查询对 |
媒体类型(MIME)
实例名称 | Crates | 类别 |
---|---|---|
从字符串获取 MIME 类型 | ||
从文件名获取 MIME 类型 | ||
解析 HTTP 响应的 MIME 类型 |
客户端
请求处理
实例名称 | Crates | 类别 |
---|---|---|
发出 HTTP GET 请求 | ||
为 REST 请求设置自定义消息标头和 URL 参数 |
Web API 调用
下载
实例名称 | Crates | 类别 |
---|---|---|
下载文件到临时目录 | ||
使用 HTTP range 请求头进行部分下载 | ||
POST 文件到 paste-rs |