From ff97f22a19848d057f45c6f47116c1c5a7b3e84c Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 8 Oct 2026 04:39:05 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20VmHost=20trait=20=E8=BE=B9=E7=95=8C?= =?UTF-8?q?=E9=92=89=E4=B8=BA=E5=8D=95=20realm=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E8=B7=A8=20realm=20=E5=80=BC=E4=BC=A0=E9=80=92?= =?UTF-8?q?=E4=B8=8D=E6=8C=82=20trait?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 36 +++++++++++----------- Cargo.toml | 2 +- crates/oxide_builtins/src/message_value.rs | 2 ++ crates/oxide_runtime_api/src/host.rs | 7 +++++ 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3cee1f11..185c0b6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.8.65" +version = "0.8.66" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.8.65" +version = "0.8.66" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.8.65" +version = "0.8.66" dependencies = [ "ansi_term", "bumpalo", @@ -1225,7 +1225,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.8.65" +version = "0.8.66" dependencies = [ "lru", "oxide_bytecode", @@ -1234,7 +1234,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1253,7 +1253,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1267,7 +1267,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.8.65" +version = "0.8.66" dependencies = [ "num-bigint", "oxc_allocator", @@ -1282,7 +1282,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1291,7 +1291,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.8.65" +version = "0.8.66" dependencies = [ "bumpalo", "dashmap", @@ -1306,7 +1306,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1318,7 +1318,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.8.65" +version = "0.8.66" dependencies = [ "tracing", "tracing-appender", @@ -1327,7 +1327,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1342,7 +1342,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1358,7 +1358,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.8.65" +version = "0.8.66" dependencies = [ "num-bigint", "num-traits", @@ -1370,7 +1370,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.8.65" +version = "0.8.66" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1387,7 +1387,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.8.65" +version = "0.8.66" dependencies = [ "bumpalo", "hashbrown 0.14.5", @@ -1399,7 +1399,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.8.65" +version = "0.8.66" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index cdd9ad4c..c1b40bda 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ ] [workspace.package] -version = "0.8.65" +version = "0.8.66" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_builtins/src/message_value.rs b/crates/oxide_builtins/src/message_value.rs index 83148dd5..c64b0b91 100644 --- a/crates/oxide_builtins/src/message_value.rs +++ b/crates/oxide_builtins/src/message_value.rs @@ -8,6 +8,8 @@ //! 为 well-known 符号映目标 realm 同 local_index、用户符号经描述重新 intern。 //! //! 边界: +//! - 两函数为独立函数,刻意不挂 `VmHost` trait:trait 是单 realm 接口,跨 realm +//! 值传递不挂 trait(见 trait 文档边界条款),免污染单 realm 接口。 //! - `MessageValue` 是树形(无共享引用间接),值图内循环引用报 DataCloneError; //! 共享引用(有向无环)复制为多份。 //! - 装箱对象(Boolean/Number/String 盒、BigInt 包装)传递时解箱为原始值。 diff --git a/crates/oxide_runtime_api/src/host.rs b/crates/oxide_runtime_api/src/host.rs index f53ec614..669533d9 100644 --- a/crates/oxide_runtime_api/src/host.rs +++ b/crates/oxide_runtime_api/src/host.rs @@ -10,6 +10,13 @@ use oxide_types::value::JsValue; /// /// 方法签名是 `Vm` 上同名固有方法的逐字节拷贝;`impl VmHost for Vm` 委托给 /// 它们。trait 刻意保持扁平且非对象安全——builtins 始终接受 `&mut impl VmHost`。 +/// +/// 边界:本 trait 是单 realm 接口——所有方法只作用于所属 VM 的当前 realm, +/// 不含跨 realm(跨线程)值传递方法。跨 realm 值传递由 +/// `oxide_builtins::message_value` 的独立函数实现(源 realm 侧 `detach_message`、 +/// 目标 realm 侧 `rehydrate_message`,经 `MessageValue` 中间表示),不挂本 trait, +/// 免污染单 realm 接口。trait 亦无 realm 查找方法:`realm_id` 只用于符号编码 +/// (符号身份 = (realm 编号, 局部下标) 的 realm 维度),不用于查找他 realm 对象。 pub trait VmHost { // 寄存器访问 fn reg(&self, idx: u8) -> JsValue;