核心 JavaScript 运行时在 Bun 中提供了基础的 JavaScript 执行环境,它构建在 JavaScriptCore 之上,并拥有大量的自定义绑定。该系统建立了 Bun 的原生 Zig/C++ 实现与 JavaScript 代码执行之间的桥梁,负责管理 VM 的生命周期、全局对象的初始化以及核心 API 绑定。
有关事件循环和异步执行的信息,请参阅 ZigGlobalObject and Event Loop。有关模块加载和解析机制的信息,请参阅 Module System and Loading。有关 VM 内存管理和垃圾回收的信息,请参阅 JavaScript VM Lifecycle。有关进程级 API 和环境集成的信息,请参阅 Process API and Environment。
Bun 的运行时构建在 WebKit 的 JavaScriptCore 引擎之上,提供高性能的 JavaScript 执行环境。集成涉及自定义全局对象、广泛的 API 绑定和细致的内存管理协调。
来源: src/bun.js/bindings/ZigGlobalObject.h93-400 src/bun.js/bindings/ZigGlobalObject.cpp860-890 src/bun.js/bindings/headers.h20-40
Zig::GlobalObject 类是 Bun 中 JavaScript 执行的主要全局对象,它通过 Bun 特有的 API 和 Node.js 兼容层扩展了 JavaScriptCore 的功能。
来源: src/bun.js/bindings/ZigGlobalObject.cpp259-325 src/bun.js/bindings/ZigGlobalObject.cpp860-886 src/bun.js/bindings/ZigGlobalObject.cpp912-975
GlobalObject 维护着许多用于不同 API 类别的惰性初始化结构
| API 类别 | 关键结构 | 目的 |
|---|---|---|
| 核心运行时 | m_bunVM, m_scriptExecutionContext | VM 引用和执行上下文 |
| Web API | m_subtleCryptoObject, m_performanceObject | 标准 Web 平台 API |
| Node.js 兼容性 | m_processObject, m_requireMap | Node.js 兼容层 |
| 流 | m_lazyReadableStreamPrototypeMap | 流 API 和控制器 |
| 测试 | m_lazyTestModuleObject | Jest 兼容的测试框架 |
| 加密 | m_JSCryptoKey,各种加密结构 | 加密 API |
来源: src/bun.js/bindings/ZigGlobalObject.h200-320 src/bun.js/bindings/ZigGlobalObject.h425-800
绑定系统通过涉及 C++ 包装函数、Zig 实现和自动代码生成的多种分层方法,提供了 JavaScript 和原生代码之间的无缝互操作性。
来源: src/bun.js/bindings/bindings.cpp149-200 src/bun.js/bindings/headers.h45-150 src/bun.js/bindings/webcore/DOMIsoSubspaces.h18-75
运行时在 JavaScript 值和原生类型之间提供了广泛的类型转换
this 绑定和错误传播关键转换函数包括 JSValue::asString()、JSValue::asArrayBuffer_(),以及针对 Web API 类型(如 FetchHeaders 和 AbortSignal)的专用转换器。
来源: src/bun.js/bindings/headers.h194-300 src/bun.js/bindings/bindings.cpp610-690
运行时与 JavaScriptCore 的垃圾回收器仔细协调,以确保 JavaScript/原生边界之间的正确对象生命周期管理。
visitChildren 实现DOMIsoSubspaces 和 DOMClientIsoSubspaces 类管理不同对象类别的专用内存分配,提供性能优化和内存安全。
来源: src/bun.js/bindings/webcore/DOMIsoSubspaces.h12-20 src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h11-20 src/bun.js/bindings/ZigGlobalObject.h161-185
运行时提供了全面的错误处理,将 JavaScript 异常与原生错误条件连接起来
computeErrorInfoWithPrepareStackTrace 函数族提供了与 V8 兼容的错误格式化,并支持源映射。
来源: src/bun.js/bindings/ZigGlobalObject.cpp331-450 src/bun.js/bindings/ZigGlobalObject.cpp687-810