周三下午,一位开发者在GitHub上贴出了一段代码。这段代码来自Bun的Rust重写版本——就是那个号称比Node.js快得多的JavaScript运行时。问题是:这段"安全Rust"代码,在Miri检测工具下直接报红,触发了未定义行为(Undefined Behavior)。
具体来说,问题出在一个叫PathString::slice的方法里。代码用unsafe块把指针转成切片,但指针指向的内存早就被释放了。开发者给的重现例子很直白:先创建一个Box装字符串,初始化PathString,然后立刻drop掉原数据,再调用slice——这时候访问的就是悬空指针。Miri的报错信息写得清楚:"encountered a dangling reference",遇到了悬挂引用。
这事讽刺在哪?Bun团队去年高调宣布用Rust重写部分代码,理由之一就是Rust的内存安全保证。结果重写后的代码连Miri的基础检查都过不了。Miri是Rust官方提供的工具,专门用来检测unsafe代码块里的未定义行为,相当于Rust生态的安检门。
更扎心的是提issue的人最后补了一句:"Please consider not vibe coding rust"——别再用AI vibe coding写Rust了,AI不擅长这个,还是雇个真正的Rust开发者吧。这句话把两件事捆在一起骂:一是代码质量,二是开发方式。
这事给行业提了个醒。Rust的内存安全是有条件的:离开safe rust边界,进了unsafe块,责任全在开发者。Bun这个案例的问题不在于用了unsafe——高性能代码难免要用——而在于unsafe的边界条件没守住。指针生命周期和原数据脱钩,safe rust的借用检查器管不到这里,全靠人脑把关。
另一个信号是AI辅助编程的局限。vibe coding这两年很火,但Rust可能是目前最不适合AI主导编写的语言之一。它的所有权系统需要全局推理,而AI擅长的是局部模式匹配。让AI写Rust unsafe代码,相当于让新手开手动挡上赛道。
Bun团队还没公开回应这个issue。但代码就摆在那里,任何人都能跑一遍Miri复现。对于声称要替代Node.js的基础设施项目来说,这种级别的内存安全问题不是小事——它动摇的是"Rust重写=更安全"这个叙事本身。
热门跟贴