菜单

运行时架构

相关源文件

本文档描述了 Deno 运行时系统的顶层架构,重点关注核心组件的结构以及它们如何交互以创建 JavaScript 执行环境。它涵盖了整体系统设计、扩展架构、Worker 管理以及 Rust 和 JavaScript 层之间的集成。

有关特定初始化序列的详细信息,请参阅 引导进程。有关暴露给 JavaScript 的 Deno API 的信息,请参阅 Deno 命名空间 API。有关安全模型实现的详细信息,请参阅 权限系统

运行时系统概述

Deno 的运行时架构围绕分层设计构建,将核心功能分离到不同的、模块化的组件中。其基础是 V8 JavaScript 引擎,通过 deno_core 与 Rust 集成,而更高级的功能则由扩展系统提供。

来源: runtime/js/99_main.js1-1149 runtime/lib.rs1-61 runtime/worker_bootstrap.rs1-238

扩展架构

运行时功能组织为提供特定能力的扩展。每个扩展都封装了 Rust 操作和 JavaScript 实现,从而实现了关注点的清晰分离。

来源: ext/web/lib.rs55-127 ext/fs/lib.rs249-283 ext/net/lib.rs1-50 ext/http/lib.rs1-100

扩展集成模式

扩展遵循集成 Rust 操作与 JavaScript API 的一致模式

组件目的示例文件
lib.rs扩展定义和设置ext/web/lib.rs55-127
ops.rsRust 操作实现ext/fs/ops.rs166-200
JavaScript 文件Web 标准 API 实现ext/web/02_timers.js29-60
状态管理每个 Isolate 的状态存储ext/web/lib.rs120-126

来源: ext/web/lib.rs1-424 ext/fs/ops.rs1-2000 ext/web/02_timers.js1-150

Worker 架构

Deno 实现两种不同的 Worker 类型,每种类型都为不同的执行上下文提供服务,它们共享基础设施但具有不同的能力。

来源: runtime/ops/worker_host.rs35-48 runtime/ops/worker_host.rs85-110 runtime/ops/worker_host.rs144-260

Worker 生命周期管理

Worker 系统管理从创建到终止的整个生命周期

  1. 创建runtime/ops/worker_host.rs144-260 处理带有权限继承的 Worker 创建
  2. 通信runtime/ops/worker_host.rs312-350 管理双向消息传递
  3. 终止runtime/ops/worker_host.rs262-309 确保干净的资源清理

来源: runtime/ops/worker_host.rs60-83 runtime/web_worker.rs1-50

引导和配置系统

运行时引导进程可通过全面的选项系统进行配置,该系统决定执行模式、权限和功能可用性。

来源: runtime/worker_bootstrap.rs88-156 runtime/js/99_main.js790-989 runtime/js/99_main.js991-1111

执行模式配置

不同的执行模式以特定的行为和 API 可用性来配置运行时

模式目的配置
运行deno run 执行标准的运行时,具有完整的 API 访问权限
工作器Web Worker 上下文隔离的环境,带有消息传递
测试deno test 执行增强了测试 API 和 sanitizers
服务deno serve 执行HTTP 服务器优化和多线程
Repl交互模式增强的内省和评估

来源: runtime/worker_bootstrap.rs13-56 runtime/js/99_main.js815-882

权限集成

权限系统已深度集成到整个运行时架构中,在每个 API 访问级别都提供了安全边界。

来源: runtime/permissions.rs24-64 runtime/permissions/lib.rs367-671 runtime/permissions/prompter.rs59-76

权限执行流程

所有访问系统资源的操作都经过权限验证

  1. JavaScript 调用:用户调用 API,如 Deno.readFile()
  2. Op 分发:通过 ext/fs/ops.rs1500-1550 函数将调用路由到 Rust Op。
  3. 权限检查:Op 通过 runtime/permissions.rs69-174 进行验证。
  4. 资源访问:如果允许,操作将继续执行实际的系统调用

来源: ext/fs/ops.rs166-200 runtime/permissions.rs1-198 runtime/permissions/lib.rs1-100

全局环境设置

运行时创建一个全面的 JavaScript 环境,包含 Web 标准全局变量、Deno 特有 API 和扩展提供的功能。

来源: runtime/js/99_main.js480-499 runtime/js/90_deno_ns.js45-169 runtime/js/99_main.js955-976

API 表面组织

整个 API 表面被组织成逻辑分组

类别实现访问模式
Web 标准ext/web/lib.rs55-127直接全局访问
Deno 核心 APIruntime/js/90_deno_ns.js45-169Deno.* 命名空间
文件系统ext/fs/30_fs.js1-1000Deno.readFile() 等。
网络ext/net/01_net.js1-500Deno.connect() 等。
Node.js 兼容性ext/node/polyfills/require()process.*
不稳定特性runtime/js/90_deno_ns.js171-236功能门控访问

来源: runtime/js/99_main.js975-976 runtime/js/90_deno_ns.js1-237 ext/web/lib.rs95-114

错误处理和异常管理

运行时实现了全面的错误处理,将 Rust 错误与 JavaScript 异常连接起来,同时保持正确的错误上下文和堆栈跟踪。

来源: runtime/js/99_main.js326-395 runtime/js/99_main.js414-462 runtime/js/99_main.js309-324

该运行时为不同类别的系统错误注册了特定的错误类,通过 runtime/js/99_main.js326-395确保了 Rust 和 JavaScript 上下文之间的正确错误类型映射。

来源: runtime/js/99_main.js1-1149 runtime/worker_bootstrap.rs1-238 runtime/permissions.rs1-198 runtime/ops/worker_host.rs1-350 ext/web/lib.rs1-424 ext/fs/lib.rs1-300