菜单

生成的类绑定

相关源文件

本文档介绍了 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 APIBlobRequestResponseTextDecoderCrypto符合标准的 Web 平台 API
HTML 处理HTMLRewriterElementCommentTextChunkDocTypeEndTag服务器端 HTML 操作
加密CryptoHasherMD4MD5SHA1SHA224SHA256SHA384SHA512SHA512_256哈希函数和加密操作
测试ExpectExpectAnyExpectStaticExpectMatcherContext 等。兼容 Jest 的测试框架
文件系统FileSystemRouterGlobFSWatcherStatWatcher文件操作和路由
Shell & 进程ShellInterpreterParsedShellScriptSubprocessResourceUsageShell 执行和进程管理
构建工具BundlerTranspilerBuildArtifactBuildMessage代码转换和打包
网络ServerWebSocketTCPSocketTLSSocketUDPSocketHTTPServer网络协议和服务器 API
Node.js 兼容性NodeJSFSNodeHTTPResponseNode.js API 兼容层
计时器TimeoutImmediate定时器和调度 API
压缩NativeZlibNativeBrotli压缩算法实现
数据库PostgresSQLConnectionPostgresSQLQueryRedisClient数据库客户端实现

来源:src/bun.js/bindings/generated_classes_list.zig8-88

绑定生成流程

类绑定系统遵循结构化方法来公开 Zig 功能。

来源:src/bun.js/bindings/generated_classes_list.zig7-89

关键实现模式

命名空间组织

Classes 结构体对相关功能进行分组,同时保持清晰的分离。

别名定义

某些类为同一实现提供了多个名称。

流源类

该系统包含用于流实现的专用内部类。

这些提供了 JavaScript ReadableStream 实现的原生支持。

与 API 表面的集成

生成的类绑定通过多种机制与 Bun 的 API 表面集成:

  1. 直接实例化:像 BlobRequestResponse 这样的类可以直接从 JavaScript 构造。
  2. 工厂方法:像 ServerWebSocket 这样的类是通过 Bun.serve() 等 API 创建的。
  3. 返回值:像 BuildArtifactBuildMessage 这样的类是从构建操作中返回的。
  4. 事件对象:像 ResourceUsage 这样的类为进程监控提供了结构化数据。

这个绑定系统确保所有原生功能都可以通过一致的 JavaScript 接口访问,同时保持 Zig 实现的性能优势。

来源:src/bun.js/bindings/generated_classes_list.zig1-89