跳到正文豫言豫言操作系统总体架构

豫言操作系统总体架构

状:架构与施行之案,二〇二六年九月二十八日审定。本篇为豫言操作系统之总览,代统一接口方案(九月二十五日)与底层接口方案(九月二十六日)中与之相违者,相违之目见第十四节;二接口逐条之规,仍以语言仓库根目录 豫言操作系统接口/ 与 豫言操作系统底层接口/ 二规范树为准。文中以【已成】【半成】【待为】标其成熟;数皆二〇二六年九月二十八日所计所测。审定之时依审阅之议修之:编译器唯存 Wasm 一后端,C 后端提于 WP1 而删;构建之器合为豫构一器;以原生为常用运行之方,Node 为备。述其志之篇见豫言操作系统之志;汉语本见汉语版。

一、旨与则

豫言操作系统者,有版之程序装载、执行与系统能力之约,及行此约之宿主与系统也。其旨:使同一中文程序,于浏览器、云端 Worker、Windows/macOS/Linux 之桌面,及吾自造之裸机,得同一接口之义。

则六,前五既定,第六乃本篇所立运行之阵:

  1. 豫言为先。 编译器、运行时、垫层、平台后端、构建与验证之器,皆以豫言书之。非豫言之码,唯留于宿主环境所必自供者(浏览器与 Node 之 JavaScript 外壳),且渐减之。
  2. Wasm 为执行之通界。 豫言应用、编译器、执行器自身皆经 Wasm;不复别立绕 Wasm 之原生之途以为终。
  3. 编译器唯一后端:Wasm。 不生 C,不赖 LLVM、clang、外部汇编器、外部链接器与 libc,不用 Wasmtime。今之 C 后端与 C 运行时,宜早删之(第十二节 WP1);既删之后,路二之预编未成之前,开发之工具链以 WasmGC 之形行于 Node。
  4. 接口二层,束其腰。 应用之面用有 GC 之“豫言操作系统接口”,平台之面用无 GC 之“豫言操作系统底层接口”;每平台唯实现底层接口一次。
  5. 能即授。 应用所依之能力包皆必具;接口之实现与本次运行之资源授权,分而核之;宿主之 API 虽多,不尽示于程序。
  6. 每商用平台,运行之路二,以原生为常。 路一:Node.js、吾跨平台之 Wasm、一 JS 文件;路二:吾所径生之原生二进制,AMD64 与 ARM64 二指令集,用各平台正当之系统调用。路二既通,则为常用之方;路一为备,路二未通之前亦用之。

二、总览

豫言程序经自托之编译器生标准 WasmGC 模块,向豫言操作系统接口。路二(常用):GC 垫层与执行器、WASI 垫层落于豫言操作系统底层接口,乃由 Linux、macOS、Windows 与裸机四后端入操作系统。路一:JS 宿主(浏览器、Node.js、CF Worker)径实现此接口,于桌面为备。
路二(常用),经垫层与底层接口,由吾所径生之原生二进制发各平台正当之系统调用;路一,JS 宿主径实现 GC 接口,于桌面为备。

自上而下,一程序所经之层:

层 路一(JS 之路) 路二(原生之路)
源程序 高级模式(有 GC)之豫言程序 同左;又可行外来工具链所出之 WASI 程序
编译器 豫言自托之编译器:源码 → 类型检查 → 统一 ANF → Wasm 模型 → 标准 .wasm 同左
程序之形 WasmGC 模块 WasmGC 模块;或 WASI 模块
应用之面之接口 豫言操作系统接口(GC 接口),能力包五十二 同左;WASI 程序用 WASI preview1
实现者 JS 宿主:浏览器、Node.js、Cloudflare Worker GC 垫层与 WASI 垫层,与执行器同为豫言底层模式之程序
平台之面之接口 无:JS 宿主径用 JS 环境之 API 豫言操作系统底层接口:包六,函数四十五,三十二位整数,状态码
入操作系统 JS 引擎任之 Linux 径发系统调用;macOS 导入 libSystem;Windows 导入 kernel32 与 ntdll;裸机呼自造内核之服务
机器码 JS 引擎任之 吾径生 ELF、Mach-O、PE 或裸机之像,AMD64 与 ARM64

观表之要:

三、运行之阵:二路乘诸平台

平台 路一:Node.js+跨平台 Wasm+JS 文件 路二:自径生之原生二进制
Windows 【待为】Node 宿主之适配 【待为】PE32+,x64 与 ARM64,导入 kernel32/ntdll
macOS 【待为】Node 宿主之适配 【待为】Mach-O,x86-64 与 arm64,导入 libSystem,附代码签名
Linux 【待为】Node 宿主之适配 【待为】ELF64,x86-64 与 arm64,径发系统调用,静态而无 libc
裸机(自有之系统) 无 【已成,唯 QEMU】ARM64 与 AMD64,内核与用户态皆豫言所生
浏览器 【已成】能力包二十有适配 无
Cloudflare Worker 【已成】能力包三十三有适配 无

二路之义:

常与备。 路二既通,乃为常用运行之方,用者之程序与吾开发之工具链皆然;路一为备,用于路二未通之前、无其原生二进制之平台,及须对照察误之时。

二路于同一程序,须给同一接口之义,以一致之验保之(第十节)。

四、编译与程序之表

四之一 前端之流【已成】

编译器以豫言自书(自托)。前端逐文件:解析、名称解析、类型检查、类型擦除、跨模块优化、闭包转换,得“闭包形式”。诸段依相依之序并行派之。闭包转换之后,全模块构统一 ANF(统一之中间表),乃授 Wasm 后端生 Wasm 模块。

四之二 唯一之后端:Wasm

编译器唯一后端,出标准 Wasm。语言之模二(第四之三),共用同一中文 Wasm 模型与二进制编码器:

模 何以择之 所出 状
高级模式(缺省) 包描述不书编译模式;今犹须加 --target=wasmgc 统一 ANF → 内存中之 Wasm 模块 → 径编为 .wasm 二进制(WasmGC),含豫言所书之垃圾回收运行时;不经 WAT 之文,不呼汇编器;须宿主支 GC、异常处理与尾调用;对外唯一导入 yuyan:gc-host/v1.call 【已成】
底层模式 包描述书 「编译模式」者『底层』也。 闭包前之优化形式 → 唯含三十二位整数之 Wasm,不用标准库与垃圾回收 【已成】

机器码非编译器后端所出,乃路二之预编(寄存器之降,第六节)自 Wasm 生之;裸机之像即如是而得。

将删之原生后端。 今编译器之缺省目标犹为 --target=native(别名 llvm、shadow):由统一 ANF 生“直接调用”之 C 源,乃由 clang 以 -O3 -flto 编之,与预建之 C 运行时(文件四十二,约四千七百行)相链。编译器自身、豫构与诸器今皆赖之以行。至 WP1 全删之,--target 之选随之而去,编译器唯出 Wasm。

要:路一与路二用同一 .wasm。 同一 .wasm,可授 JS 宿主(路一),亦可授执行器(路二)。所异者唯“谁实现接口”,不在编译。

四之三 语言之模二

四之四 路二之形与执行之二档

路二之可执行文件,乃同一豫言底层模式之程序,编为整数 Wasm,经寄存器之降与格式之书写器而得;其中次第为:平台后端(底层接口之函数四十五)、垫层二、执行器(含豫言所书之垃圾回收运行时)。其形有二:

执行分二档,使路二速成闭环,而终及原生之速:

《系统编程语法方案》分全途为五段,今之所至如下:

段 事 状
A 统一之表 中文 Wasm 模型、文本读写、二进制编解与验 【已成】
B 最小执行器 豫言所书、择子集之解释器 【已成】(客体二号)
C 自有预编 编 Wasm 为机器码,不须外部汇编器与链接器 【半成】唯整数子集,ARM64 与 AMD64
D 托管与系统之能 覆今豫言所需之 WasmGC 等特性与宿主之服务 【半成】解释一子集
E 独立自举 编译器与执行器皆经 Wasm 而生,前代预编后代,禁 clang、cc、as、ld 与 libc 而犹能自举 【待为】

今生裸机之像之生成器,犹由 C 后端构之;经 Wasm 行之之途,亦犹借 Wasmtime 宿主。故“客体不赖 LLVM 与 libc”,非“全工具链已独立”也。WP1 之后,生成器以 WasmGC 行于 Node。

五、接口二层与垫层二

五之一 豫言操作系统接口(GC 接口)

五之二 豫言操作系统底层接口(无 GC)

五之三 垫层二

垫层 所入 所出 状
GC 垫层 豫言 GC 程序经 yuyan:gc-host/v1.call 所发之系统原语七十二 底层接口之呼 【半成】原语在 客体二号/主机*.豫;控制台之出(一至四号)已改经底层接口,余犹径呼内核
WASI 垫层 外来工具链(C、C++、Rust 等)所出之 WASI preview1 程序 底层接口之呼 【待为】WASI库 已有,然未接,不保可用

垫层以豫言底层模式书之,与执行器同一编译之单元。GC 值与线性内存间之搬运,于垫层中为之:GC 字节数组之内容本在执行器之内存,可径以(址,长)授底层接口。

五之四 一呼何以穿诸层

以“印一行”为例:

步 路一(Node) 路二(Linux 原生)
应用 呼日志或标准库之印 同左
适配 豫言所书之适配包,落于宿主库之外调名 GC 垫层原语一
宿主 Node 适配层之 JS 呼 process.stdout.write 底层接口 写(柄一, 址, 长, 出址)
系统 Node 与 V8 Linux 后端发 write 系统调用

六、路二:径生原生二进制

六之一 流水

底层模式(或经垫层之执行器)所出之整数 Wasm → 寄存器之降(指令之择与寄存器之分,ARM64 与 AMD64 二后端,【已成】用于裸机)→ 可执行文件之书写器(ELF、Mach-O、PE,【待为】)→ Apple 平台之代码签名(【待为】)。全程豫言之码,不呼任何外器。机器码由豫言中分字段之构造函数径编字节,核寄存器之号、立即数之域与位域,不书英文汇编之源。

六之二 诸平台何以入操作系统

后端与操作系统之间,唯一入口之表:此乃数据,非码。

能 Linux(系统调用) macOS(导入 libSystem) Windows(导入 kernel32/ntdll) 裸机(内核之服务)
时钟 clock_gettime clock_gettime_nsec_np QueryPerformanceCounter、GetSystemTimePreciseAsFileTime 滴答与墙钟之服务
随机 getrandom getentropy BCryptGenRandom 熵源未定
读写与位 read、write、pread64、pwrite64、lseek 同名之 POSIX 函数 ReadFile、WriteFile、SetFilePointerEx 控制台之服务与执行器内之文件系统
开与径 openat2 加 RESOLVE_BENEATH、newfstatat、mkdirat、unlinkat、renameat、readlinkat、getdents64 openat、fstatat 等 NtCreateFile(RootDirectory)、NtQueryDirectoryFile 执行器内之文件系统
候 ppoll kevent、poll WaitForMultipleObjects 内核之时钟与邮箱
进程与管 clone/execve、wait4、pipe2 posix_spawn、waitpid CreateProcessW、CreatePipe 执行器之复制任务与装载
退 exit_group exit ExitProcess 退出任务之服务

六之三 GC 程序何以行于路二

有 GC 之程序编为 WasmGC,由执行器行之:先解释(正确之准),后预编(AOT,编 WasmGC 为机器码;运行时之垃圾回收器亦以豫言底层模式书之)。每隔离执行之域,各有托管之堆与根,回收行于用户态。裸机上之 客体二号,即此执行器之初版,今唯覆 WasmGC 之一子集(不验模块,不支 SIMD)。欲编译器自身亦行于路二,须覆其所用之全部 WasmGC、异常与尾调用之特性。AOT 与全 WasmGC,乃路二中最巨之役(第十二节)。

既有之原生 C 运行时(约四千七百行),乃同事之旧实现:自有垃圾回收器与系统之操作,然唯受豫言源经 C 所编之程序,不能装任意 Wasm。至 WP1 随 C 后端而删;路二之垃圾回收运行时,以豫言底层模式重书之(WP8)。

七、裸机之系统:吾自造之操作系统

【已成,唯行于 QEMU,未上真机】

八、路一:JS 宿主

九、工具链、自举与发行

九之一 包与构建【已成】

九之二 自举之链【已成】

yy_bs_stable(稳定之种)→ yy2_bs → yy3_bs → yy4_bs;yy3_bs 与 yy4_bs 逐字节相同,即为定点。改编译器而或影响所生之义者,必行全自举。首级必串行,其后可并行。

今此链上者,乃 C 后端所出之原生程序,全自举约十分,其时多耗于 clang。WP1 删 C 后端之后,同链改以 .wasm 行于 Node,以 .wasm 逐字节相同为定点。性能研究之录:Wasm 编译器于 Node 上冷缓存自编一代约二十秒,二代与三代逐字节同(二〇二六年九月二十六日前后屡测,未清系统页缓存)。路二之预编既成,乃以之编编译器为原生二进制(WP8),自此常用原生编译器,Node 上之 Wasm 版为备。

九之三 种与起步

起步之方 所含 所须 状
Wasm 工具链之包 编译器、豫构、仓库构建之 WasmGC 模块三,加 Node 宿主与值桥。CI 每轮发之,按提交号存档;主 CI 以定址与 SHA-256 取之 Node.js;今犹须 clang,以构 C 运行时与原生之产 【已成】
Linux 可执行程序之包 稳定编译器、稳定豫构与运行时之档 Linux x86-64;编新程序犹须 clang 【已成,WP1 删之】
可移植自举之包 双种之 C 源、运行时与构建脚本 唯须 clang 【已成,CI 已停发;WP1 删之】
唯一之种 WP1 之后唯存此 Wasm 工具链之包,行于 Node;WP8 之后,Node 上之 Wasm 编译器又能径出路二之原生二进制,自举之链可续于原生二进制 唯须 Node.js 与一 SHA-256 所定之压缩包,不复须 clang 【待为】(WP1)

Node 于此为种之运行环境,亦路一之宿主;乃备用之方,非产品之所依,路二之二进制皆不须 Node。

九之四 所发之物

所发 所含 状
Wasm 工具链之包 见上表 【已成】
路一之发行包 一 .wasm、一 JS 启动文件、一清单 【待为】(WP9)
路二之发行物 每“操作系统 × 指令集”一可执行文件,凡六,又有裸机之像 【待为】(WP3 至 WP6);裸机之像【已成,QEMU】

工具之产,名皆以 yy 始或以 .exe 终,版本之管据此忽之。

九之五 非豫言之码:计与所归

二〇二六年九月二十八日之计(git 所跟之文件):

类 规模 所归
原生 C 运行时 豫言操作系统/宿主/原生/运行时/ 及其试 文件四十三,约四千八百行 WP1 删之
构建基础之包内 C(包上下文.c,存编译器之包上下文) 文件一 WP1 改书以豫言
生 C 之后端(统一原生直生、原生链接、可移植自举包、原生根活跃分析)与 clang 之呼 豫言所书编译器之分 WP1 删之
Wasmtime 之 C 桥(网页汇编宿主)与不入库之 yy_wasmtime_c_api 文件四;犹为裸机之像之生与若干试所用 WP1:其用者改由 Node,乃删之
为验底层接口而建之过渡 Wasmtime C 宿主 底层原生宿主 文件二 WP0 删之
WASI 之样 裸机/WASI库/示例/源码 C 程序二十二 留:此乃 WASI 垫层之“外来程序”之样,非吾之实现
裸机验证之具 C 文件二 留,以试外部模块
性能研究、安全外壳之包内 C 文件十二 WP1:改书以豫言,或移出仓;C 后端既删,彼不可复构
JavaScript 文件百十六,约二万二千行,其径含“测试”者约一万二千七百行 浏览器、Worker、Node 三类宿主之外壳与 VS Code 扩展必留;试具渐改书以豫言
WAT 文件二,凡四十一行 WP1 随 Wasmtime 之桥而删

十、验证之制

十之一 今之验

验 所覆 规模 所耗(实测)
裸机验证 内核 ABI 与执行器,QEMU 双架构 百九十景 × 二 = 三百八十项(又外部 C 模块四景) 运行约七十秒至二分;构建约十五分(一五十九 MB 所生 C 文件,经 clang -O3 -flto)
普通豫言验证 嵌 WasmGC 程序于执行器,QEMU 双架构,比串口之出与退出码 四十二项 × 二 = 八十四次 约十二分半,全串行;最重之一(AMD64 长打表)独需六十至八十五秒
全自举 编译器三代,三、四两代逐字节同 三段 原生约十分,段间必串行;Wasm 版于 Node 上每代约二十秒
全树测试 诸库与应用之单元之试 CI 分二十片 本篇未测
接口检查器与一致之验 接口之单、装载之核;浏览器百五十五例、云工之壳三十六项加八十二项差比 — —

十之二 的:全验二分之内毕

所阻者,按已测之实列之:

  1. 构建之迟,根在生 C。 一五十九 MB 之单文件,授 clang 为全程序之优化,单线,不可并行。WP1 删 C 后端,此项立消:诸器改以 .wasm 行于 Node,不复经 clang。
  2. 运行器串行。 普通豫言验证之主循环,于每试依次:编探针、行 ARM64、行 AMD64。八十四次互不相依之运行,于十八核之机,唯用其力约百分之十八。
  3. 每试重付定本。 每探针起一全 yy豫构 之进程(全仓包之发现);每像皆重降执行器为机器码,而诸试之间所异者,唯所嵌客体之数据段。此二者乃自代码之构与总 CPU 时(约二千四百三十四秒,系统态与用户态相当)所推,未分段剖之,施行时先测而后改。
  4. 要径有硬之下限。 最迟之 AMD64 一试(QEMU TCG 单线)约需一分,任何并行不能压其下;或减其试之工,或受其限。
  5. 超时之预算太紧。 每次 QEMU 运行限六十秒(千二百 × 五十毫秒),机忙时最迟之试恒超时,而“首败即全止”使全验若坏。
  6. 自举之链天然串行。 三段相依。原生版约十分,不能容于二分;以 Wasm 版每代约二十秒推之,全自举约一分,可容之(待 WP1 实测,又见第十三节 D4)。

设计:验分二级。快检(的在二分内):类型检查、按所改之域择试、并行之 QEMU 冒烟;全验:自举、全量双架构与二路一致,许其久,然亦须并行、缓存与可增量。

十之三 一致之验之骨

【待为】以豫言底层模式书接口一致之试,每能一组,于 Linux、macOS、Windows 与 QEMU(ARM64、AMD64)上所出须逐字相同;GC 接口适配一致之例,既行于路一之宿主,亦行于路二;WASI 之样二十二 C 程序,其出与退出码须与 Node 自带之 node:wasi 逐字同。试亦即接口之规样。

十一、今状总表

事 状
语言与编译器:自托、自举定点、Wasm 工具链之包 【已成】
编译器径书 WasmGC 与整数 Wasm 之二进制(不经 WAT) 【已成】
中文 Wasm IR、ARM64 与 AMD64 寄存器之降 【已成】(用于裸机)
GC 接口:五十二包之规,浏览器二十包、云工三十三包之适配 【半成】
底层接口:六包四十五函数之规 【已成】
裸机后端与裸机之系统 【已成】(唯 QEMU)
GC 垫层改接底层接口 【半成】(唯控制台之出)
WASI 垫层 【待为】(WASI库 未接)
Linux/macOS/Windows 原生后端与可执行文件之书写器 【待为】
代码签名(Apple) 【待为】
WasmGC 原生之行(AOT)与豫言所书之 GC 运行时 【待为】
Node 为路一之桌面宿主 【半成】
唯一后端:删 C 后端、C 运行时、clang 之呼与 Wasmtime 编译宿主之器 【待为】(WP1)
唯一构建之器:仓库构建与云仓构建并入豫构 【待为】(WP1)
全系统之验二分 【待为】

今实可用之运行之方:

方 说
浏览器、Cloudflare Worker 路一之二 JS 宿主,产品之用中
原生(C 加 clang) 迁移之旧途:豫言编为 C,乃由 clang 编为本机程序。编译器自身、豫构与诸器皆赖之以行。WP1 删之,不在目标之阵
Node 上之 Wasm 工具链 编译器、豫构、仓库构建之 WasmGC 版,用于 CI 起步;WP1 之后为唯一之工具链。亦路一之雏形,然尚无应用之适配
QEMU 上之豫言裸机系统 路二于自有系统之形,双架构,已能行命令壳与 WasmGC 子集之程序

代码之规模(二〇二六年九月二十八日,git 所跟之文件): 豫言约十五万九千行,其中编译器核心五万、标准库与底层库六千五百、余库二万九千、应用二万、裸机内核与寄存器之降一万、执行器一万六千、命令壳与其余五千六百、宿主适配包二万、接口之规一千四百。非豫言之码见第九之五:C 与头文件八十六,约九千四百行;JavaScript 约二万二千行;WAT 四十一行。JavaScript 多于 C,以浏览器、云端与 Node 三类宿主之外壳及多数试具皆 JS 也。

十二、施行之途

下列工作包依相依之序;规模以相对之量 S/M/L/XL 表之。此途已审定,按此一举施之,中途不改其途;须改则先返本篇。

工作包 规模 主要之事 验收
WP0 对齐与清理 S 删离途之产:Wasmtime C 宿主与 底宿主:call 包装之包;退为之所加“Wasm 导出线性内存”之编译器改动;更旧案之状,正第十四节之违 仓不含新增之 C;全自举定点通
WP1 唯一后端与唯一构建之器 L 编译器、豫构、仓库构建、全树测试、裸机验证、普通豫言验证诸器,皆改以 WasmGC 行于 Node;删原生后端(统一原生直生、原生链接、可移植自举包、原生根活跃分析)、C 运行时与运行时支持库、--target 及其原生诸选、Linux 可执行程序之包与可移植自举之包;Wasmtime 之桥与 WAT 并删;包内 C(构建基础、安全外壳、性能研究)改书以豫言或移出;云仓之原生单元之试改行于 Node;CI 不复装 clang;仓库构建并入豫构(自举、试、打包为豫构之令,仓所特有之编排书为目标包),云仓构建依此改书 仓不复有生 C 之途与 C 运行时;唯存豫构一构建之器;于无 clang 之机,自 Wasm 工具链之包起步,成自举定点(.wasm 逐字节同)与今之诸验;公录诸项之时
WP2 目标描述之抽象 M 抽寄存器之降中系于“裸机”者(服务号、内存之布、入口)为目标描述:(操作系统、指令集、可执行格式、入口绑定表、内存之策) 裸机三百八十项与八十四项之验不变,像逐字节同
WP3 Linux 最小闭环 L ELF64 书写器(x86-64、arm64);系统调用之降;进程之入;mmap 线性内存;退出、写、读 “你好”二进制之出与退出码,于 Linux x64 与 arm64 通;readelf 证其静态无依
WP4 Linux 后端全量与一致之骨 L 函数四十五;openat2 越界之防;一致之试之骨 一致之组于 Linux 与裸机所出逐字同
WP5 macOS L Mach-O 书写器(arm64、x86-64):LC_MAIN、LC_LOAD_DYLIB、绑定之信、ad-hoc 代码签名;libSystem 之导入;函数四十五 本机 arm64 通一致之组;x86-64 经 Rosetta 或 CI
WP6 Windows L PE32+ 书写器(x64、arm64);kernel32/ntdll 导入表;UTF-16 路径;NtCreateFile 之 RootDirectory;函数四十五 CI 上 Windows x64 与 arm64 通一致之组
WP7 垫层全改接 L GC 垫层文件与时钟原语之适配层(开柄、读、关;错误码之映;整数纳秒转浮点);行模式之 读 改返含换行之字节流,使“文末”与“空行”可辨;WASI 垫层接回执行器 今之验于改接后皆通;GC 程序于各平台原生二进制上行通;WASI 之样二十二逐字同
WP8 WasmGC 原生之行与独立自举 XL 执行器补全 WasmGC;AOT;豫言底层模式所书之 GC 运行时;隔离执行之域;编译器经 AOT 行于路二,前代出后代 编译器自身之 WasmGC 模块行于路二,所出与路一逐字同;禁 clang、cc、as、ld 与系统 libc,由原生二进制成自举定点;核实际构建之呼、动态之依与未定之符号;工具链常用原生二进制,Node 版存以为备
WP9 路一:Node 宿主 L GC 接口于 Node 之适配、宿主支持单、装载之核、说明之文;发行包(.wasm 加 JS 加清单) 三平台上同一 .wasm 通适配一致之例
WP10 验证之制 M 并行之运行器、像与探针之缓存、去逐试之重编;快检与全验之分级;CI 增 Windows 与 arm64 运行器 快检二分内;全验之时与各段公录之
WP11 文档与官网 S 本篇、二接口之规、官网架构之页与图同步 双语一致;官网可访

相依:WP0 → WP1 → WP2;WP2 之后,WP3 → WP4、WP5、WP6 可并行;WP7 依至少一已成之后端;WP8 依 WP3;WP9、WP10、WP11 与余并行。WP10 宜早始,并于 WP1 中度 Node 上工具链之速。

姑不为:显示与输入(底层接口 v2)、线程、GPU、JIT、真机启动、HAL。

十三、所决之事

审定之时,下列诸事皆从其议。

事 所决
D1 入系统之门:Linux 径发系统调用;macOS 由 libSystem 导入;Windows 由 kernel32/ntdll 导入 从之(与《底层接口方案》第十一节合)
D2 原生闭环自何平台始 Linux ELF 与 macOS arm64 并行:前者格式最简,后者本机可径试
D3 GC 程序于路二,先解释抑径 AOT 解释器唯为正确之准;器类程序(编译器)必 AOT;先 AOT 后 JIT
D4 “二分”之口径 快检二分;全验(含自举)另设长之预算,然须并行、缓存、可增量
D5 Node 之路最低之 Node 版与 WasmGC 特性之依 定最低之版,书于装载之核
D6 CI 之平台 增 Linux arm64、macOS x64、Windows x64 与 arm64 运行器(以托管运行器实可用者为准)
D7 C 后端之去留与其时 已定:删之,编译器唯存 Wasm 一后端。其时宜在 WP1,不待预编之成:Wasm 版自举每代约二十秒,速于原生一数量级;其价,WP8 未成之前,开发工具链赖 Node
D8 JavaScript 之去留 留宿主外壳;试具先改书以豫言,终唯留浏览器、Worker、Node 三类外壳
D9 裸机 读 于行模式返换行否 返之,使读得零字节乃为文末(WP7 之分)
D10 路二所发之主形 同一宿主程序两用:可装外来之 .wasm,亦可封程序为独立可执行文件;发行以独立可执行文件为主,宿主之形用于第三方模块与动态装载
D11 构建之器既合,仓所特有之构建之步书于何处 已定:合为豫构一器。议增一包类“目标包”:以寻常豫言依构建编排之库声明目标,由豫构编之而行于 Node;豫构自身唯内置通用之令(检查、构建、类型检查、试、自举、打包)

十四、与旧文之系及已知之违

十五、名义

延读