性质:S9 开工前的生态扫描——GitHub 按语言全量搜索(MoonBit 仓库共 2,995 个,star 排序前 30 逐一核验)+ 6 个高相关仓库 clone 亲读(浅 clone 至
tmp/ext_survey/)。全部结论带链接与亲读证据,无凭记忆条目。 与既有评估的边界:kimicc / openseek / mbtcc / luna / MoUI 等此前已评估(裁定在档),本轮不重复。触发 = S9 裁定批待拍板项(停更应急预案 / 执行加速路线)需要生态输入。 总裁定:本轮最大收获是事实级的——官方 moonc 编译器源码已开源(前端+中端+wasm 后端;native 后端未开源)且 license 附编译产物 license 自选例外,直接改写「停更应急预案」(判定书 §3.3,已裁定不做)的输入;其余项目按 Tier 分级登记,S9 窗口内零采纳、零新增依赖。
Tier 1 事实级发现(改变裁定输入)
moonbitlang/moonbit-compiler —— moonc 本体开源 + 编译产物 MIT 例外
github.com/moonbitlang/moonbit-compiler(2026-09-20 仍活跃)
- 开源范围(实测 265 文件 = 263 .ml + dune + hash.c;2026-10-05 二轮复核修正「完整编译器」误述):前端 + 中端 + wasm 后端——前端(parsing_main.ml 3780 行 / typer.ml 5391 行 / mcore.ml 4893 行,均真实现非 stub)、中端(monofy/lambda_lift/pass_* 优化族)、wasm-gc 后端(
wasm_of_clam_gc.ml+ wasmir/dwarfsm 全家)、driver(moon0_main.ml 515 行)。native 后端未开源(src 零 native/aarch64/x86/c_backend 文件;README Roadmap 只强调 wasm 后端)——Vitro native 出口依赖的 moonc native 后端是闭源二进制,能 fork 维护/提 PR 的范围仅 wasm 后端链。构建 = OCaml 4.14.2 + dune;roadmap 将续开源 moonfmt/moondoc。 - License(LICENSE.TXT 205 行全文 + README §LICENSE 亲读;2026-10-05 二轮复核修正「GPL 系/AGPL 式」误判):MoonBit Public License = relaxed SSPL(README:89 官方自述;SSPL = MongoDB 系 Server Side Public License,非 GPL/AGPL 家族——LICENSE.TXT 文本骨架沿用 GPL 模板 1-18 节结构是误判来源,但 §14 是 SSPL 条款:商业或竞争性 SaaS 使用须公开整个服务栈(Service Source Code 明文含管理软件/用户界面/API/自动化/监控/备份/托管全算),义务范围比 AGPL 宽,AGPL 只要求服务组件自身源码)。两条关键例外(README:91-92):① 编译产物 license 由用户自选(vitro/engine 产物无传染——判定成立);② 「Modifications to the compiler are allowed for non-commercial purposes」——修改编译器仅限非商业目的(对 fork+改编译器的应急场景构成实质约束)。
- 对 Vitro 的判定:vitro/engine 经 moonc 编译发布的 mooncakes 产物命中例外①,无 license 传染,用法安全;moonc 本体可审计、可源码自建(OCaml 路径明确),但修改权受非商业条款约束、且维护面仅限已开源的 wasm 后端链。
- 供应链 license 全貌(API 实测):
moonbitlang/moon(构建系统)= Apache-2.0、moonbitlang/core= Apache-2.0、moonbitlang/async= Apache-2.0——依赖链中唯一服务端 copyleft 的是 moonc 本体,且产物例外覆盖。 - 落档:已连坐进 S9脱钩与裁定批判定书 §3.3——停更应急预案经用户裁定不做(真停更即 fork OCaml 源码维护 wasm 后端链;主出口 wasm-gc 完整在手,native 出口本属「可用不承诺」档且后端未开源无维护面)。
Tier 2 模式参考(同域实践样本,登记不采纳)
moonbitlang/minimoonbit-public —— MoonBit 子集编译器(官方教学课程)
github.com/moonbitlang/minimoonbit-public(2025-06 后停更,17MB)
官方《程序语言理论设计与实现》课程的 MiniMoonBit in MoonBit:MoonBit 写 MoonBit 子集编译器——lex / parser(ANTLR g4 并存)/ 双向类型检查 / KNF IR(另含 knf_eval 解释器)/ 闭包变换 / 寄存器分配 / GC 讲座;主编译目标 RISC-V(自带 libriscv + riscv_rt 运行时),wasm_rt 仅 mjs 运行时。
借鉴面:官方把「语言实现」当进阶课程教——其讲义代码是 Vitro 教学面的口径对照物(教学向语言实现的切片粒度参照);KNF→RISC-V 是 AOT 路线,与 Vitro bytecode→wasm 生成器(#41)路线不同,IR 形态对照价值有限。
moonbit-community/MoonbitNES —— 6502 解释器 + wasm 内存特化
github.com/moonbit-community/MoonbitNES(2026-04 活跃)
NES 模拟器(基于 nimes 移植,6502 非官方 opcode 足量通过 nestest)。两个工程点:① lib/memory.wasm.mbt——wasm 后端下 extern "wasm" FFI 直调 call $moonbit.malloc 复用宿主运行时线性内存;② moon.pkg 按 wasm / wasm-gc 分 target 条件编译。
借鉴面:多 target 条件编译与后端特化模式(Vitro VM 若做 wasm-gc 出口特化可参照);游戏域本体无直接借鉴。
moonbitlang/MoonLLVM —— 纯 MoonBit 的 mini LLVM
github.com/moonbitlang/MoonLLVM(2026-01 后停更)
纯 MoonBit 重实现的精选 LLVM 概念(IR / MachineIR / aarch64 / riscv64 后端),定位「Tiny LLVM companion」,可编到 Native/Wasm/JS;与官方 llvm.mbt 配套。 借鉴面:若未来 Vitro 走 native AOT 加速(#41 的远期对照路线),这是现成的 MoonBit→机器码形态参照物;当前 S9 窗口无此需要,登记。
Milky2018/wasmoon —— MoonBit 写的 WebAssembly 运行时 + JIT(2026-10-05 追加轮亲读)
github.com/Milky2018/wasmoon(2026-07 活跃;mooncakes Milky2018/wasmoon@0.10.0)
MoonBit 实现的 WebAssembly 运行时:WAT/WASM 双格式解析器 / 验证器 / 解释器 / SSA IR→VCode→机器码 JIT(AArch64 + amd64,含寄存器分配) / WASI P1+P2 / Component Model;自述 "A slow and insecure runtime for WebAssembly"。
亲读证据(as-of 2026-10-05 浅 clone 快照;tmp/wasmoon_look/;git ls-tree -r HEAD 3314 文件全量统计,非估计):.mbt 880(全部实现)/ .wast 750(WebAssembly 标准测试套件=输入)/ .wat 75(全部为测试输入与样例——examples/wasi_tests 45 + examples 11 + testsuite/fixtures 7 + tests/http 6 + wasmtime 上游导入 + smith_diff + docs/evidence,无一承载实现)/ .rs 71(从 wasmtime 上游导入的测试,非实现)/ 手写汇编 .S+.asm 16(全在 modules/wasmoon_jit/jit_ffi/,做 fiber 栈切换 / trampoline / windows 上下文,各配 GNU as 与 MSVC 双方言,旁挂 fiber.c/exec_mem.c/dwarf.c/exception.c)。连 WAT 解析器本身亦为 MoonBit 所写(modules/wasm_core/wat/parser/{lexer,instr,defs}.mbt)。
借鉴面:① MoonBit 表达力的实证(本项对 Vitro 的唯一实质用途)——自研 JIT(机器码发射 + 寄存器分配)纯由 MoonBit 完成,反证「MoonBit 表达力不足、需外部语言(.wat/汇编)补底」这一提案前提不成立。与 #41 无涉、不入执行加速谱系:wasmoon 属 native 自研 JIT 形态,该形态已由 S9 判定书 JIT 复核节判死(主出口 wasm-gc 零可执行内存 API ⇒「无处可放」);登记仅为防「决策没考虑过」,并避免按判定书告诫把 JIT 类档案误读为待办。② wat 生态位的实证——成熟 wasm 运行时的 wat 用法收敛为「输入格式 / 夹具载体 / disasm 诊断输出」三块,全在「格式·工具」层而非「实现语言」层(由此确认:把 .wat 设为第二实现语言在生态中零先例支撑,连本仓库这一最相近案例都不是)。③ 手写汇编的真实触发条件——仅现于「进程内执行 JIT 机器码所需的宿主机器 ABI 边界」(可执行内存 / fiber 切换 / DWARF / 异常表),且属 native 目标专属;wasm-gc 出口这些全由宿主 wasm 引擎承担,不存在对应需求(Vitro 1MB 载体是 wasm-gc 的 GC array 而非 linear memory,memory.copy 一类 bulk 指令亦够不着)。
边界(诚实):该仓库定位 native CLI,无 wasm-gc 出口;其 JIT 与汇编经验不可直接迁移到 Vitro 主出口。本项不采纳、零依赖,纯参照系登记。
Tier 3 工程实践参考(远外围,仅登记)
- mizchi/pkfire(2026-10-03 活跃):Pkl 类型化配置 + content-addressed 增量缓存 task runner(action key 变更才重跑)。缓存键设计与 Vitro clang_cache/shadow 缓存同题——当前无痛点,不采纳。
- pku-dppl/TAPL-in-MoonBit(2026-03):TAPL 全书 16 章 MoonBit 实现(untyped→simplebool→fullpoly→fullomega)。Vitro 若做 C 类型系统教学深化可参照其章节组织。
- 未纳入深读:bit-vcs/bit(VCS,域远)、selene(游戏引擎 46MB)、mizchi 系 UI 框架(luna 已评估弃用)、rabbita/mocket(Web 框架,Vitro 无 Web 壳自建面)。
跨生态同类对照(2026-10-05 追加轮——跳出 S9,按 Vitro 功能全景找借鉴)
触发 = 用户问「不只是 S9,其他与本项目相关的能否借鉴」。扩展到非 MoonBit 生态,按功能区对照。clone 增两仓(JSCPP / OnlinePythonTutor fork 至
tmp/ext_survey/)。
教学白箱执行(Vitro 主赛道)——两个直接同类,架构对照结论:Vitro 全面领先且差距是结构性的
| 项目 | 架构(亲读) | 对照 Vitro |
|---|---|---|
| JSCPP(felixhao28,教学圈标配、学术引用多) | JS generator 直驱 AST 解释器(无字节码);src/debugger.ts Debugger = generator.next() 包装 + 三谓词停止条件(isStatement/positionChanged/lineChanged)+ 自定义回调;无序列化帧协议——UI 直接摸 rt(CRuntime)进程内对象 |
Vitro = 字节码 VM + 冻结 NDJSON 协议 + StepPayload 序列化帧 + 时间旅行 seek。协议化 = 可多宿主消费(JSCPP 只能同进程 JS 消费——LiaScript/AlgoViz 全绑 JS);正规 parser(UPC 论文批评 JSCPP monolithic 无正规文法)。可借鉴一处小亮点:谓词化停止条件(Vitro breakpoints.set 现只有行断点;positionChanged/自定义谓词是协议「只增不改」下的远期字段候选,登记不排期) |
| Python Tutor(Guo,论文 2013 727+ 引,150 万用户) | 后端序列化执行 trace(每步 JSON:栈帧+堆对象+指针箭头)+ 前端渲染(fork 实测无 renderers 目录,以论文+在线站为准) | 与 Vitro StepPayload 同构——白箱可视化的正确形态殊途同归,Vitro 多出协议版本化契约(v0.1 冻结)与时间旅行(OPT 只有线性 Next/Prev 无 seek)。C 渲染视觉形态(char 数组渲染为字符串框/指针箭头带标签/数组索引标注)是 demo 内存面板的对照形态,UI 迭代时可参照 |
SQLite 白箱实验室(十月赛候选二)——空白区确认 + 交互形态参照
- 实测信号:不存在现成的「SQLite VDBE 字节码级白箱步进可视化」工具——三路搜索(B-tree/执行可视化/教学)最近的只有静态图:B-Tree/B+Tree/Hash 索引动画(插入分裂/删除合并/查找遍历)、RelaTable(JOIN 关系可视化)、Datasette(数据浏览)。VDBE(SQLite 自身字节码解释器)的 step 族白箱执行 = 空白区——恰是 Vitro 已冻结能力(step.begin/next + 时间旅行 + 调用树 + 数组/内存面板)的迁移场景,候选二的差异化护城河实测成立;W1 探针五问的答案面更宽了(EXPLAIN VDBE 指令流 = 天然 step 数据源)。
- 交互形态参照:ArtemioPadilla 树动画(若做索引页可视化)、RelaTable 外键关系图。
教学内容面——可执行课件模式
- LiaScript(JSCPP 集成方):Markdown 课件内代码块直接可执行。对 Vitro docs 站 + demo 课程树(110 课) 的启示 = 「可执行文档」是教学面的自然延伸——文档里的 C 代码块一键送 demo 执行(协议面已支持:
vitro api/ step 族全可被前端调用)。登记为课程重构批的候选增强,不排期。
不采纳(域远或栈异)
- mizchi/actrun(670★,GH Actions local runner)——CI 驱动 Vitro 已 Go 化,栈异;rabbita/mocket(Web 框架)——demo 前端 TS 已裁定;rustc 诊断哲学——diagnostics 批已内化 E 码+建议形态。
结论与纪律(追加轮补)
- 零新增依赖、零采纳——本轮收获是事实与参照系,不引入任何代码;clone 体全部在
tmp/ext_survey/(忽略区,随 tmp 生命周期清理)。 - 停更应急预案(判定书 §3.3)输入已改写:moonc 开源 + 产物例外 + 全链 license 实测,裁定重心转移。
- 执行加速(#41)的路线对照物补齐:wasm-gc 宿主 JIT(现役)/ bytecode→wasm 生成器(#41 候选)/ KNF→RISC-V AOT(minimoonbit 形态)/ MoonBit→LLVM(MoonLLVM 形态)——四形态谱系在档,0.9.0 只裁 #41 原题。(wasmoon 的 native 自研 JIT 不入此谱系,理由见下条。)
- wat 的生态位(wasmoon 追加轮结论,连带实测):成熟 wasm 运行时的 wat 用法收敛为「输入格式 / 夹具载体 / disasm 诊断输出」三块,全在「格式·工具」层,无一在「实现语言」层——「把
.wat设为第二实现语言协助 MoonBit」在生态中零先例支撑(连 wasmoon 这一最相近案例亦不是),不采纳、不排期。连带实测(MoonBit 语言能力面,非生态):wasm-gc 内联入口extern "wasm"= 叶子函数级、仅 wasm-gc 后端有效,可操作基本类型与 GC array 内 load/store,够不到引擎状态与 GC 对象(需硬编码$moonbit.*内部布局),且与 Vitro「单源多目标」纪律冲突——不构成加速路径。附(wasmoon 的 JIT 定位,防误读):其「MoonBit 自研 JIT」是 MoonBit 表达力的证据,不是执行加速路线输入——该形态已由判定书 JIT 复核节判死(主出口 wasm-gc「无处可放」),拒入谱系正是贯彻判定书「不收口则档案幻象留存」的告诫。 - MoonBit 生态成熟度:2,995 仓库、官方 moon/core 全开源(Apache-2.0)、moonc 源码可见(relaxed SSPL + 非商业修改条款 + 产物例外;native 后端未开源)、mooncakes 注册表运转中——「单供应商风险」实质下降,但非宽松开源;停更应急预案据此裁定不做(见 §3.3 修正后的判定书)。