Commit Graph

55 Commits

Author SHA1 Message Date
pjh123 13e9ee3543 fix: upvalue cell 改独立堆分配消除 GC sweep 后悬垂
upvalue cell 原先分配于 session_epoch bump arena,对象 sweep 替换 arena
后旧 Bump drop,全部闭包 cell 悬垂:后续分配复用其内存导致 upvalue 值
被覆盖(私有字段 brand 检查跨语句误报、release 下可致 SIGSEGV)。

cell 改为 Box::into_raw 独立堆分配并登记进 session_cell_ptrs 追踪表,
与 arena 生命周期解耦:sweep 搬移对象时 cell 指针稳定,只重写
cell.value 中的对象引用;full_reset 统一释放,无 double-free。
2026-08-15 18:50:07 +08:00
pjh123 f2535ffc77 perf: 字符串 +/+= 二元拼接改 Cons rope 惰性扁平化消除 O(n²)
JsString 拆 Flat/Cons 变体:Cons 经独立 ConsNode 保存左右子节点 + O(1)
字节长 + 惰性扁平化产物缓存(OnceLock 原子发布,产物挂节点生命周期)。
concat_strings 接线:总长 ≤ 128B 的小链急切扁平(与 rope 前同款,拼接即
消费场景零开销),大链 O(1) 链接——大段重复拼接从 O(n²) 拷贝降为 O(n)
链接,文本在消费点(.length/==/string_ref/方法族)首次扁平化后缓存。

GC 兼容:mark 收口 mark_string_live 传播 Cons 子节点与产物闭包(显式栈
防深链爆栈);sweep/full_reset 共用 drop 辅助连带释放产物;节点字节记账
用 O(1) byte_len。rope 节点登记 session 字符串表,与执行期字符串 GC
(指令边界触发)天然兼容。JsString 结构 32B 与 rope 前同 bin,小串路径
零结构回退;unsafe impl Send/Sync 论证同 StringPtr(perm 恒 Flat)。
2026-08-15 14:32:08 +08:00
pjh123 81f54f280d fix: 执行期字符串 GC 触发点移到指令边界,消除 builtin 局部活串悬垂
分配点触发会把仅存于 builtin 函数栈上局部 JsValue 与构造中未登记对象的
存活串判死释放(temporal 槽、regexp exec 构造中数组、replace 回调参数
Vec),长会话超阈值即悬垂。触发改在 dispatch 指令边界,此时所有局部值已
落地为执行根;分配点只留账目。水位采用上次收集存活字节加阈值增量,活串
超阈值时不会每指令重复白跑;reset 完整收集仍按阈值直接比较。debug 构建下
收集后断言存活对象字符串边已登记。补低阈值回归:regexp exec 旧行为直接
SIGABRT,temporal 与 replace 结果断言守护。
2026-08-15 13:20:04 +08:00
pjh123 239309925e perf: 执行期 session 字符串 GC 阈值回收(超 32MiB 触发,跳过对象 sweep)
new_string_owned 分配前做廉价阈值检查(1 次 usize 比较 + 阈值读取),
超 session_gc_threshold 即调 collect_strings_only:clear_all_marks →
完整 mark(现成)→ sweep_session_strings(现成),跳过对象 sweep 搬移,
builtin 层对象裸指针跨分配点零悬垂面。触发检查在登记之前——返回值
尚未根化,登记后回收会被本次 GC 判死致悬垂。分配前触发亦使 GC 期间
新串仍在栈上未登记,天然安全。

长循环字符串累积场景(REPL 常驻 / test262 长测试 / kernel_batch 复用)
session 内存从无界变为有界(≤ 阈值 + 存活串);bench gc_trigger_count
恢复有效(string_build 由 0 → 2 次触发)。07.2 rope 死节点回收依赖本机制。
2026-08-15 12:12:03 +08:00
pjh123 40ee642622 perf: 数组元素访问 dispatch 内联 fast path + length_si 缓存
GET_PROP_DYNAMIC/SET_PROP_DYNAMIC 开头内联数组元素 fast path:整数键 +
真数组 + 无元素 meta + 界内时直读/直写元素区,免 primitive_property_get /
ordinary_get/set 调用链与 __proto__ 每次 RwLock 查询;越界与有 meta
场景回退原路径(CreateDataProperty + length 扩展 / accessor/hole 协议)。
GET 侧 is_object() 快检先于 checked_object_ptr,保持原始值 receiver
不抛错。length_si 缓存为 Vm 字段(builtin 绑定后取 id,稳定非 0),
普通属性路径 5 处 hot spot 改读缓存,消除每次 intern 的共享锁开销。
2026-08-15 04:58:57 +08:00
pjh123 540153030b test: full_reset 后跨家族方法调用回归防线覆盖 call/apply/bind 路径 2026-08-14 22:01:03 +08:00
pjh123 fccf2063f1 perf: 数组回调字节码调用改寄存器窗口复用减少搬移 2026-08-13 20:11:09 +08:00
爱特每羊队 f3c37911f7 feat: arbitrary-precision BigInt via num-bigint (literals, arithmetic, toString, asIntN/asUintN) 2026-08-12 03:15:18 +08:00
爱特每羊队 7e3d7b43b5 feat: 实现最小 BigInt 子集(字面量/算术/比较/构造器,Temporal 前置) 2026-08-10 23:02:31 +08:00
爱特每羊队 61898f8983 perf: 字符串拼接按操作数字节长预分配容量,免几何 realloc 二次拷贝 2026-08-10 17:40:39 +08:00
爱特每羊队 eaf4825e4f perf: 函数调用 bytecode 改 Arc 共享(O(1) 帧切换 + IC 写时复制) 2026-08-10 15:08:51 +08:00
爱特每羊队 89a4e1bb86 feat: async-generator 语义(async function*),yield/await 共存 + next 返回 Promise
- emit 识别 generator+async 组合,模块同时标记 is_generator/is_async
- 新增 AsyncGeneratorState:帧快照 + 请求队列 + 当前请求
- next/return/throw 返回 Promise,请求入队逐条处理
- YIELD 让出经 promise unwrap 后交付(yield rejected promise 关闭生成器)
- AWAIT 挂起保留当前请求,微任务恢复后继续执行
- %AsyncGeneratorPrototype% / %AsyncGeneratorFunction.prototype% 内建
- session GC / promote 支持异步生成器状态盒
- 普通 async 函数嵌套调用隔离外层异步生成器上下文
2026-08-10 01:52:03 +08:00
爱特每羊队 9b2a56c1fa feat: Promise 静态方法(all/race/allSettled/any + AggregateError)+ async test262 解锁
- Promise.all/race/allSettled/any:共享聚合核心,逐元素 C.resolve + Invoke(then),
  共享记录对象承载剩余计数/结果数组/能力闭包,元素处理器按模式结算
- AggregateError 内建(构造器 + prototype,Promise.any 拒绝路径依赖)
- 修复 capability_executor:能力已持有非 undefined 值时二次调用抛 TypeError
- test262 runner:移除 async flag 无条件 skip;解锁 asyncHelpers/promiseHelper/
  doneprintHandle harness;注入 print 捕获 + ,run() 后按 marker 判定
- 排除 await-dictionary(Promise.allKeyed/allSettledKeyed 2025 proposal)特性
- iterator 遍历辅助改 pub 供 oxide_vm 复用
2026-08-09 23:25:36 +08:00
爱特每羊队 0d9e6eabc9 feat: async/await 语法支持(AWAIT 帧快照挂起/恢复 + 微任务驱动 + AsyncFunction intrinsics) 2026-08-09 22:02:15 +08:00
爱特每羊队 dcbe3d9320 feat: Promise 基础子系统 + 微任务队列(resolve/reject/then/catch/finally + run() drain) 2026-08-09 21:08:53 +08:00
爱特每羊队 c4e7080883 feat: 实现 yield* 委托语法(内层迭代器 next/return/throw 转发) 2026-08-09 20:00:16 +08:00
爱特每羊队 6f80c12ac9 feat: 生成器基础支持(YIELD 帧快照挂起/恢复 + GeneratorPrototype next/return/throw)
- 新增 YIELD/SUSPEND_BODY opcode;function* 识别与 yield emit
- GeneratorState 全量快照 VM 执行上下文(regs/pc/bytecode/spill/save/try/cell 栈段/迭代器)
- 调用时参数初始化(默认值/解构副作用与异常在 g() 时刻生效)
- %GeneratorPrototype%/%GeneratorFunction.prototype% 内建对象与 next/return/throw
- session GC trace 生成器状态 JsValues;闭包捕获分析补 yield/赋值目标扫描
2026-08-09 18:02:08 +08:00
爱特每羊队 a814dd0700 fix: try/finally 支持 break/continue/return 穿越 finally(completion 机制) 2026-08-08 12:38:25 +08:00
爱特每羊队 a82e4cd204 feat: Function 构造器(动态编译字符串生成函数) 2026-08-08 03:07:26 +08:00
爱特每羊队 a206d0ef82 feat(vm): arguments 对象绑定(CREATE_ARGUMENTS + 帧实参 spill 区) 2026-08-08 00:01:22 +08:00
爱特每羊队 d1675c217d fix(vm): 子模块全局扁平化根治逃逸闭包上下文错位 2026-08-07 10:49:15 +08:00
爱特每羊队 c59518e899 fix(vm): inline 回调支持 upvalue 闭包上下文 2026-08-07 00:23:35 +08:00
爱特每羊队 f57cb0f051 fix(vm): new 构造 cell_stack 失衡与子模块 immutables 缓存失步 2026-08-07 00:15:09 +08:00
爱特每羊队 328b8a3ddc docs: 补充注释与格式化 2026-08-06 23:10:27 +08:00
爱特每羊队 6c0c30e5d5 feat(vm): 新增 MOV/SPILL/UNSPILL 执行语义 + spill 栈帧边界(D-06/D-07/D-08) 2026-08-06 16:51:01 +08:00
爱特每羊队 f461235f04 docs: 添加 Rustdoc 注释 2026-08-05 21:46:47 +08:00
爱特每羊队 a4c13c4f6a fix: 接通透传闭包值链路 2026-06-30 23:57:22 +08:00
爱特每羊队 a17f98b02d fix: 修复闭包值传递链路 2026-06-30 22:52:25 +08:00
爱特每羊队 4271b7e348 fix: 修复嵌套函数调用并接通闭包捕获链路 2026-06-30 20:49:23 +08:00
爱特每羊队 b915f127ca feat: 搭建闭包捕获基础设施 2026-06-30 19:58:58 +08:00
爱特每羊队 5ecb428320 perf(vm): 字符串拼接用 push_to_string 消去中间分配, GC阈值 8M→32M
- oxide_runtime_api 新增 push_to_string: 直接将 JsValue 写入 String buffer
- dispatch_add / dispatch_compound_add 复用 Vm::string_buf, 每次concat从4次分配降到1次
- vm_support 新增 new_string_owned 接受 String 转移所有权
- kernel session_gc_threshold 8MB→32MB 减少频繁 GC
- build.sh: make clean 清跨平台 .obj 残留

(cherry picked from commit ad7b044a5a24b23819d783c5419d3e33f936dfc5)
2026-06-30 12:42:57 +08:00
爱特每羊队 11d69ea95c feat: for-of 异常中断按规范关闭迭代器,next() 抛错可捕获并保留原始值 2026-06-27 18:28:07 +08:00
爱特每羊队 b986a8f229 feat: 为 VM 添加结构化日志 2026-06-26 20:50:05 +08:00
爱特每羊队 ffc0916a6b refactor: Symbol/Iter/Profiling 子结构方法下沉,IC helper 完成提取 2026-06-25 22:08:27 +08:00
爱特每羊队 bb3f1cf0e9 refactor: Vm 状态分组、dispatch 拆分为分发表、IC 辅助函数独立成模块 2026-06-25 19:22:16 +08:00
爱特每羊队 06f769c4e0 perf: 不可变常量改 OnceLock 一次性缓存,删 Constant 死变体并移出 GC 根 2026-06-25 14:32:49 +08:00
爱特每羊队 5007e7af7c feat: 增加 CreateClosure 字节码,函数字面量每次执行创建新闭包 2026-06-25 10:16:32 +08:00
爱特每羊队 12f66ae675 perf: 模块树改用 Arc 持有,消除同步调用路径深层模块克隆 2026-06-24 22:52:25 +08:00
爱特每羊队 33c0596c81 perf: 寄存器保存改用共享 save_stack,消除 Box<[JsValue]> 堆分配 2026-06-24 22:20:34 +08:00
爱特每羊队 466a0815ca refactor: 字符串值改用 JsString 指针表示,键与字面量改用 PermInterner 2026-06-24 20:15:15 +08:00
爱特每羊队 38657d2171 refactor: 移除代码注释中的文档内部编号引用 2026-06-24 16:03:53 +08:00
爱特每羊队 41c2b9cba9 fix: GC sweep 复用 Vm.forwarding,消除每轮 HashMap 分配 2026-06-24 15:59:55 +08:00
爱特每羊队 6bf5daa1af refactor: 清理未使用符号,合并bind_constructor宏,统一init/rebind绑定列表,bind_number改为表驱动 2026-06-24 12:12:44 +08:00
爱特每羊队 f602ae5f00 feat: 添加基准测试基础设施 2026-06-24 10:46:59 +08:00
爱特每羊队 dbc15f6d1f refactor: 拆分 bytecode/cache crate 并模块化 counter 2026-06-23 17:06:39 +08:00
爱特每羊队 1ed6562063 refactor: 统一错误对象构造与异常类型传播 2026-06-23 14:51:58 +08:00
爱特每羊队 933612c89d fix: 修复全局边界安全与内存稳定性问题 2026-06-22 19:43:00 +08:00
爱特每羊队 a1b6ab944a feat: 添加 session arena 标记清扫 GC 2026-06-16 23:09:36 +08:00
爱特每羊队 94beeb350b feat: 添加 session arena 与逃逸晋升 2026-06-16 12:36:52 +08:00
爱特每羊队 11d6696531 feat: 接入 selective reset 并补充验证基准 2026-06-15 22:11:47 +08:00