加载失败
Bun(一个高性能 JavaScript runtime / bundler)最初主要用 Zig(一个仍处于 1.0 前、强调简单和速度的系统语言)实现,长期把自己包装成 Node.js 的替代品。最近仓库里出现了 `claude/phase-a-port` 之类的分支和 `PORTING.md`,内容是把 Bun 从 Zig 迁到 Rust(一个以 ownership 和 memory safety 著称的系统语言),其中 Phase A 先做忠实草稿,Phase B 再让它编译并逐步清理。讨论之所以炸开,是因为 Bun 刚被 Anthropic(Claude 的开发公司)收购,而 Zig 社区又对 AI 生成代码有严格限制,双方因此牵扯到是否继续依赖 Zig、AI 能否承担大规模重写,以及开源维护者是否欠社区解释等问题。评论里还把它和 Go runtime 的半自动重写、其他 LLM 驱动迁移,以及 Bun 自己的稳定性和长期维护风险放在一起比较。
不少人把这件事的核心问题看成“这是不是正式迁移”,而不是语言之争。支持者强调这只是官方仓库里的实验分支,Phase A 先写出忠实的 `.rs` 草稿,后面还有 Phase B 才会编译与清理,甚至整段代码最后都可能被丢掉。反对者则认为分支名和 `docs/PORTING.MD` 的写法太像正式计划,如果不明确标注实验性,就很容易被用户解读成既成事实。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]
评论区反复争论 vibe coding 到底指什么。有人认为七十多万行、一天内的大改写,且没人可能逐行审查,已经是让模型代劳到底;也有人坚持原始含义更接近“忘了代码存在”,而系统性迁移、配合 test suite 的 AI-assisted coding 不该一概叫 slop。讨论还延伸到 deterministic 转换器、oracle tests,以及人是否真的理解和拥有生成代码;甚至有人顺手算了 token 和碳排成本。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]
不少评论把这件事解释成 Rust 在大型系统里更稳妥的默认值。支持 Rust 的理由集中在 memory safety、编译器更会抓 bug、生态和维护者更多、语言更成熟,而且对 LLM 来说训练数据更多、错误反馈更明确。支持 Zig 的一方则强调它编译快、语法轻、`comptime` 和 C/C++ 互操作很强,也更适合 Bun 这种自己掌控 event loop 和 syscalls 的 runtime;围绕 Zig 的 anti-AI 规则,也有人提醒 Bun 之前的性能改动本身就被认为技术上站不住脚,争议不该只归因于禁 AI。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13] [来源14] [来源15] [来源16] [来源17] [来源18] [来源19] [来源20] [来源21]
很多评论借机重提 Bun 的稳定性和产品信任问题。有人举出内存泄漏、segfault、图片 API 忽略 ICC Profile 的 bug、以及长期未修复的 production blocker,认为 Bun 作为“drop-in replacement”并没有兑现足够可靠的预期。也有人反驳说 canary release 里发现并修复 bug 本来就是正常流程,但这类问题仍会让用户担心项目在重写和新功能之间的优先级失衡。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]
另一条主线是开源维护者到底欠不欠社区解释。有人坚持作者没有义务回应每个质疑,嫌项目不稳就 fork 自己维护;但也有人说 Bun 已经被 Anthropic 收购、又被许多团队当成生产依赖,方向突然变化本身就是 reputational risk。评论里还夹杂着“你又没付钱凭什么管”“实验分支不该被当成道德审判”等争吵,甚至有人担心这会被拿去向非技术管理层证明 AI 很强。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13] [来源14]
许多技术评论在讨论更可靠的迁移流程,而不是直接把整仓库交给模型。有人拿 2015 年 Go runtime 从 C 到 Go 的半自动重写做类比,主张先做 deterministic 的转换器,再用 oracle tests、e2e tests、benchmark 和静态分析去逐步收敛。也有人建议沿着 git commit 历史分组迁移,或者先生成一个可丢弃的转换工具,再用它稳定地产出结果,之后再做更细的 refactor。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13]
vibe coding: 让 LLM 大量或完全生成代码,开发者更多是在提示和验收而非逐行理解。
ownership model: Rust 的所有权、借用和生命周期体系,用来约束别名、移动和内存管理。
comptime: Zig 的编译期执行机制,可在编译阶段运行普通 Zig 代码。
tokio: Rust 中最常用的 async runtime,负责调度异步任务和 I/O。
oracle tests: 用已知正确的行为或输出当基准,验证迁移是否保持语义。
unsafe: Rust 中显式绕过编译器安全检查的代码区域,常用于底层实现或 FFI。