bun:ffi 具有从 JavaScript 以低开销编译和运行 C 代码的实验性支持。
使用方法(bun:ffi 中的 cc)
有关背景信息,请参阅介绍性博客文章。
JavaScript 代码:
hello.ts
hello.c
hello.ts 会输出:
terminal
cc 使用 TinyCC 编译 C 代码,然后将其与 JavaScript 运行时链接,并在原地转换类型。
基本类型
cc 支持与 dlopen 相同的 FFIType 值。
字符串、对象及非基本类型
对于无法与 C 类型一一对应的字符串、对象和其他非基本类型,cc 支持 N-API。
使用 napi_value 可以在 C 函数中传递或接收 JavaScript 值,而无需进行任何类型转换。
你也可以传递一个 napi_env,用以接收调用 JavaScript 函数时使用的 N-API 环境。
从 C 返回字符串到 JavaScript
例如,从 C 向 JavaScript 返回字符串:hello.ts
hello.c
hello.c
cc 参考文档
library: string[]
使用 library 数组来指定要与 C 代码进行链接的库。
symbols
使用 symbols 对象来指定要暴露给 JavaScript 的函数和变量。
source
source 是要编译并与 JavaScript 运行时链接的 C 代码路径。
flags: string | string[]
flags 是传递给 TinyCC 编译器的可选字符串数组。
-I 指定包含目录和 -D 预处理定义的标志。
define: Record<string, string>
define 是传递给 TinyCC 编译器的可选预处理器定义对象。