1. Rust 实践指南
  2. 第一部分 配置和工具
  3. 1. 前言
    1. 1.1. Rust 语言的优势
    2. 1.2. 本书编撰原因和主要内容
    3. 1.3. 结语
  4. 2. 阅读建议
    1. 2.1. 本书目标读者
    2. 2.2. 如何阅读本书
  5. 3. 环境配置
    1. 3.1. 配置 Rust 工具链的国内源
    2. 3.2. Linux/WSL/macOS 配置 Rust 环境
      1. 3.2.1. 命令方式安装 Rust
      2. 3.2.2. Homebrew 安装 Rust
    3. 3.3. Windows 配置 Rust 环境
      1. 3.3.1. 安装 Microsoft C++ 生成工具
      2. 3.3.2. rustup 安装器
    4. 3.4. 更新和卸载
    5. 3.5. 编辑器、IDE
      1. 3.5.1. 编辑器及其扩展
      2. 3.5.2. IDE 及其插件
  6. 4. Cargo 工具
    1. 4.1. 配置 cargo 国内镜像源
    2. 4.2. 使用 cargo 管理 crate
    3. 4.3. 使用 cargo 构建项目
      1. 4.3.1. 创建项目
      2. 4.3.2. 编译和运行项目
      3. 4.3.3. 发布项目
    4. 4.4. 使用 cargo 构建本书实例
  7. 第二部分 实践和讨论
  8. 5. 算法
    1. 5.1. 生成随机值
      1. 5.1.1. 生成随机数
      2. 5.1.2. 生成范围内随机数
      3. 5.1.3. 生成给定分布随机数
      4. 5.1.4. 生成自定义类型随机值
      5. 5.1.5. 从字母数字字符创建随机密码
      6. 5.1.6. 从用户定义字符创建随机密码
      7. 5.1.7. 随机值 crates 小结
    2. 5.2. Vector 排序
      1. 5.2.1. 整数 Vector 排序
      2. 5.2.2. 浮点数 Vector 排序
      3. 5.2.3. 结构体 Vector 排序
      4. 5.2.4. Vector 排序 crates 小结
  9. 6. 命令行
    1. 6.1. 参数解析
      1. 6.1.1. 解析命令行参数
      2. 6.1.2. 参数解析 crates 小结
    2. 6.2. ANSI 终端
      1. 6.2.1. 控制 ANSI 终端的颜色和格式
      2. 6.2.2. ANSI 终端 crates 小结
  10. 7. 压缩
    1. 7.1. 使用 tar 包
      1. 7.1.1. 解压 tar 包
      2. 7.1.2. 压缩目录为 tar 包
      3. 7.1.3. 从路径移除前缀时,解压 tar 包
      4. 7.1.4. 使用 tar 包 crates 小结
  11. 8. 并发/并行
    1. 8.1. 显式线程
      1. 8.1.1. 生成短期线程
      2. 8.1.2. 创建并发的数据管道
      3. 8.1.3. 在两个线程间传递数据
      4. 8.1.4. 保持全局可变状态
      5. 8.1.5. 对所有 iso 文件的 SHA256 值并发求和
      6. 8.1.6. 将绘制分形的线程分派到线程池
      7. 8.1.7. 显式线程 crates 小结
    2. 8.2. 数据并行
      1. 8.2.1. 并行改变数组中元素
      2. 8.2.2. 并行测试集合中任意或所有的元素是否匹配给定断言
      3. 8.2.3. 使用给定断言并行搜索项
      4. 8.2.4. 对 vector 并行排序
      5. 8.2.5. Map-reduce 并行计算
      6. 8.2.6. 并行生成 jpg 缩略图
      7. 8.2.7. 数据并行 crates 小结
  12. 9. 密码学
    1. 9.1. 散列(哈希)
      1. 9.1.1. 计算文件的 SHA-256 摘要
      2. 9.1.2. 使用 HMAC 摘要对消息进行签名和验证
      3. 9.1.3. 散列(哈希)crates 小结
    2. 9.2. 加密
      1. 9.2.1. 使用 PBKDF2 对密码进行加密(salt)和散列(hash)运算
      2. 9.2.2. 加密 crates 小结
  13. 10. 数据结构
    1. 10.1. 位域
      1. 10.1.1. 定义并操作位域风格的类型
      2. 10.1.2. 位域 crates 小结
  14. 11. 数据库
    1. 11.1. 驱动程序
      1. 11.1.1. SQLite
        1. 11.1.1.1. 创建 SQLite 数据库
        2. 11.1.1.2. 数据插入和查询
        3. 11.1.1.3. 事务处理
      2. 11.1.2. Postgres
        1. 11.1.2.1. Postgres 数据库中创建表
        2. 11.1.2.2. 数据插入和查询
        3. 11.1.2.3. 数据聚合
      3. 11.1.3. MySql
      4. 11.1.4. MongoDB
      5. 11.1.5. 驱动程序 crates 小结
    2. 11.2. ORM 工具
      1. 11.2.1. diesel
      2. 11.2.2. rbatis
      3. 11.2.3. rustorm
      4. 11.2.4. sqlx
      5. 11.2.5. ORM 工具 crates 小结
  15. 12. 日期及时间
    1. 12.1. 期间和计算
      1. 12.1.1. 测量运行时间
      2. 12.1.2. 执行日期检查和时间计算
      3. 12.1.3. 时间的时区转换
    2. 12.2. 解析与显示
      1. 12.2.1. 检查日期和时间
      2. 12.2.2. 日期和 UNIX 时间戳的互相转换
      3. 12.2.3. 日期和时间的格式化显示
      4. 12.2.4. 将字符串解析为 DateTime 结构体
    3. 12.3. 日期及时间 crates 小结
  16. 13. 开发工具
    1. 13.1. 调试工具
      1. 13.1.1. 日志工具
        1. 13.1.1.1. 记录调试信息到控制台
        2. 13.1.1.2. 记录错误信息到控制台
        3. 13.1.1.3. 记录信息时,用标准输出 stdout 替换标准错误 stderr
        4. 13.1.1.4. 使用自定义日志记录器记录信息
        5. 13.1.1.5. 记录到 Unix 系统日志
        6. 13.1.1.6. 启用每个模块的日志级别
        7. 13.1.1.7. 用自定义环境变量设置日志记录
        8. 13.1.1.8. 在日志信息中包含时间戳
        9. 13.1.1.9. 将信息记录到自定义位置
        10. 13.1.1.10. 日志工具 crates 小结
    2. 13.2. 版本控制
      1. 13.2.1. 解析并递增版本字符串
      2. 13.2.2. 解析复杂的版本字符串
      3. 13.2.3. 检查给定版本是否为预发布版本
      4. 13.2.4. 查询适配给定范围的最新版本
      5. 13.2.5. 检查外部命令的版本兼容性
      6. 13.2.6. 版本控制 crates 小结
    3. 13.3. 构建工具
      1. 13.3.1. 编译并静态链接到绑定的 C 语言库
      2. 13.3.2. 编译并静态链接到绑定的 C++ 语言库
      3. 13.3.3. 编译 C 语言库时自定义设置
      4. 13.3.4. 构建工具 crates 小结
  17. 14. 编码
    1. 14.1. 字符集
      1. 14.1.1. 百分比编码(URL 编码)字符串
      2. 14.1.2. 将字符串编码为 application/x-www-form-urlencoded
      3. 14.1.3. 编码和解码十六进制
      4. 14.1.4. 编码和解码 base64
      5. 14.1.5. 字符集 crates 小结
    2. 14.2. CSV 处理
      1. 14.2.1. 读取 CSV 记录
      2. 14.2.2. 读取有不同分隔符的 CSV 记录
      3. 14.2.3. 筛选匹配断言的 CSV 记录
      4. 14.2.4. 用 Serde 处理无效的 CSV 数据
      5. 14.2.5. 将记录序列化为 CSV
      6. 14.2.6. 用 Serde 将记录序列化为 CSV
      7. 14.2.7. 转换 CSV 文件的列
      8. 14.2.8. CSV 处理 crates 小结
    3. 14.3. 结构化数据
      1. 14.3.1. 对非结构化 JSON 序列化和反序列化
      2. 14.3.2. 反序列化 TOML 配置文件
      3. 14.3.3. 以小端模式(低位模式)字节顺序读写整数
      4. 14.3.4. 结构化数据 crates 小结
  18. 15. 错误处理
    1. 15.1. 处理错误变量
      1. 15.1.1. 在 main 方法中对错误适当处理
      2. 15.1.2. 避免在错误转变过程中遗漏错误
      3. 15.1.3. 获取复杂错误场景的回溯
    2. 15.2. 错误处理 crates 小结
  19. 16. 文件系统
    1. 16.1. 文件读写
      1. 16.1.1. 读取文件的字符串行
      2. 16.1.2. 避免读取写入同一文件
      3. 16.1.3. 使用内存映射随机访问文件
    2. 16.2. 目录遍历
      1. 16.2.1. 过去 24 小时内修改过的文件名
      2. 16.2.2. 查找给定路径的循环
      3. 16.2.3. 递归查找重名文件
      4. 16.2.4. 使用给定断言递归查找所有文件
      5. 16.2.5. 跳过隐藏文件遍历目录
      6. 16.2.6. 在给定深度的目录,递归计算文件大小
      7. 16.2.7. 递归查找所有 png 文件
      8. 16.2.8. 忽略文件名大小写,使用给定模式查找所有文件
    3. 16.3. 文件系统 crates 小结
  20. 17. 硬件支持
    1. 17.1. 处理器
      1. 17.1.1. 检查逻辑 cpu 内核的数量
    2. 17.2. 硬件支持 crates 小结
  21. 18. 内存管理
    1. 18.1. 全局静态/全局堆栈
      1. 18.1.1. 声明延迟计算常量
    2. 18.2. 内存管理 crates 小结
  22. 19. 网络
    1. 19.1. 服务器
      1. 19.1.1. 监听未使用的 TCP/IP 端口
      2. 19.1.2. 服务器 crates 小结
  23. 20. 操作系统
    1. 20.1. 外部命令
      1. 20.1.1. 运行外部命令并处理 stdout
      2. 20.1.2. 运行传递 stdin 的外部命令,并检查错误代码
      3. 20.1.3. 运行管道传输的外部命令
      4. 20.1.4. 将子进程的 stdout 和 stderr 重定向到同一个文件
      5. 20.1.5. 持续处理子进程的输出
      6. 20.1.6. 读取环境变量
    2. 20.2. 操作系统 crates 小结
  24. 21. 科学计算
    1. 21.1. 数学
      1. 21.1.1. 线性代数
        1. 21.1.1.1. 矩阵相加
        2. 21.1.1.2. 矩阵相乘
        3. 21.1.1.3. 标量、vector、矩阵相乘
        4. 21.1.1.4. Vector 比较
        5. 21.1.1.5. Vector 范数
        6. 21.1.1.6. 矩阵求逆
        7. 21.1.1.7. (反)序列化矩阵
      2. 21.1.2. 三角学
        1. 21.1.2.1. 计算三角形的边长
        2. 21.1.2.2. 验证正切(tan)等于正弦(sin)除以余弦(cos)
        3. 21.1.2.3. 地球上两点之间的距离
      3. 21.1.3. 复数
        1. 21.1.3.1. 创建复数
        2. 21.1.3.2. 复数相加
        3. 21.1.3.3. 复数的数学函数
      4. 21.1.4. 统计学
        1. 21.1.4.1. 集中趋势度量
        2. 21.1.4.2. 计算标准偏差
      5. 21.1.5. 其它数学计算
        1. 21.1.5.1. 大数
      6. 21.1.6. 数学 crates 小结
  25. 22. 文本处理
    1. 22.1. 正则表达式
      1. 22.1.1. 验证并提取电子邮件登录信息
      2. 22.1.2. 从文本提取标签元素唯一的列表
      3. 22.1.3. 从文本提取电话号码
      4. 22.1.4. 通过匹配多个正则表达式来筛选日志文件
      5. 22.1.5. 文本模式替换
    2. 22.2. 字符串解析
      1. 22.2.1. 收集 Unicode 字符
      2. 22.2.2. 自定义结构体并实现 FromStr trait
    3. 22.3. 文本处理 crates 小结
  26. 23. Web 编程
    1. 23.1. 提取链接
      1. 23.1.1. 从 HTML 网页中提取所有链接
      2. 23.1.2. 检查网页死链
      3. 23.1.3. 从 MediaWiki 标记页面提取所有唯一性链接
      4. 23.1.4. 提取链接 crates 小结
    2. 23.2. URL
      1. 23.2.1. 解析 URL 字符串为 Url 类型
      2. 23.2.2. 通过移除路径段创建基本 URL
      3. 23.2.3. 从基本 URL 创建新 URLs
      4. 23.2.4. 提取 URL 源(scheme/ host/ port)
      5. 23.2.5. 从 URL 移除片段标识符和查询对
      6. 23.2.6. URL crates 小结
    3. 23.3. 媒体类型(MIME)
      1. 23.3.1. 从字符串获取 MIME 类型
      2. 23.3.2. 从文件名获取 MIME 类型
      3. 23.3.3. 解析 HTTP 响应的 MIME 类型
      4. 23.3.4. 媒体类型(MIME)crates 小结
    4. 23.4. 电子邮件
    5. 23.5. 客户端
      1. 23.5.1. 请求处理
        1. 23.5.1.1. 发出 HTTP GET 请求
        2. 23.5.1.2. 为 REST 请求设置自定义消息标头和 URL 参数
      2. 23.5.2. Web API 调用
        1. 23.5.2.1. 查询 GitHub API
        2. 23.5.2.2. 检查 API 资源是否存在
        3. 23.5.2.3. 使用 GitHub API 创建和删除 Gist
        4. 23.5.2.4. 使用 RESTful API 分页
        5. 23.5.2.5. 处理速率受限 API
      3. 23.5.3. 下载
        1. 23.5.3.1. 下载文件到临时目录
        2. 23.5.3.2. 使用 HTTP range 请求头进行部分下载
        3. 23.5.3.3. POST 文件到 paste-rs
      4. 23.5.4. 客户端 crates 小结
  27. 第三部分 进阶和延伸
  28. 24. 源码编译安装 Rust
  29. 25. Rust 构建进阶
    1. 25.1. Cargo 进阶
      1. 25.1.1. Cargo 清单格式详解
      2. 25.1.2. Cargo 文件和依赖项管理
      3. 25.1.3. 项目的构建过程
      4. 25.1.4. 使用 Cargo 发布 crate
      5. 25.1.5. Cargo 构建脚本
      6. 25.1.6. Cargo 外部工具
      7. 25.1.7. Cargo 常见问题
  30. 26. Rust 模糊测试
    1. 26.1. 使用 fuzz 进行模糊测试
    2. 26.2. 使用 afl.rs 进行模糊测试
  31. 27. 书籍构建工具 mdBook

Rust 实践指南 - The Hitchhiker's Guide to Rust

书馆

25.1.6. Cargo 外部工具