Bun现支持“在JavaScript中编译并运行C代码”

Bun现支持“在JavaScript中编译并运行C代码”

在软件开发领域 , 技术迭代和更新是常态 。 最近 , Node.js社区发生了一些重大变化 , 这些变化可能会对JavaScript开发者产生深远影响 。 Node.js计划移除自16.13.0版本以来一直包含的工具Corepack , 这一决定在开发者中引起了广泛的讨论 。
Corepack是一个简化了管理不同Node.js版本和包管理器(如npm、yarn和pnpm)的工具 , 它允许开发者在不同项目中轻松切换 , 同时解决了兼容性问题和手动配置的繁琐 。 然而 , Corepack的命运在经历了一番波折后 , 最终决定被移除 。 这一决定背后的故事颇为曲折 , 原本计划将Corepack默认启用 , 但后来却出现了180度大转弯 , 决定将其移除 。 许多web开发者对此表示失望 , 因为Corepack曾是他们处理npm问题的一大助力 。
与此同时 , Bun这个集成了JavaScript运行时、打包器、测试运行器和包管理器的工具 , 现在提供了一个实验性功能 , 允许从JavaScript直接编译和运行原生C代码 。 Bun的这一新特性引发了社区的广泛关注 , 因为它打开了JavaScript与系统级编程语言C之间的直接通道 。
【Bun现支持“在JavaScript中编译并运行C代码”】Bun的创建者Jarred Sumner表示 , 世界上从压缩算法到密码学 , 再到网络 , 甚至是你正在阅读这篇文章的web浏览器 , 几乎都是用C语言编写的 。 如果它们不是用C语言编写的 , 那么它们就是使用CABI(例如C++、Rust、Zig等)编写的 , 并以C库的形式提供 。 C语言及其ABI是系统编程的过去、现在和未来 。
Sumner指出 , 通过C语言 , 开发者可以以低门槛的方式使用C库和系统库 , 这一特性允许运行JavaScript的同一项目也能够运行C代码 , 而无需单独的构建步骤 。 他举例说 , 使用Bun可以通过ffmpeg将短视频转换速度提高三倍 , 这得益于避免了为每个视频生成新进程和分配大量内存的开销 。 此外 , 还可以通过macOSKeychainAPI安全地保存和加载密码 。
Bun的这一新特性对于那些希望从JavaScript使用C库或系统API的开发者来说是一个福音 。 尽管如此 , Sumner也提醒说 , 开发者可能并不需要用这种方式来编译大型项目 , 如PostgreSQL或SQLite 。 因为TinyCC编译的C代码虽然性能尚可 , 但它不会进行像Clang或GCC那样的高级优化 , 例如自动向量化或非常专业的CPU指令集 。
在技术快速迭代的今天 , Node.js和Bun的这些变化标志着JavaScript生态系统正在不断进化 , 以满足开发者日益增长的需求 。 对于Node.js来说 , 移除Corepack可能是为了简化其工具链 , 让开发者更专注于使用npm、yarn或pnpm等成熟的包管理器 。 而对于Bun , 支持原生C代码的运行则展示了其在提升性能和功能性方面的雄心 。
这些变化对于JavaScript开发者来说是一个双刃剑 。 一方面 , 他们可能需要重新评估自己的工具选择和开发流程 , 以适应Node.js的新方向;另一方面 , Bun的新特性为他们提供了更强大的工具 , 以构建性能更优和功能更全的应用 。

    推荐阅读