豫豫言文档API ATLAS
入口节点网页汇编宿主。包。豫
1 模块2 名称
全部模块

豫言 / 节点网页汇编宿主 @ 0.1.0

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

说明.汉语.md

# 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 编译器及包上下文:

```sh
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 采样输出选项不传递;带数值的选项请用 `--名称=值` 形式。调参实验不等于推荐修改默认引擎配置。

说明.文言.md

# 节点引擎自举之验

入口以豫言行,JavaScript 唯接引擎与系统;值桥(`yy值桥接生成` 依编译器核心之结构书之)以同型 GC 读写,线性内存但供字节往来。串并两途皆可行,任务图仍以豫言治之;未知原语则止。包上下文预由豫构作,此器但寻同文,不自造号而乱锁约。

客居工作线程,主线程受启工与候毕之请,候二出之管俱阖而告毕。子 Wasm 仍由 V8 行,不偷换原生编译器。多路等待惟识本器之执行句柄,非通用网络与文件之轮询。参数各传,不托 shell 拼文;每流二百五十六 MiB 为限,未收句柄至多四千〇九十六。收毕释籍,客毕止未完之直属子工;语言任务自存其果,可再候。

常制 `YY_NODE_COMPILER_WORKERS=threads`:惟同一编译器自派、首参 `--mode=worker` 者,共其已编之模块码。工限四事,闲过四分之一秒则退,闲工不逾可用处理器之数;欲换工,待真退乃释任务槽。任务图及并发数仍以豫言治之。

每事新立客实例、值桥、全局、入参与宿主状态,工之 GC 堆容量或暂留,不藏编译结果、文件与数组内容。新 Node 进程重备其码,无跨程预热。模块以文件诸识及双时戳验之,每事重取。设 `YY_NODE_COMPILER_REUSE=0` 则每事独立线程与堆;不设或为 `1` 则有界复用。二出先递,毕报在后,流消费毕乃告 close;事故各记其码,旧柄不得止新事。主客毕,活动与闲工皆清。

诸线程之 PID 皆为真实宿主号,任务柄各异,诊断另记线程号;不可数 PID 以为并行数。隔离以线程及实例为界,非操作系统进程。欲复进程之途,设 `YY_NODE_COMPILER_WORKERS=process`。普通子进程及其他 Wasm 程序仍用真实进程。

工既复用,一号或历诸事;按工析 GC 与 CPU,须兼辨其事之时段。旧法一工一事者,当设 `YY_NODE_COMPILER_REUSE=0`,毋混其数。

设 `YY_NODE_REPEAT=2`,同工复用模块,以新实例再行,更新输入文件时识,第二产物加 `.第2.wasm`。V8 自编本机码,非逐指令解释;执行之时亦含延迟编译与优化。栈一百二十八 MiB,堆循引擎默认,次验不强回收。命令见《说明.汉语.md》。

并行加 `--parallel -j 18 --do-not-load-cache -c`。正测每代新启 Node,启动、自编本机码、实例化及客编译皆入时(编器径书二进制,已无 WAT 组装);跨轮复用引擎之暖测不冒充新进程。子客不承重复试验之轮数。设 `YY_NODE_PROFILE=1` 可数原语之调用;名为常字,弱缓存其解,不藏参数与编译结果。显授 Wasm、Liftoff、V8 池及堆容量之选项传于子客,调试端口与采样文件之制不传;数值以等号附之。试参非更常制。