知其然,知其所以然
Rust 内部机制 2026-10-02

子进程与 Command

用 std::process::Command 与真实命令验证子进程:参数不经 shell(没有注入);output 收集 stdout/stderr/退出码;NotFound(2)/PermissionDenied(13);被信号终止时 code() 为 None;管道与 wait_with_output;只读一个管道造成的死锁;env/env_clear/current_dir;不 wait 的子进程成为僵尸(Z)。

Rust 子进程 Command 管道 真实验证 动画演示
Elasticsearch 2026-10-02

size 与 shard_size 的差异

本机真实用routing精确控制,让target全局50条(第一)但每个分片局部只排第21(被20个各15条的噪声词压制)。默认shard_size下,target真实完全消失在结果里,取而代之的是5个只有15条的噪声词。真实把shard_size调到25后,target才正确以50条回到结果第一位,误差归零。

Elasticsearch 真实验证 动画演示
Rust 内部机制 2026-10-02

标准输入输出重定向

用管道、文件重定向与 pty 验证标准输入输出:IsTerminal 在管道/文件/pty 下的值;stdin 来自管道、文件、空输入的读法;stdout 与 stderr 分开重定向与 2>&1 的顺序;print! 不 flush 无换行时读者要等到换行;stdout 关闭时静默忽略而管道断开时 println! panic(Broken pipe)。

Rust 标准输入输出 重定向 IsTerminal 真实验证 动画演示
Rust 内部机制 2026-10-02

环境变量读取

用真实进程验证环境变量:var 的 NotPresent / NotUnicode 与 var_os;空字符串不等于不存在;set_var 只影响自己与子进程且在 2024 edition 里是 unsafe(E0133);子进程的修改父进程看不到;非 UTF-8 的值让 vars() panic 而 vars_os() 正常;option_env! / env! 是编译期的值。

Rust 环境变量 env set_var 真实验证 动画演示
Elasticsearch 2026-10-02

cardinality 为什么是近似去重

本机真实索引5万条UUID文档(真实唯一值50000),cardinality默认阈值估算49947(误差-0.11%),调到precision_threshold=100误差放大到-1.77%,调到40000误差收窄到-0.09%。真实又验证唯一值2000低于默认阈值3000时,cardinality真实返回精确值2000,一个都不差。

Elasticsearch 真实验证 动画演示
Rust 内部机制 2026-10-02

文件锁

用多个真实进程验证标准库的 File::lock:独占锁被持有时 try_lock/try_lock_shared 得 WouldBlock、lock 阻塞约 600 ms;共享锁可并存;kill -9 持有者后锁自动释放;锁是建议性的(不加锁的写者照样写);同一进程的两个句柄会冲突、重复加锁幂等、drop 释放。

Rust 文件锁 File::lock 并发 真实验证 动画演示
Rust 内部机制 2026-10-02

跨平台路径差异

在 macOS 上验证路径的跨平台陷阱:反斜杠不是分隔符;APFS 大小写不敏感而 Path 比较区分大小写;NFC 与 NFD 在字符串里不等、在文件系统里是同一个名字;ASCII 文件名最多 255(os error 63)而 300 字节的汉字名可创建;NUL 非法;用 join 拼路径。Windows 与 Linux 的行为没有验证。

Rust 跨平台 路径 大小写 Unicode 真实验证 动画演示
Elasticsearch 2026-10-02

date_histogram 时间桶

本机真实用两条只差2小时的文档(23:30和01:30 UTC)验证date_histogram:不指定时区按UTC分天,真实分进两个不同的天桶各1条;加time_zone:+08:00后,真实两条被重新分进同一个桶doc_count变2——因为按北京时间两者都落在16号这一天,印证了忘记设时区会让统计的'天'跟用户体感自然日对不上。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

histogram 与 range 聚合

本机真实索引价格两端密集中间空白的6件商品,histogram(interval=10)真实自动生成11个等宽桶,中间5个真实是空桶(doc_count:0)依然被返回。换成range聚合手工指定4个宽窄不一的区间,真实0个空桶每个都有数据。加min_doc_count:1后histogram桶数从11收缩到6,去掉空桶但会产生跳跃断档。

Elasticsearch 真实验证 动画演示
Rust 内部机制 2026-10-02

WASI 与 WebAssembly

真实把 no_std Rust 编译成 WebAssembly 并在 node 里运行:模块仅 585 字节、零导入;i32 对 number、i64 对 BigInt;panic 变成 unreachable trap 且实例可继续使用;JS 与 Rust 通过线性内存(偏移指针、17 页)共享字节;手写 WASI 的 fd_write / proc_exit 导入,宿主不提供导入时实例化失败。

Rust WebAssembly WASI wasm 真实验证 动画演示
Rust 内部机制 2026-10-02

Cargo.toml 依赖解析

用 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 回退。

Rust Cargo 依赖解析 semver 真实验证 动画演示
Elasticsearch 2026-10-02

composite 聚合分页

本机真实索引1000种(cat,sub)组合,用composite聚合size=100配合after_key循环翻页,真实翻了11次(10页满数据+1页空终止),去重后精确收集到1000条。真实查看after_key结构,精确等于上一页最后一个桶的key。真实确认集群search.max_buckets默认65536,composite用size+after分批规避熔断上限,实现高基数聚合桶的安全完整遍历。

Elasticsearch 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号