本文档介绍了 Bun 的生成类绑定系统,该系统将 Zig 实现的类公开给 JavaScript。该系统充当 Bun 的原生 Zig 实现与 JavaScript API 表面之间的桥梁,自动生成必要的绑定,使原生功能可供 JavaScript 代码访问。
有关更广泛的 JavaScript API 表面的信息,请参阅 JavaScript API Surface。有关特定 Bun 命名空间 API 的详细信息,请参阅 Bun Namespace API。有关 Web API 实现,请参阅 Web APIs and Standards Compliance。
生成的类绑定系统提供了一个集中的注册表,该注册表将 Zig 类型映射到 JavaScript 类。该系统使 Bun 能够公开在 Zig 中实现的、对性能至关重要的原生功能,同时保持干净的 JavaScript API 表面。
绑定系统的核心是定义在 src/bun.js/bindings/generated_classes_list.zig7-89 中的 Classes 结构体,它充当一个中央注册表,其中所有应公开给 JavaScript 的 Zig 类型都声明为公共常量。
来源:src/bun.js/bindings/generated_classes_list.zig1-89
绑定系统按源模块组织类,反映了 Bun 的内部架构。
来源:src/bun.js/bindings/generated_classes_list.zig8-88
| 类别 | 类 | 目的 |
|---|---|---|
| Web API | Blob、Request、Response、TextDecoder、Crypto | 符合标准的 Web 平台 API |
| HTML 处理 | HTMLRewriter、Element、Comment、TextChunk、DocType、EndTag | 服务器端 HTML 操作 |
| 加密 | CryptoHasher、MD4、MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA512_256 | 哈希函数和加密操作 |
| 测试 | Expect、ExpectAny、ExpectStatic、ExpectMatcherContext 等。 | 兼容 Jest 的测试框架 |
| 文件系统 | FileSystemRouter、Glob、FSWatcher、StatWatcher | 文件操作和路由 |
| Shell & 进程 | ShellInterpreter、ParsedShellScript、Subprocess、ResourceUsage | Shell 执行和进程管理 |
| 构建工具 | Bundler、Transpiler、BuildArtifact、BuildMessage | 代码转换和打包 |
| 网络 | ServerWebSocket、TCPSocket、TLSSocket、UDPSocket、HTTPServer | 网络协议和服务器 API |
| Node.js 兼容性 | NodeJSFS、NodeHTTPResponse | Node.js API 兼容层 |
| 计时器 | Timeout、Immediate | 定时器和调度 API |
| 压缩 | NativeZlib、NativeBrotli | 压缩算法实现 |
| 数据库 | PostgresSQLConnection、PostgresSQLQuery、RedisClient | 数据库客户端实现 |
来源:src/bun.js/bindings/generated_classes_list.zig8-88
类绑定系统遵循结构化方法来公开 Zig 功能。
来源:src/bun.js/bindings/generated_classes_list.zig7-89
该 Classes 结构体对相关功能进行分组,同时保持清晰的分离。
某些类为同一实现提供了多个名称。
JSBundler 是 Bundler 的别名 (src/bun.js/bindings/generated_classes_list.zig34-35)JSTranspiler 是 Transpiler 的别名 (src/bun.js/bindings/generated_classes_list.zig36-37)该系统包含用于流实现的专用内部类。
FileInternalReadableStreamSource (src/bun.js/bindings/generated_classes_list.zig73)BlobInternalReadableStreamSource (src/bun.js/bindings/generated_classes_list.zig74)BytesInternalReadableStreamSource (src/bun.js/bindings/generated_classes_list.zig75)这些提供了 JavaScript ReadableStream 实现的原生支持。
生成的类绑定通过多种机制与 Bun 的 API 表面集成:
Blob、Request 和 Response 这样的类可以直接从 JavaScript 构造。ServerWebSocket 这样的类是通过 Bun.serve() 等 API 创建的。BuildArtifact 和 BuildMessage 这样的类是从构建操作中返回的。ResourceUsage 这样的类为进程监控提供了结构化数据。这个绑定系统确保所有原生功能都可以通过一致的 JavaScript 接口访问,同时保持 Zig 实现的性能优势。