Buz: 一個現代化的 Zig 版 Bun 分叉,實現更快的構建與更乾淨的程式碼
Buz: 一個現代化的 Zig 版 Bun 分叉,實現更快的構建與更乾淨的程式碼
Buz 旨在成為 Bun 的直接替代方案,並擁有現代化、「去冗餘」的程式碼庫
Buz 是 Bun 運行時的一個開發中分叉(fork),基於 Bun 轉向 Rust 重寫之前的最後一個提交版本。該專案的主要目標是提供 Bun 的直接替代方案,同時透過利用現代 Zig 並積極減少技術債,顯著提升程式碼品質與開發者體驗。
透過 build.zig 實現亞秒級增量構建
Buz 透過將整個構建圖(build graph)遷移到 build.zig(包括 JavaScriptCore 的內置原始碼)來實現亞秒級的增量構建。與原始的 Bun 構建流程相比,這次遷移大大加速了開發循環。
根據貢獻者 kristoff_it 的說法,這證明了對於 Bun 來說,快速構建一直都是可能的,儘管仍存在一些平台限制:
- Zig 的增量編譯目前不支援 aarch64。
- 目前只有 Linux 連結器(linker)支援二進位修補(binary patching)。
技術債減少與「去冗餘」(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 運行時作為一個副專案來維護的困難性,並指出如果沒有廣泛的生態系統,使用者可能會偏好官方的 Bun 版本或回歸 Node.js。
- 關於程式碼品質:其他開發者讚揚對程式碼管理(code stewardship)的關注,並指出常見的「滴答」(tick-tock)週期:專案會快速經歷功能開發階段(tick),然後需要一段穩定化與「去冗餘」階段(tock)。