17611538698
webmaster@21cto.com

Bun 转向 Rust 后,Zig 社区把它的旧代码捡起来做成了 Buz

开源 0 13 1小时前
图片

21CTO导读:在 Bun 借助 AI 全面拥抱 Rust 之后,Zig 社区选择接手 Bun 弃用的 Zig 代码,推出了新项目 Buz。通过迁移至现代 Zig 工具链与构建系统,Buz 将增量编译压至 1 秒以内,并规定“仅接收 AI 辅助代码”以快速清理技术债。

Bun 的 Zig 时代本来已经画上句号。

为了将 53 万多行 Zig 代码迁移至 Rust,Jarred Sumner 调度 64 个 Claude 实例连续运行 11 天。重写分支于 5 月合入主线,并在 7 月发布了完整复盘。正当大家等待 Bun v1.4 带着全新 Rust 架构登场时,Zig 社区却从弃用的代码库中拉出了一条全新的分支——Buz

项目名故意将 Bun 结尾的 n 替换为代表 Zig 的 Z。它的起点是 Bun 切换 Rust 前的最后一个 Zig 提交,目标非常明确:基于现代 Zig 语法,打造一个可无缝替代 Bun 的运行时。

图片

遗留代码没有死:交界点上的 Buz


5 月初,Jarred 曾声称 Rust 重写只是个人实验;然而测试通过率迅速上升,重写分支迅速在 5 月 14 日进入主线。7 月公布的数据显示,这场大规模迁移累计产生 6502 个提交,新增代码逾 100 万行。

但截至目前,官方最新稳定版仍停留在 5 月发布的 Bun v1.3.14(即最后一个 Zig 稳定版)。Rust 版本虽已进入主线与 canary 分支,v1.4 却尚未正式面世。

Buz 恰好卡在这个空档期。它并未重复造轮子,而是接管了 Bun 遗留的 Zig 代码库继续迭代。

同样这么做的还有更早出现的 Cruller,不过 Cruller 主动剥离了包管理器、打包器与测试工具,仅精简保留生产环境的 JS 运行能力。而 Buz 更加激进:它计划保留 Bun 的完整生态,实现 1:1 的直接替换。

核心突破:构建时间缩短至 1 秒以内


对于原版 Bun 的开发者而言,编译缓慢一直是核心痛点。曾有工程师统计,自己每周要浪费 181 分钟等待 Zig 编译。

Buz 作者将整个构建图重新迁移至 build.zig,并将 JavaScriptCore 与 ICU 等底层 C/C++ 依赖统一纳入该构建流程。同时跟进 Zig 最新主分支,并对增量构建实施了补丁优化。

现在,执行如下增量调试命令:

./zig build --watch -fincremental

增量构建耗时被成功压缩至 1 秒以内。

目前 60% 的耗时仍集中在 mold 链接阶段;若 Zig 原生链接器补齐关键特性,增量构建时间有望进一步降至 300 毫秒以内。这种提速彻底改变了大型底层项目的开发体验。

此外,Buz 还完成了以下重构:

  • 清理死代码:成功移除超 1.1 万行无用代码。

  • 同步测试集:引入 Rust 版 Bun 的新测试用例,追平新特性与漏洞修复。

  • 拥抱标准库:逐步用 Zig 标准库替代原有的自建轮子。

  • 持续上游同步:保持对文件系统、哈希计算及 CLI 模块的高频更新。


上线仅一周,该项目在 GitHub 已收获约 190 个 Star。代码统计显示 Zig 占比约 60%,C++ 占 26%。这也揭示了一个事实:无论外层采用 Zig 还是 Rust,JavaScriptCore 等 C/C++ 核心组件依然占据举足轻重的地位。

图片

戏剧性规则:暂不接收纯人工代码


此前 Bun 使用 Claude 将代码从 Zig 迁移到 Rust 时,曾引发 Zig 社区对产生“AI 垃圾代码(AI slop)”的剧烈批判。然而接手旧代码的 Buz,同样选择了依赖大语言模型(LLM)。

仓库中甚至明确标注了一条醒目的贡献指南:所有代码提交必须由 LLM 辅助完成。只有当测试覆盖率与代码健康度达到标准后,该限制才会解除。

作者的逻辑十分现实:依靠人工去梳理近 60 万行历史遗留代码,极易摧毁维护者的精力。因此,项目策略是用 AI 承担批量清理工作,人类开发者则负责把控方向、重构架构并审核正确性。所有提交还必须通过 Sol Max 或 Fable Max 的深度审查。

这构成了某种戏剧性的互讽:社区尝试用 AI 来清理一份曾被指责“AI 味太重”的代码库。

对此,Bun 创始人 Jarred 也在 X(原 Twitter)作出回应。他指出 Bun 主线近期也清理了约 3.9 万行死代码,且每天都有 Claude 定时巡检死代码。他强调,Bun 需要同时兼顾多平台(Linux, Windows, macOS, FreeBSD, Android)与多架构(x64, ARM64),大量平台特化代码只会在特定编译目标下生效。

这表明死代码总量只能反映系统复杂度,无法直接作为衡量工程质量的标准。双方真正较量的,是在重构后能否持续守住功能完整性、跨平台兼容性以及安全更新。

现状评估:仍处于实验室阶段


尽管目标宏大,但 Buz 距离生产级“无缝替代”尚有显著差距。仓库 README 已明确列出当前风险:

  • 平台限制:目前仅聚焦于 x86_64-linux-gnu 的本地编译与测试。

  • 测试未通过:上游 Bun 的完整测试套件中仍有大量用例失败。

  • 安全隐患:内置的 JavaScriptCore 版本滞后,缺乏最新的安全补丁,且存在已知漏洞。

  • 无正式发布:未提供任何 Stable Release,本质上仍是维护者的实验场。


结语


Zig 版 Bun 确实重回视野,但目前仍停留在实验室阶段。

Buz 未来面临的最大挑战并非清理代码,而是如何跟上 Bun 主线的演进节奏。每当 Bun 团队新增 Node.js API、修复跨平台 Bug 或升级 JavaScriptCore 时,Buz 都需要投入精力进行同步。对于一个社区驱动的项目而言,这场长期拉锯战远比完成首次构建更为艰难。

然而这个实验依然具备极高价值:Bun 从 Zig 转向 Rust,验证了 AI 压缩大型工程跨语言迁移周期的可行性;而 Buz 则在探索另一个命题——在不更换语言的前提下,依托现代 Zig、重构构建工具链并借助 AI 压低技术债,能否打造出一个更易维护的底层系统?

作者:聆听音乐的鱼

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信