用 std::process::Command 与真实命令验证子进程:参数不经 shell(没有注入);output 收集 stdout/stderr/退出码;NotFound(2)/PermissionDenied(13);被信号终止时 code() 为 None;管道与 wait_with_output;只读一个管道造成的死锁;env/env_clear/current_dir;不 wait 的子进程成为僵尸(Z)。
用管道、文件重定向与 pty 验证标准输入输出:IsTerminal 在管道/文件/pty 下的值;stdin 来自管道、文件、空输入的读法;stdout 与 stderr 分开重定向与 2>&1 的顺序;print! 不 flush 无换行时读者要等到换行;stdout 关闭时静默忽略而管道断开时 println! panic(Broken pipe)。
用真实进程验证环境变量:var 的 NotPresent / NotUnicode 与 var_os;空字符串不等于不存在;set_var 只影响自己与子进程且在 2024 edition 里是 unsafe(E0133);子进程的修改父进程看不到;非 UTF-8 的值让 vars() panic 而 vars_os() 正常;option_env! / env! 是编译期的值。
用多个真实进程验证标准库的 File::lock:独占锁被持有时 try_lock/try_lock_shared 得 WouldBlock、lock 阻塞约 600 ms;共享锁可并存;kill -9 持有者后锁自动释放;锁是建议性的(不加锁的写者照样写);同一进程的两个句柄会冲突、重复加锁幂等、drop 释放。
在 macOS 上验证路径的跨平台陷阱:反斜杠不是分隔符;APFS 大小写不敏感而 Path 比较区分大小写;NFC 与 NFD 在字符串里不等、在文件系统里是同一个名字;ASCII 文件名最多 255(os error 63)而 300 字节的汉字名可创建;NUL 非法;用 join 拼路径。Windows 与 Linux 的行为没有验证。
真实把 no_std Rust 编译成 WebAssembly 并在 node 里运行:模块仅 585 字节、零导入;i32 对 number、i64 对 BigInt;panic 变成 unreachable trap 且实例可继续使用;JS 与 Rust 通过线性内存(偏移指针、17 页)共享字节;手写 WASI 的 fd_write / proc_exit 导入,宿主不提供导入时实例化失败。
用 itoa 真实验证 Cargo 的依赖解析:"1"/"1.0"/"~1.0.5" 解析到 1.0.18,"=1.0.9" 精确,"0.4" 得 0.4.8,范围得 1.0.7;重命名让 0.4 与 1.x 共存(cargo tree -d);同一大版本内要求冲突时 failed to select a version;Cargo.lock 钉住版本、cargo update --precise 回退。
用真实项目验证 Cargo.lock:格式 version = 4、每个包的 source 与 SHA-256 checksum;--locked 在锁文件需要更新时拒绝构建;篡改 checksum 得 changed between lock files;--precise 钉住版本后 build --locked 保持 itoa 1.0.5;cargo new 的 .gitignore 不忽略 Cargo.lock。
用自己写的库验证 Cargo feature:default / 可选依赖 dep:itoa / cfg!(feature) 报告编译内容;cargo tree -e features;feature 统一(left 要 fast、right 要 extra,fmtx 只编译一份并启用并集);互斥 feature 统一后 compile_error 冲突;--no-default-features 与可选依赖。
用三成员工作区验证 Cargo workspace:共享一个 Cargo.lock 与 target;成员用 workspace = true 继承 version/edition/依赖;改一处全体生效(0.5.0→0.6.0、itoa =1.0.9);-p 只编译指定成员;3 个独立项目编译 itoa 3 次而工作区 1 次。
用 cargo build -v 验证 Cargo profile 的真实参数:dev 与 release 的 -C 参数、[profile.dev.package."*"] 让依赖单独 opt-level=3、自定义 fastdev profile(inherits)的产物目录、debug 级别不改变 macOS 二进制(457,944 → 461,032 字节)但 target/release 目录从 916,974 涨到 1,442,742 字节、build.rs 不带 opt-level。
用 cc crate 与 links 键验证 Cargo 构建脚本的另一面:build.rs 把 C 编译成 libvec2.a 并自动链接(88 行输出里 43 行是 cc 加的 rerun-if-env-changed);DEP_VEC2_INCLUDE 把元数据传给下游 build.rs;改 VEC2_SCALE 才重跑(运行次数 1→2)且程序输出 110;cc 不在运行时依赖里。