《Rust七十二变(Rust 72 Changes)》
Rust七十二变(Rust 72 Changes)
以 Rust 编程语言为舟,溯计算机底层原理之源。
本书以 Rust 语言为实践工具,分上、中、下三卷,共七十二篇(美其名曰”七十二变”),由浅入深地讲解计算机科学的核心原理——从数据如何被编码,到运算如何被组织,再到秘密如何被守护。每章均辅以可运行的 Rust 代码,帮助读者在理解原理的同时掌握实战技能。
《Rust七十二变》在线阅读
内容概览
全书分为三卷,层层递进,环环相扣:
| 卷 | 章节范围 | 主题 | 章数 |
|---|---|---|---|
| 上卷 | 第一 ~ 第十三 | 数据与编码 | 13 |
| 中卷 | 第十四 ~ 第四十 | 运算与算法 | 27 |
| 下卷 | 第四十一 ~ 第七十二 | 秘密与密码 | 32 |
上卷:数据与编码
探索计算机世界的”原材料”——从最基本的数字、字符、字节出发,逐步扩展到时间、图片、条码、二维码、音频、视频等复杂数据类型,最终探讨序列化、持久化与可视化等高级主题。
涵盖:数字、字符与编码、字节、时间、图片、条形码、二维码、音频、视频、万物皆可编码、序列化与反序列化、输入输出、数据与代码。
中卷:运算与算法
介绍各种数据如何通过运算与转换解决现实问题。从算术、关系、逻辑、位运算出发,深入到排序、搜索、哈希等经典算法,再扩展到人工智能、代数、几何、微积分、概率论、神经网络、自然语言处理、计算机视觉、强化学习和生成式 AI 等前沿领域。
涵盖:算术运算、关系运算、逻辑运算、位运算、交换/反转/旋转、类型转换、哈希、打包/拆包/压缩/解压、查询/检索/搜索、排序、Lambda 演算、人工智能、算法、代数、几何、行列式、矩阵、向量、函数、微积分、概率论、离散数学、神经网络、自然语言处理、计算机视觉、强化学习、生成式 AI。
下卷:秘密与密码
探讨如何通过密码技术实现数据的安全存储与传输。从口令和随机数出发,深入对称密码、非对称密码、哈希函数等核心密码学原语,再扩展到身份认证、授权、PKI、TLS、区块链、零知识证明、同态加密、量子密码等高级主题;随后从数据挖掘、代码、数论、图论等基础出发,走向软件漏洞、网络与数据安全,并延伸到操作系统、云计算、互联网、通用人工智能、机器人、虚拟现实、位置、编译器和芯片。
涵盖:口令、随机数、密钥、对称密码、非对称密码、不可逆密码、认证、授权、数字证书与 PKI、TLS/SSL、区块链、零知识证明、同态加密、量子密码学、数据挖掘、代码、数论、图论、软件漏洞、网络安全、数据安全、操作系统、云计算、互联网、通用人工智能、机器人、虚拟现实和物理世界、位置、编译器与解释器、芯片、无敌密码、终极密码。
附录
- 问题与疑难解析
- 程序员职业发展思考
- 符号表速查
- 百宝箱(常用 Rust 库与工具)
- 实战项目
- 游戏化练习
本书特色
- 原理为先:每章从底层原理出发,讲解”为什么”而非仅仅是”怎么做”。
- 代码为体:所有核心概念配以 Rust 代码实现,可直接在 Rust Playground 或本地运行。
- 实战为要:通过实战项目将分散的知识点串联成完整解决方案。
本地阅读
本书使用 mdBook 构建,支持数学公式(MathJax)与流程图(Mermaid)。
前置要求
- 安装 Rust 工具链
- 安装 mdBook 及 mermaid 插件:
cargo install mdbook mdbook-mermaid
- 编译本书自带的 Rust Explorer 预处理器(单文件、零依赖,用
rustc直接编译即可,Windows 上会得到tools/mdbook-rustexplorer.exe):
rustc -O tools/mdbook-rustexplorer.rs -o tools/mdbook-rustexplorer
这一步只需做一次。
book.toml里已配置好[preprocessor.rustexplorer],mdBook 构建时会自动调用它(详见下文「Rust Explorer 一键运行」)。
构建与阅读
方式一:使用 mdbook serve(推荐)
# 进入项目目录
mdbook serve --open
浏览器将自动打开 http://localhost:3000/ 阅读本书。
方式二:构建静态站点后使用任意 HTTP 服务器
# 构建静态站点
mdbook build
# 使用 Python 启动本地服务器
cd book
python -m http.server 8080
# 或使用 miniserve
cd book
miniserve .
然后访问 http://localhost:8080/ 即可阅读。
注意:直接以
file://协议打开book/index.html可能导致部分资源加载异常(如 SQL.js 数据库页面),建议使用上述 HTTP 服务器方式浏览。
Rust Explorer 一键运行
书中每一个”能直接跑”的 Rust 代码块上方,都会自动多出一个按钮:
▶ 在 Rust Explorer 中运行
点一下就会在新标签页打开 Rust Explorer 并载入该代码块的源码,可以立即编译、运行、改着玩,读者不需要在本地准备任何环境。
它是怎么工作的
按钮的链接形如 https://www.rustexplorer.com/b#<base64>,其中 base64 解码后就是代码块本身(换行统一为 LF、去掉末尾换行),与 Rust Explorer 自己分享出来的链接格式完全一致。生成这些链接的是本书自带的 mdBook 预处理器:
tools/mdbook-rustexplorer.rs # 预处理器源码(单文件、零依赖)
tools/fixtures/share-link.txt # 真实的分享链接,用作编码格式的回归测试基准
构建时,mdBook 把每个章节的 Markdown 交给它;它扫描所有围栏代码块,给符合条件的块插入按钮、必要时补上依赖头,再把改好的内容交回渲染器(同时兼容 mdBook 0.5 的 items 与 0.4 的 sections)。
哪些代码块会加按钮
默认只给”能直接跑”的代码块加按钮,避免读者点进去看到一堆编译错误:
| 情况 | 结果 |
|---|---|
语言不是 rust / rs |
不加 |
缺少 fn main(只是片段) |
不加 |
含 #![no_std] 或 # |
不加 |
info string 含 ignore、no_run、compile_fail、should_panic |
不加 |
其余(含 fn main 的完整程序) |
加 |
作者也可以逐块覆盖(写在代码块的语言标记后面):
| info string | 效果 |
|---|---|
rust,rustexplorer |
强制加按钮(即使没有 fn main) |
rust,norustexplorer |
强制不加按钮 |
自动补上第三方依赖
很多示例用到了第三方 crate,若只把 use sha2::Sha256; 这类代码丢给 Explorer,会因为”找不到 crate”而编译失败。因此预处理器会在代码块最前面自动补一段依赖声明(写法与第二十章一致,展示的代码与链接里的代码完全相同):
/*
[dependencies]
hex = "0.4"
sha2 = "0.11"
*/
use sha2::{Sha256, Digest};
规则很简单:
- 只补”代码里确实用到、而且版本表里有版本“的 crate(只在白名单上匹配,所以
HashMap::new()不会被当成 crate); - 作者自己写了
/* [dependencies] … */时完全以作者为准,不做任何改动; - 注释与字符串里出现的 crate 名不算真依赖;
- 同一 crate 存在多套不兼容 API 时按代码里的特征串选版本(如书中
rand既有 0.8 写法又有 0.9+ 写法)。
版本表内置在预处理器里,来源都是书中已有依据(各章代码块自己声明的 [dependencies]、以及 src/rust/visualization/Cargo.toml)。要改版本或补新 crate,在 book.toml 里覆盖即可:
[preprocessor.rustexplorer.dependencies]
sha2 = "0.10" # 改版本
serde = { version = "1", features = ["derive"] } # 带 features
s3 = { crate = "rust-s3", version = "0.35" } # 包名与代码里的名字不同
rand = [ { when = "RngExt", version = "0.10" }, { version = "0.8.5" } ]
其中 when 的意思是”代码里出现这个子串时才用该条目”,多条之间用 | 分隔(例如 when = "CryptoRngCore|TryRng"),数组里最后一条不带 when 的作为兜底。
配置项
在 book.toml 的 [preprocessor.rustexplorer] 中调整:
| 键 | 默认值 | 说明 |
|---|---|---|
base-url |
https://www.rustexplorer.com/b |
基础地址(/b 表示构建并运行,可换成其它模式) |
link-text |
▶ 在 Rust Explorer 中运行 |
按钮文字 |
require-main |
true |
只给含 fn main 的代码块加按钮;设为 false 则所有 rust 代码块都加 |
new-tab |
true |
新标签页打开;设为 false 时退化为普通 Markdown 链接、不输出 HTML |
inject-dependencies |
true |
是否自动补 [dependencies] 头 |
按钮样式写在 theme/head.hbs 里(mdBook 0.5 不再链接自定义的 custom.css,因此用内联 <style>)。
调试与测试
# 单元测试(含"用真实分享链接校验 base64 编码格式"的回归测试)
rustc --test -O tools/mdbook-rustexplorer.rs -o mdbook-rustexplorer-test
./mdbook-rustexplorer-test
# 只处理一个章节并把结果打印出来(不写回文件),用于校对效果
./tools/mdbook-rustexplorer --dry-run src/chapter_20.md
Windows 下把上述可执行文件名换成带
.exe的版本即可。
项目结构
rust-72-changes/
├── book.toml # mdBook 配置文件(含 rustexplorer 预处理器配置)
├── README.md # 本文件
├── theme/
│ └── head.hbs # 注入 KaTeX 与 Rust Explorer 按钮样式
├── tools/
│ ├── mdbook-rustexplorer.rs # Rust Explorer 预处理器(单文件、零依赖)
│ └── fixtures/ # 预处理器的测试基准(真实分享链接)
├── src/
│ ├── SUMMARY.md # 目录结构
│ ├── chapter_0.md # 序言
│ ├── chapter_1_Number.md # 第一 数字
│ ├── chapter_2.md # 第二 字符与编码
│ ├── ... # 其余章节
│ ├── data_and_encode.md # 上卷引言
│ ├── operations_and_transformations.md # 中卷引言
│ ├── chapter_secret.md # 下卷引言
│ └── ...
├── book/ # 构建输出目录(自动生成)
├── mermaid.min.js # Mermaid 流程图支持
└── mermaid-init.js # Mermaid 初始化脚本
适合人群
- 有一定编程基础,希望深入理解计算机底层原理的开发者
- 对操作系统、网络、密码学感兴趣的系统编程爱好者
- 计算机专业学生,希望以实战代码加深理论理解
- 技术管理者,希望了解 Rust 适用场景与技术趋势
预备知识
- 基本的编程概念(变量、函数、条件、循环)
- 对二进制、十六进制有初步了解
- 高中水平的数学知识(代数、几何基础)
不具备 Rust 基础的读者也不用担心——本书会在必要时解释 Rust 特有的语法和概念,但建议同时参考 Rust 官方文档 进行系统学习。
参考资源
- The Rust Programming Language — Rust 官方教程
- Rust by Example — 通过示例学习 Rust
- Rustlings — Rust 小练习
- Crypto101 — 密码学入门
许可
本书采用开源方式分享,仅供学习交流使用。
愿每一位读者都能通过本书,在 Rust 的世界里习得七十二般变化,在计算机科学的道路上越走越远。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu