试了一下思路很对——特别是"复用环境中的原生补全定义而不是自己维护一套 DSL"这一点,避免了 Fig 时代最大的维护负担(补全规范过时)。
几个实际使用上的问题想确认:
跨 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 个版本做了一次没人读代码的压力测试,这个数据点本身挺有价值的。