【Rust日报】2026-07-31 oops 为危险 Shell 命令自动做快照
内容提要
本文介绍了四个Rust相关项目:oops工具为危险Shell命令自动快照并支持回滚;JetBrains播客讨论Rust开发工具的内部取舍;Tabularis数据库客户端解析其Rust依赖栈;Keel 0.4语言新增匿名函数和FFI支持。
延伸解读
oops 的适用边界
oops 通过 shell preexec hook 拦截命令,但明确无法覆盖 cron、systemd service、GUI 程序或非交互 shell 发起的破坏性命令,且只保护 > file 这类截断重定向,不处理所有 fd 重定向。因此它更适合作为交互式终端下的“日常失误保险”,而非系统级安全方案。
JetBrains 的 Rust 集成策略
JetBrains 在播客中解释了为何不将 IntelliJ 平台整体重写为 Rust,而是将 Rust 组件作为进程外 helper,避免 JNI 的复杂性。RustRover 在 PSI、THIR、基于 MIR 的调试求值、proc macro 沙箱等方面与 rust-analyzer 存在架构差异,这些取舍对 Rust 工具链开发者有参考价值。
依赖选择的工程账单
Tabularis 的复盘展示了依赖选择如何演变为产品架构:为支持 pgvector 等扩展类型,需在驱动边界手写解码;为兼容 sslmode 行为,补充自定义证书校验;为避免 GUI 调用 ssh 时无法输入 passphrase,应用自身充当 SSH_ASKPASS。这些额外成本是桌面数据库工具在真实平台上的必要工程投入。
Keel 0.4 的定位与局限
Keel 0.4 新增匿名函数、高阶函数、显式参数类型及更完整的 FFI,性能接近关闭 JIT 的 LuaJIT。但嵌入 API 尚未加入内存/指令限制,仍处于路线图阶段。对于关注 Rust 语言运行时开发的读者,这是一个值得跟踪的进展。
Q&A
oops 工具是如何实现危险 Shell 命令的自动快照和回滚的?
oops 通过 shell preexec hook 拦截命令,将命令发送给后台 daemon 分析,若判定为危险操作,则在执行前对受影响路径做快照。快照在 Btrfs 和 ZFS 上使用 reflink,其他文件系统回退到普通复制,元数据存于 SQLite。出错后可用 oops 回滚。
oops 工具默认保留快照的策略是什么?
默认保留策略是 48 小时或 2 GB,适合作为日常命令行失误的保险。
oops 工具存在哪些局限性?
oops 无法捕获 cron、systemd service、GUI 程序或非交互 shell 发起的破坏性命令;只对 > file 这类截断重定向做保护,不处理所有 fd 重定向。
JetBrains 为什么不会把 IntelliJ 平台整体重写成 Rust?
播客中解释了他们不会整体重写 IntelliJ 平台为 Rust,但未给出具体原因,只提到他们更偏好将 Rust 组件做成进程外 helper,而不是塞进 JVM 里走 JNI。
RustRover 内部有哪些实现取舍?
RustRover 内部实现取舍包括 PSI、THIR、基于 MIR 的调试表达式求值、proc macro 沙箱、parser regression testing,以及它与 rust-analyzer 在架构方向上的差异。
Tabularis 数据库客户端为什么在 PostgreSQL 上使用 tokio-postgres 而不是 SQLx?
文章解释了为什么 MySQL/SQLite 走 SQLx,而 PostgreSQL 单独走 tokio-postgres,但具体原因未在摘要中详述,可能涉及驱动边界和扩展类型支持。
Tabularis 为了支持 PostgreSQL 扩展类型做了哪些额外工作?
为了支持 pgvector、halfvec 等扩展类型,作者在驱动边界手写解码;为了兼容 sslmode 行为,补了自定义证书校验逻辑;为避免 GUI 调用系统 ssh 时无法输入 passphrase,应用自己充当 SSH_ASKPASS 帮手。
Keel 0.4 版本新增了哪些功能?
Keel 0.4 新增了函数参数显式类型、匿名函数和高阶函数、标准库的 map 与 filter、FFI 支持结构体与布尔值的传参与返回,以及更稳的循环导入支持。
Keel 语言在性能上有什么特点?
Keel 在不少场景下比 Python 快,性能上能接近关闭 JIT 的 LuaJIT。