Buz: 一个现代化的 Zig 版 Bun 分支,旨在实现更快的构建和更整洁的代码

Buz: 一个现代化的 Zig 版 Bun 分支,旨在实现更快的构建和更整洁的代码

Buz 旨在成为 Bun 的无缝替代方案,拥有现代化、“去冗余”的代码库

Buz 是 Bun 运行时的一个开发中分支,基于 Bun 转向 Rust 重写之前的最后一个提交。该项目的主要目标是提供 Bun 的无缝替代方案,同时通过利用现代 Zig 并积极减少技术债务,显著提高代码质量和开发者体验。

通过 build.zig 实现亚秒级增量构建

Buz 通过将整个构建图迁移到 build.zig(包括 JavaScriptCore 的供应商源码)实现了亚秒级的增量构建。与原始的 Bun 构建流程相比,这种转变极大地加速了开发循环。

根据贡献者 kristoff_it 的说法,这证明了对于 Bun 来说,快速构建一直都是可能的,尽管仍存在一些平台限制:

  • Zig 增量编译目前不支持 aarch64。
  • 目前只有 Linux 链接器支持二进制补丁。

技术债务减少与“去冗余” (deslopping)

该项目重点在于从原始 Bun 代码库中移除“slop”——即低质量或冗余的代码。关键成就和策略包括:

  • 移除死代码:作者已经移除了超过 11,000 行完全多余的代码。
  • 现代化:代码库的部分内容已被重写,以更多地依赖 Zig 标准库。
  • 测试集成:来自 Bun Rust 版本的全部新测试已导入 Buz,以确保功能对等和错误修复,尽管许多测试仍在处理中。
  • AI 驱动的重构:由于代码库规模巨大(约 60,000 行),作者正在广泛使用 LLM 来理清并重写子系统。因此,在代码库达到可管理的稳定状态之前,该项目目前不接受人工编写的贡献。

架构与依赖

虽然一些批评者认为 Bun 主要是 C/C++ 项目的“胶水”,但 Buz 的作者澄清说,该项目很大一部分是原生 Zig 代码。例如,仅包管理器就包含 40,000 行代码,并且所有的 Node 和 Web API 都是用 Zig 实现的。

Buz 继续依赖几个关键的外部依赖,包括:

  • JavaScriptCore (JSC):核心引擎。
  • uWebSockets, Brotli, lol-html, 和 tinycc:核心性能关键库。

关于 V8 兼容性,Buz 维持了 Bun 现有的策略,即使用部分 V8 API 垫片 (shims) 以确保流行包能够继续工作,而不是实现完全覆盖。

社区观点与评论

Buz 的发布在技术社区中引起了各种反应:

  • 关于 AI 使用:一些用户对使用 LLM 来清理据称也是由 LLM 创建的代码表示讽刺,一位用户指出:“我们已经达到了 2026 年的技术巅峰。”
  • 关于实用性:一些开发者质疑亚秒级构建时间的实际价值,认为构建速度很少是运行时开发的主要瓶颈。
  • 关于可持续性:批评者指出,将 JavaScript 运行时作为一个 side project 进行维护非常困难,并指出如果没有广泛的生态系统,用户可能会更倾向于官方的 Bun 版本或回归 Node.js。
  • 关于代码质量:其他开发者赞扬了对代码治理的关注,指出项目中常见的“滴答”周期:项目在功能开发阶段快速推进(“滴答”),然后需要一个稳定和“去冗余”阶段(“答”)。

Sources