Bun 的快速转型:正在进行的 Rust 重写
高性能 JavaScript 运行时的格局正在再次发生变化。在通过 X 分享的一项令人惊讶的更新中,Jarred Sumner 宣布了 Bun 演进过程中的一个重要里程碑:使用 Rust 重写运行时。这一举动标志着作为 Node.js 和 Deno 最快增长的替代方案之一,其底层架构可能正在发生转向。
里程碑:99.8% 的测试覆盖率
根据 Sumner 的说法,Rust 重写版本已经实现了与原始实现惊人的对等水平。具体而言,99.8% 的 Bun 现有测试套件现在可以在 Linux x64 glibc 上通过。
对于 Bun 这样复杂程度的项目——它将包管理器、测试运行器和打包器集成到一个单一的二进制文件中——在重写过程中达到近 100% 的测试对等性是一项巨大的技术成就。这表明 Bun 的核心逻辑和 API 表面已成功映射到 Rust,确保了转型过程能够保持用户对当前版本所期望的稳定性和功能性。
为什么选择 Rust?
虽然原始的 Bun 是使用 Zig 构建的,但转向 Rust 可能是出于对更广泛的生态系统支持、更强的内存安全保证以及更庞大的可用贡献者群体的渴望。Rust 已成为性能和安全性至关重要的系统编程行业标准,正如在 SWC 和 Turbopack 等其他现代工具的开发中所见。
重写的技术影响
从 Zig 转向 Rust 不仅仅是语法上的改变;它需要对内存管理方式以及运行时如何与 JavaScript 引擎交互进行根本性的重新思考。测试套件在 Linux x64 glibc 上如此全面地通过,这一事实表明团队已成功应对了以下挑战:
- 系统调用对等性: 确保 Rust 实现能够以与 Zig 版本相同的方式处理 I/O 和系统操作。
- API 兼容性: 维护现有的 Bun API,以便现有项目可以在不发生破坏性变更的情况下进行迁移。
- 性能基准测试: 虽然测试套件确认了正确性,但此类重写的最终目标通常是维持或超越现有的性能基准。
展望未来
尽管公告很简短,但对 JavaScript 生态系统的影响是深远。基于 Rust 的 Bun 可能会利用更广泛的 crates(Rust 库)来加速开发,并提高在不同操作系统和架构上的稳定性。
随着社区等待有关此次转型时间表的更详细文档,以及 Zig 是否会被完全淘汰还是以混合模式使用,有一件事是明确的:在 JS 运行时领域对极致性能的追求正在不断推向系统编程的边界。