跳到正文
豫言包管理
← 全部包

节点网页汇编宿主 0.1.0

豫言 · 可执行文件

以 Node/V8 验证 WasmGC 编译器自举。

Node/V8 自举验证宿主

入口使用豫言,宿主.cjs 只适配 Node/V8 和系统接口,值桥(yy值桥接生成 按编译器核心的结构化表示写出)用结构相同的 GC 类型读取和构造客值;线性内存仅作宿主字节交换区。支持串行及并行编译,未知原语直接报错,不承诺覆盖所有豫言程序的系统接口。

并行任务图仍由豫言编译器执行。Wasm 客体运行在工作线程中,Node 主线程通过 进程桥接.cjs 接受启动与完成等待请求;客体同步等待桥接响应时不会阻塞主线程的事件循环。所有编译阶段仍由 Wasm 编译器执行,未替换为原生编译器。多路等待当前只识别本宿主创建的异步执行句柄,不能代替网络或普通文件描述符的轮询;未知句柄返回错误事件。

默认 YY_NODE_COMPILER_WORKERS=threads:只对同一编译器自派、首参数为 --mode=worker 的内部命令使用编译线程。默认有界复用 Worker:每线程至多执行四项任务,空闲 250 ms 后回收,空闲线程数不超过可用处理器数;待回收线程真正退出后才向调度器报告该任务完成,避免新旧堆额外重叠。任务图和并发数量仍由豫言调度器决定。

每个任务创建全新的 Wasm 实例、值桥实例、全局变量、命令行参数及宿主状态;同一 Worker 的 GC 堆容量可能跨任务保留,直到线程回收。同一次构建共享编译器与值桥接的 WebAssembly.Module,复用机器码,不复用编译结果、文件内容或数组内容。模块身份检查包含文件设备号、inode、大小、mtime 和 ctime;每项任务重新取得当前模块。新 Node 进程重新建立这些模块,没有跨进程的预热或 AOT 缓存。

YY_NODE_COMPILER_REUSE=0 恢复每任务独立 Worker 与 GC 堆;不设置或设为 1 使用有界复用。线程复用通过同一个消息通道先发送任务输出、后发送完成消息,输出流消费结束后才报告 close。任务异常使用独立退出码;取消仅作用于当前任务,已完成句柄不能终止后来复用该线程的任务。主客体退出时清理活动与空闲线程。

编译线程共享真实宿主 PID,任务句柄与名称仍各自独立;诊断 JSON 另记线程 ID,不能把进度中的 PID 数量当作并行度。线程模式的故障隔离边界是 Worker/Wasm 实例,不是操作系统进程。设 YY_NODE_COMPILER_WORKERS=process 可恢复每任务独立 Node 进程作对照。普通原生子进程、其他 Wasm 程序及不符合上述内部命令格式的调用仍启动真实进程。

复用时,同一线程 ID 会对应多个任务。按线程归因 GC 或 CPU 采样必须同时区分任务的时间段;旧的“一线程一任务”剖析方法应设置 YY_NODE_COMPILER_REUSE=0,不能直接套用在线程池记录上。

子进程按参数向量启动,不经过 shell 拼接;以管道关闭事件确认完成,避免丢失最后一段输出。每流输出上限为 256 MiB,最多保存 4096 个未收取句柄;成功收取后释放记录,客体退出时终止尚未完成的直属子进程。语言层的异步任务继续保存结果,支持重复等待。

从仓库根目录运行,先准备 Node 26.3.0、已有 Wasm 编译器及包上下文:

node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 值桥接生成 --输出 yy值桥接生成.wasm -j 24
node 豫言操作系统/宿主/节点/宿主.cjs yy值桥接生成.wasm yy节点值桥接.wasm
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 节点网页汇编宿主 --编译器 ./yy3_bs.wasm --输出 yy节点网页汇编宿主.wasm -j 4
node 豫言操作系统/宿主/节点/宿主.cjs yy节点网页汇编宿主.wasm yy同步种子.wasm 应用/豫言编译器/入口。豫 --package-context .yybuild/豫构上下文/24.上下文 --target=wasmgc -o yy节点二代.wasm

包上下文由豫构预先生成。此适配器只查找内容完全相同的既存上下文,不自行创建,避免与原生进程锁协议不一致。编译器直接写出 Wasm 二进制,不经 WAT 组装,也不使用 Cranelift 生成或执行编译器机器码。

YY_NODE_REPEAT=2 会在同一 worker 中复用 WebAssembly.Module,以新实例重复执行;第二轮更新 Wasm 文件 mtime 以隔离编译缓存,输出文件名追加 .第2.wasm。这不是解释器模式:V8 可进行延迟编译和分层优化,执行阶段时间也包括这些工作。worker 栈为 128 MiB,未指定 GC 堆容量,采用 V8 默认策略。第二轮不强制 GC。

并行自举可追加 --parallel -j 18 --do-not-load-cache -c。正式测量应在独立 Node 进程中执行每一代,计入引擎启动、JIT、实例化与客体编译(编译器直接写出 Wasm 二进制,已无 WAT 组装);不要把输入编译器跨轮复用后的引擎预热结果当作全新进程成绩。子 Wasm 进程会将 YY_NODE_REPEAT 置为 1,避免一次工作任务意外重复执行。

YY_NODE_PROFILE=1 在每个实例结束的统计 JSON 中增加原语调用计数,默认不启用。编译器生成的原语名是不可变字面量,宿主以弱引用按对象身份缓存其解码结果;不会缓存参数、文件内容或编译结果。显式传给 Node 的 Wasm、Liftoff、V8 线程池及初始堆、半空间、老生代容量选项会传递给子 Wasm 进程,调试端口和 CPU 采样输出选项不传递;带数值的选项请用 --名称=值 形式。调参实验不等于推荐修改默认引擎配置。

依赖

查看包配置

上传历史

当前上传修订:1 ·

  1. 上传修订 1
    下载 ZIP

包层级

父包:网页汇编

没有子包。