主要观点:世界基于 C 语言运行,Bun v1.1.28 引入从 JavaScript 编译和运行原生 C 的实验性支持,传统使用 N-API 和编译为 WebAssembly 存在诸多问题,而新方式可快速编译和低开销运行原生 C 并与 JavaScript 交互。
关键信息:
- N-API 构建复杂、性能差,每次 Node.js 更新 V8 可能导致原生插件更改,且在 CI 中需安装 Python 和 C++编译器,维护多个构建目标也复杂,JavaScript 到 N-API 函数调用开销大。
- WebAssembly 隔离内存模型有严重权衡,无法直接访问系统调用,默认传递数据需克隆,对于系统库性能提升不明显。
bun:ffi
使用 TinyCC 快速编译 C 程序,生成内联函数包装器自动转换类型,开销低,如示例中编译随机数生成器和转换视频、使用 macOS Keychain API 等,可用于粘合 C 或类似库与 JavaScript,但不适合编译大型 C 项目。
重要细节:hello.c
和hello.ts
示例展示从 JavaScript 调用 C 函数hello
。- 测量
bun:ffi
编译时间约 5.16ms,与 C++基准测试对比,bun:ffi
函数调用开销约 2ns 等。 ffmpeg.js
和mp4.c
示例展示快速转换视频,keychain.js
和keychain.c
示例展示使用 macOS Keychain API 保存和加载密码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。