主页 · 9
生命周期:让 token 借用源码
写 pebble-lexer:token 不复制源码而是借用它。从 C++ string_view 的悬垂说起,亲手撞上 E0106 和 E0597,再学生命周期标注、省略规则、'static、Cow、Iterator 和模式匹配,最后让词法分析器在报错之后继续往下走。
enum、trait 与第一份错误报告
写 pebble-diag:用 enum 表示严重程度,用 builder 拼出带下划线的错误报告,用 trait 决定错误去哪。顺带弄清 Display 与 Debug、fmt::Write 与 io::Write、supertrait 和孤儿规则。
所有权:SourceMap 里的 String 归谁
用 Pebble 从零学 Rust 的第 2 篇:写完 pebble-span。为了把字节偏移翻译成行列,我们需要一个持有源码文本的 SourceMap,顺便学会 String 与 &str、移动、借用、Vec、Option、闭包初见、UTF-8、Index 运算符重载和 no_std。
第一个 crate:从 cargo new 到 Span
用 Pebble 从零学 Rust 的第 1 篇:先看完成品在两个后端上跑 fib,再从 cargo new 开始搭 workspace,亲手写出第一个 crate pebble-span,顺手学会 let、整数类型、表达式、控制流、struct、impl、derive 和单元测试。
RAII 到底贵不贵:我把 C++ 的资源管理拆到了汇编
我把 RAII 拆成 8 个可运行的实验:用手工清理对比析构函数,用替换的 operator new/delete 数泄漏对象,用 objdump 比对热路径与栈展开路径的指令数,再实测 unique_ptr 与 shared_ptr 的分配开销,最后整理浅拷贝、自赋值、抛异常的析构函数这些真实的坑。
我把同一份 Agent 配置写了 4 遍: JSON、TOML、YAML 与配置文件的语法和选择
我把同一份包含 16 个叶子值的 Agent 配置分别写成 JSON、TOML、YAML 和 INI,实际解析并比较它们,再解释 JSONC、.env、XML、Schema、覆盖顺序、密钥管理与常见陷阱。
我不想再盲贴正则表达式了: 从语法到 Scoop、Python、CMake、C++ 和 TypeScript
我从一份包含 4 个版本号的发布页开始,逐步写出可解释、可移植、可测试的正则表达式,再把同一套方法放进 Scoop checkver、Python、CMake、C++ 和 JavaScript/TypeScript。
我会用 Git,但它到底在做什么?从对象数据库到现代工作流
我用 Git 2.54.0 建了一个隔离仓库,从 blob、tree、commit、index、ref 和 reflog 拆开 add、commit、branch、merge、rebase、fetch、pull 与 push,再整理一套意图明确、可恢复的现代 Git 命令行。
一台不存在的计算机:QEMU 工作原理与实践
我用 QEMU 10.2.4 从零启动一个 512 字节 x86 扇区,运行 992 字节 AArch64 ELF,再沿着 machine、TCG/KVM、设备与后端、VirtIO、QMP、GDB、磁盘、网络和 ARM virt 拆开完整系统模拟链。
我追了一遍 Kbuild: 从一行 obj-m 到可以加载的 Linux 内核模块
我用 Linux 6.18 写了一个双文件外部模块,追踪 obj-m、scripts/Makefile.build、.cmd、modpost 和最终 .ko,再把它装进 QEMU 并迁移回内核树验证 n、m、y。











