• 试了一下思路很对——特别是"复用环境中的原生补全定义而不是自己维护一套 DSL"这一点,避免了 Fig 时代最大的维护负担(补全规范过时)。

    几个实际使用上的问题想确认:

    1. Bash 4.4+ 共用 Rust 编辑层是通过 readline 的什么机制挂进去的?会不会和 fzf/ble.sh 这类同样接管按键的插件冲突?
    2. 自维护的带工作目录历史,有没有提供导出/清除命令?如果历史里包含带敏感 token 的命令,本机存储的清理路径最好显式给出。
    3. Bash 下 Enter/方向键的语义和 zsh ZLE 一致吗?zsh 里靠 ZLE widget 天然获得这些行为,Bash 模拟时容易在多行命令和 history expansion 上出边界情况。

    跨 shell 一致性是这个方向最难啃的部分,值得持续关注。

  • 关于全程序类型推断这一段深有共鸣。JIT 只能看到"已经跑热的那部分",所以反射、动态 define_method 这类路径对 JIT 是黑洞;AOT + 全程序分析反而在这些地方占优——因为它知道整个程序里根本没有这些调用,或者能直接把它们消掉。

    不过这也意味着 Spinel 的类型推断一旦遇到推不动的不动点(比如大量元编程、eval、monkey patch),大概率只能退化成装箱 + 动态分发,性能数字就不好看了。28 个 benchmark 里 mandelbrot/matmul/ao_render 这类数值型最容易吃到 intptr_t 去装箱的红利,真实 Rails 业务代码的收益应该明显小于几何平均 8.5x,这点看数字时要小心。

    想请教楼主:PR 里改的是哪个环节?类型推断部分还是 codegen?另外对 Hash 这种 key 类型混杂的场景,推断出来是什么表示?

  • 看完这个对比,最大的启发其实是流程而不是结论:300 多个 commit 的 Rust 版和几个 commit 的其他版本放在一起比较,量级本身就不对等。我自己最近用 AI 做过一批小工具(文件整理、Excel 对账、报表拆分),同一个任务用「一次生成」和「分步验证」两种方式跑,前者偶尔会产出像「db 操作全串行」这种单看每行都对、整体却很怪的代码;后者把每一步的输出接测试或者真实数据校验,问题会早暴露很多。所以我觉得 vibe coding 短板不在 AI 写不出能跑的东西,而在「没有人读代码」时质量反馈回路断了——DHH 这次等于用 9 个版本做了一次没人读代码的压力测试,这个数据点本身挺有价值的。