近日,JavaScript运行时Bun的创始人Jarred Sumner在社交媒体上透露,团队正在探索使用Rust语言对Bun的某些核心模块进行重写。这一消息迅速在开发者社区引发热议——Bun自2022年面世以来,凭借极致的启动速度和内置工具链,成为Node.js和Deno的有力竞争者,而其底层一直依赖Zig语言。如今转向Rust,究竟是技术路线的自然迭代,还是对生态压力的无奈妥协?
从Zig到Rust:一场“不可能三角”的取舍
Bun最初选择Zig,看中的是其零开销抽象、与C ABI的天然亲和力,以及对内存布局的精细控制。Zig让Bun在启动时间、包体积和硬件利用率上实现了惊人表现——官方数据显示,Bun的冷启动速度比Node.js快4倍以上。然而,随着Bun功能膨胀(内置打包器、转译器、Test Runner等),Zig的短板逐渐显现:社区生态弱小、第三方库匮乏,导致团队必须从零编写大量基础设施代码。
“Zig很适合底层系统编程,但当我们希望快速集成加密库、HTTP解析器或正则引擎时,Rust生态的优势就变得难以忽视。”一位接近Bun核心团队的开发者匿名表示。Rust拥有crates.io上超过15万个包,涵盖TLS(rustls)、HTTP(hyper)、解析(nom)等直接可用的高性能模块,而Zig的包管理器甚至尚在孵化之中。
重写范围:并非全盘推倒
值得注意是,此次重写并非“抛弃Zig,全部重来”。据Jarred Sumner在Discord频道中的说明,计划主要针对IO密集型和安全敏感模块,例如文件系统操作、网络栈、加密套件等。而Bun的JavaScript/TypeScript解析器、JIT编译器和内联缓存等核心引擎部分,仍保留Zig实现。
这种“混合架构”试图平衡开发效率与运行性能:Rust提供成熟的异步运行时(tokio)和内存安全保证,能有效减少Bun在并发场景下的潜在bug;而Zig继续负责对性能最苛刻的解析与编译环节,避免重写带来的回归风险。Bun官方博客此前也曾暗示,Zig在低级代码生成方面具有Rust无法比拟的灵活性。
社区分裂:Rust“真香”还是“妥协”?
消息一出,开发者论坛迅速分成两派。支持者认为,Rust的生态系统将为Bun带来更快的迭代速度和更广泛的贡献者基础——“Bun终于可以摆脱‘孤岛’困境,直接复用Rust社区在HTTP/3、WebAssembly等领域的最新成果。”事实上,Deno早期也经历过类似转型:从Go转向Rust后,其扩展能力大幅提升。
质疑者则担忧,重写可能破坏Bun引以为傲的“单一二进制”理念。目前Bun的二进制仅有20MB左右,而引入Rust模块可能因链接libstd和依赖库而体积膨胀。此外,Rust的编译时泛型与Zig的编译期计算在抽象模型上存在差异,模块边界处的数据交换可能带来性能损失。“如果只是为了‘招聘更简单’而放弃Zig的优雅,那Bun将失去自己的灵魂。”一位Zig布道者尖锐评论。
行业影响:JavaScript运行时的“Rust化”浪潮
Bun的选择并非孤例。从Node.js的napi-rs到Deno的原生Rust架构,再到Tauri(基于Rust的桌面框架)对Web生态的渗透,Rust正成为连接系统层与Web层的新“胶水语言”。如果Bun成功完成本次重写,它将更自然地融入Rust构建的云原生基础设施——Vercel的Edge Runtime、Cloudflare Workers等平台均深度依赖Rust。
对Zig社区而言,Bun的“倒戈”无疑是一次信心打击。作为Zig迄今为止最成功的应用,Bun的转向可能让更多开发者对Zig的生态成熟度产生疑虑。但Jarred Sumner强调,Bun团队仍会持续为Zig编译器贡献代码,并保留Zig在后端的核心地位。
未来时间表:谨慎乐观
根据公开路线图,Bun的Rust重写模块将随v1.3版本逐步推送,预计2025年Q2完成第一阶段的整合。团队承诺,重写期间不会破坏现有API,且会通过CI基准测试确保性能不倒退。对于用户来说,最直接的感知可能是:npm install的速度进一步提升(得益于Rust的并行下载逻辑),以及内存泄漏问题的减少。
“我们不认为Zig与Rust是非此即彼的选择。”Jarred Sumner在最新访谈中说道,“Bun的目标始终是为JavaScript开发者提供最快的工具组合——无论是用哪个语言来实现。”这番话或许道出了技术团队在理想与现实间的真实处境:当创新的激情遭遇生态的引力,妥协本身也是一种进步。