From 785133346f3ac677f8615aca1917fe89db949a60 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 17 Sep 2026 05:16:24 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20kernel=20=E6=AE=8B=E6=8E=AA=E8=BE=9E?= =?UTF-8?q?=E4=B8=8E=E9=87=8D=E5=BB=BA=E5=8F=A3=E5=BE=84=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_kernel/src/builtin/world.rs | 4 ++-- crates/oxide_kernel/src/kernel/core.rs | 2 +- crates/oxide_kernel/src/kernel/session.rs | 13 +++++++------ crates/oxide_kernel/src/string_forge.rs | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/crates/oxide_kernel/src/builtin/world.rs b/crates/oxide_kernel/src/builtin/world.rs index 3164ee68..34d9993b 100644 --- a/crates/oxide_kernel/src/builtin/world.rs +++ b/crates/oxide_kernel/src/builtin/world.rs @@ -228,7 +228,7 @@ impl BuiltinWorld { } /// wrapper 复用键的目标家族标签:目标对象是本 world 固定 P 字段时返回 - /// 其枚举下标 + 1(`all_p_fields` 顺序跨重建轮不变),非 P 目标返回 0。 + /// 其枚举下标 + 1(`all_p_fields` 顺序跨重建不变),非 P 目标返回 0。 pub fn wrapper_family_of(&self, obj: *const JsObject) -> u16 { for (i, p) in self.all_p_fields().iter().enumerate() { if std::ptr::eq(p.as_ptr(), obj) { @@ -256,7 +256,7 @@ impl BuiltinWorld { /// # 注意事项 /// session 收尾(`teardown_heap_data`)与选择性重建收尾(`retire_replaced`) /// 的 P 字段枚举唯一入口:`BuiltinWorld` 新增 P 字段须在此同步补一行,否则 - /// 收尾时该字段属性区永久泄漏、重建原型槽改写/释放漏掉该字段。 + /// 收尾时该字段属性区无法释放、重建原型槽改写/释放漏掉该字段。 pub(crate) fn all_p_fields(&self) -> [&P; 104] { [ &self.object_proto, diff --git a/crates/oxide_kernel/src/kernel/core.rs b/crates/oxide_kernel/src/kernel/core.rs index 78fad1ff..8aa0c7cb 100644 --- a/crates/oxide_kernel/src/kernel/core.rs +++ b/crates/oxide_kernel/src/kernel/core.rs @@ -159,7 +159,7 @@ impl KernelCore { /// 注册表与 P 对象引用旧 kernel 的物化串裸指针与 shape id,VM 存活 /// 期间重建会使它们悬垂。 /// - 三个预设默认 `None`(永不触发):现有 CLI eval/run/REPL/bench/test262 - /// 宿主均未接重建边界,`None` 保证零行为漂移。 + /// 宿主在预设默认配置下均未接重建边界,`None` 保证零行为漂移。 /// /// # 副作用 /// 无:只读查询。 diff --git a/crates/oxide_kernel/src/kernel/session.rs b/crates/oxide_kernel/src/kernel/session.rs index 4a2f0514..dbd23c1a 100644 --- a/crates/oxide_kernel/src/kernel/session.rs +++ b/crates/oxide_kernel/src/kernel/session.rs @@ -1,5 +1,5 @@ -//! 每会话可变状态:内置原型对象(BuiltinWorld)与全局对象,full_reset 时 -//! 重建;世代快照 + 家族位脏集合计算,selective_reset 只重建脏家族。 +//! 每会话可变状态:内置原型对象(BuiltinWorld)与全局对象;世代快照 + +//! 家族位脏集合计算,两条重置路径同走选择性重建,只重建脏家族。 use std::sync::Arc; @@ -12,9 +12,10 @@ use crate::shape_forge::EMPTY_SHAPE_ID; use super::{BuiltinDirtySet, BuiltinId, BuiltinSnapshot, KernelCore}; /// 每会话可变状态:内置原型对象与全局对象。 -/// 两条重建路径:full_reset() 整体重建,实现 JS 执行之间的完全隔离; -/// selective_reset() 按世代快照的家族位脏集合只重建被污染的家族,保留 -/// 未污染的内置指针与世代。 +/// full_reset() 为宿主全隔离重置入口:清空全部执行状态与内存,内置对象 +/// 经下述选择性重建(未污染者保留原指针),并重新绑定被污染的内置对象 +/// 与重采世代快照;selective_reset() 为选择性重建本体,按家族位脏集合 +/// 只重建脏家族,保留未污染的内置指针与世代。 pub struct KernelSession { pub builtin_world: Arc, pub global_object: P, @@ -226,7 +227,7 @@ impl KernelSession { pub fn selective_reset(&mut self, core: &Arc) -> BuiltinDirtySet { let dirty = self.dirty_since_snapshot(); if dirty.global { - // 旧 global 的属性区在替换前释放,避免随旧引用永久泄漏。 + // 旧 global 的属性区在替换前释放,避免旧引用长期持有该内存。 let old_global = unsafe { &mut *(self.global_object.as_ptr() as *mut JsObject) }; old_global.release_raw_heap(); self.global_object = Self::new_global_object(core); diff --git a/crates/oxide_kernel/src/string_forge.rs b/crates/oxide_kernel/src/string_forge.rs index bd2fd69a..f2833865 100644 --- a/crates/oxide_kernel/src/string_forge.rs +++ b/crates/oxide_kernel/src/string_forge.rs @@ -373,8 +373,8 @@ unsafe impl Send for StringPtr {} unsafe impl Sync for StringPtr {} /// ASCII 单字符永久 `JsString` 指针表:以字节值(0..=127)为下标, -/// 首用惰性物化 `Box::into_raw` 永久泄漏,之后恒复用同一地址。 -/// 泄漏面严格有界:≤128 条目 × 单字符内容(≈8KB),进程生命周期内不释放。 +/// 首用惰性物化 `Box::into_raw` 有意保留,之后恒复用同一地址。 +/// 物化面严格有界:≤128 条目 × 单字符内容(≈8KB),进程生命周期内不释放。 static SINGLE_CHAR_TABLE: [OnceLock; 128] = [const { OnceLock::new() }; 128]; /// 取 ASCII 单字符的永久 `JsString` 指针,惰性物化一次后恒返回同一地址。