文章摘要
该文章指出Bun项目的Rust代码库存在严重问题,无法通过最基本的Miri检查,导致在安全的Rust代码中出现了未定义行为(UB)。这表明代码库存在内存安全方面的隐患。
文章总结
以下是经过编辑整理后的文章主要内容:
标题:Rust代码库问题:无法通过基本Miri检查,安全Rust中存在未定义行为
来源:GitHub Issue #30719
发布时间:2026年5月14日
问题描述
用户AwesomeQubic报告称,Bun项目的Rust代码库存在严重问题,无法通过最基本的Miri检查(Rust的内存检查工具),甚至在安全Rust代码中允许未定义行为(UB)。
关键问题示例
rust
fn main() {
let test = Box::new(*b"Hello World");
let init = PathString::init(&*test);
drop(test); // 释放内存
println!("{:?}", init.slice()); // 使用已释放的内存
}
错误信息显示:
error: Undefined Behavior: constructing invalid value of type &[u8]: encountered a dangling reference
技术分析
问题根源:
PathString::init函数安全地接收&[u8]切片引用,但内部通过unsafe代码错误地擦除了生命周期标记,返回'static生命周期的值,导致悬垂引用。- 这违反了Rust的内存安全原则,可能引发释放后使用(use-after-free)等问题。
影响范围:
- 此类问题在代码库中普遍存在,可能引发难以调试的未定义行为,破坏Rust的安全保证。
社区反馈
开发者建议:
- 避免依赖AI生成Rust代码,建议聘请有经验的Rust开发者进行人工审核。
- 所有
unsafe代码块需严格审查,确保符合Rust的安全契约。
修复进展:
- 协作开发者robobun提交了修复(PR #30728),将
PathString::init标记为unsafe并添加生命周期约束文档,同时审计了70余处调用点。
- 协作开发者robobun提交了修复(PR #30728),将
争议焦点:
- 部分用户批评项目从Zig到Rust的草率重写,认为AI生成的代码缺乏可靠性。
- 对比案例:Ladybird浏览器的C++到Rust迁移耗时两周且仅生成3万行代码,而Bun的重写被指缺乏严谨性。
深层讨论
- 语言特性:Rust的生命周期和所有权机制需显式处理,直接翻译其他语言(如Zig/C++)的代码模式容易引发问题。
- 行业反思:有评论指出,此类事件反映了过度依赖AI生成代码的行业风险,呼吁重视人工设计和审查。
编辑说明:
1. 保留了技术细节和关键讨论,删减了重复的GitHub界面元素和部分情绪化评论。
2. 整合了多位开发者的补充分析,突出问题的严重性和解决方案。
3. 调整标题为更中立的表述,便于读者快速理解核心问题。
评论总结
以下是评论内容的总结:
关于重写目的与方法的争议
- 支持方认为这是必要的过渡步骤,最终会改进为符合Rust习惯的代码 "这是一个学习步骤,我很高兴它发生了"(评论7) "主要好处是现在可以使用编译器工具修复原来Zig代码中隐藏的问题"(评论12)
- 反对方质疑使用AI快速重写的合理性 "如果他们要翻译Zig到不安全的Rust,为什么不直接构建翻译工具?"(评论15) "这感觉像是一个潜在的Mythos营销噱头"(评论9)
关于内存安全问题的讨论
- 认为问题被夸大 "移植大型内存不安全代码库出现内存安全问题,这有什么大不了的"(评论11) "在移植阶段暂时错误标记某些不安全函数为安全不是真正的问题"(评论17)
- 指出Rust工具的价值 "如果这个问题在两个代码库中都存在,那正好说明Rust生态系统的工具能更容易发现问题"(评论22)
对开发流程的批评
- 质疑代码审查不足 "作为Anthropic员工,看到百万行LLM生成的代码没有适当审查,只能认为公司不再关心理解自己的代码"(评论18)
- 认为应该更注重验证 "我不反对用LLM写代码,但现在验证应该比代码产出更严格100倍"(评论16)
关于社区反应的评价
- 批评过度反应 "在GitHub上刷屏只会让人们更不愿意公开工作"(评论17) "这篇文章除了让作者显得幼稚外没有任何贡献"(评论8)
- 建议理性看待 "也许我们应该等到发布状态再评判,评判中间工作状态不太公平"(评论17)
对技术决策的质疑
- 质疑整体方向 "为什么要这么多JS运行时?如果可以这样轻松替换,Bun项目本身有什么价值?"(评论18)
- 批评开发选择 "更好的做法是用真正适合的语言重写Claude"(评论21)
关键分歧点在于:支持者认为这是必要的技术过渡,反对者则质疑使用AI快速重写的合理性及其背后的商业动机。多数评论认为当前问题在移植阶段是可以预期的,但对开发团队的处理方式和长期技术路线存在较大争议。