MoonHive:MoonBit 工具链输出的诊断归因库——判断一个包是真的坏了,还是工具链版本对不上
// 库核心与平台能力完全解耦:这里不 import 任何 C FFI 包
let outcome : @diagnose.CheckOutcome = { .. }
match @diagnose.classify(outcome) {
ToolchainMismatch(why) => println("不是包的错:" + why)
DoesNotCompile(why) => println("包在当前工具链上不可用:" + why)
Verified => println("可以直接用")
_ => ()
}$ moon check --target native
Failed with 0 warnings, 14 errors.
Type Bytes has no method exact_view.| 层 | 包 | 后端 |
|---|---|---|
| 库核心(纯计算,零平台依赖) | verify/diagnose、report/model、report/json、report/compare、report/site、platform/time、core/error | wasm wasm-gc js native |
| 平台层(唯一允许 C FFI) | platform/proc、platform/fs、platform/http | 仅 native |
| 参考 CLI | cmd/moonhive、features/*、verify/check、verify/workspace、verify/gitsource | 仅 native |
./build.ps1 -CrossBackend # => wasm / wasm-gc / js 各 93 测试全绿,native 146| 生态 | 对标工具 | 回答的问题 |
|---|---|---|
| Rust | cargo-msrv | 一个 crate 的最低支持 Rust 版本是多少(其定义即为"does compile with a toolchain of a certain version") |
| Rust | cargo-semver-checks | 新版本是否破坏了 API 兼容性 |
| Java | Revapi | 二进制/源码兼容性是否被破坏 |
| Python | caniusepython3 / 各版本 CI 矩阵 | 依赖在目标版本上是否可用 |
| Node.js | npm view 的 engines 字段 | 包声明的运行时版本范围 |
| MoonBit | MoonHive | 这个包在本机这套工具链上到底能不能用,失败该归因给谁 |
| depsight | MoonHive | |
|---|---|---|
| 输入 | moon.mod / 注册表 / 依赖图元数据 | 真实工具链对真实代码的编译输出 |
| 手段 | 静态分析、语义化版本比对、SPDX 识别 | 在隔离工作区真的 clone 下来编译与跑测试 |
| 输出 | 0–100 健康分(新鲜度/合规/体积/弃用/活跃度) | 九类可行动结论(能用 / 编译不过 / 工具链不匹配 / 依赖缺失 …) |
| 回答 | "这个依赖值不值得选" | "这个包在我这套工具链上能不能用,失败该怪谁" |
| 运行环境 | JS 后端(Node.js ≥ 18) | 库核心四个后端通用,CLI 走 native |
| 结论 | 含义 |
|---|---|
| Verified | 编译与测试全通过,可直接使用 |
| TestFailing | 能编译,但测试失败 |
| DoesNotCompile | 编译器报错,当前工具链上不可用 |
| ToolchainMismatch | 错误指向版本或 API 不兼容,是工具链差异而非包损坏 |
| MissingDependency | 依赖解析失败 |
| NoManifest | 缺少 moon.mod,不是 MoonBit 模块 |
| TimedOut | 超出时间预算 |
| Unsafe | 含 FFI 或构建脚本,仅做静态分析 |
| FetchFailed | 仓库获取失败 |
./build.ps1 # 构建
./build.ps1 -Test # 构建 + 测试
./build.ps1 -CrossBackend # 额外验证库核心在 wasm / wasm-gc / js 上可用# 环境自检
./build.ps1 -Run doctor
# 体检一个远端仓库(git clone 默认分支)
./build.ps1 -Run @("inspect", "moonbit-community/yaml")
# 体检注册表发布版本(moon fetch)
./build.ps1 -Run @("inspect", "--registry", "moonbit-community/yaml")
# 批量普查多个包
./build.ps1 -Run @("survey", "moonbit-community/yaml", "bobzhang/toml", "--out", "report.md", "--json", "report.json", "--site", "index.html")
# 本地仪表盘
./build.ps1 -Run @("serve", "--dir", "reports", "--port", "9090")| 结论 | 数量 | 代表包 |
|---|---|---|
| Verified | 3 | bobzhang/lexer、bobzhang/toml、moonbit-community/yaml |
| DoesNotCompile | 3 | moonbitlang/yacc、moon-loglens、MoonCheck |
| ToolchainMismatch | 2 | moonhttp、jmespath |
| NoManifest | 3 | quickcheck、tempfile、duckdb |
| Unsafe | 7 | x、async、parser、zlib、llm、moonmmdb 等 |
| 指标 | 数值 |
|---|---|
| MoonBit 源码 | 5,944 行 / 21 个包 |
| C FFI 平台层 | 1,863 行(fs 774 / http 741 / proc 348) |
| 单元测试 | 146 个,全绿(moon test --target native) |
| 跨后端测试 | 93 个 × 3 后端(wasm / wasm-gc / js 上的库核心) |
| 第三方运行时依赖 | 0(仅 moonbitlang/core + 自建 C FFI 层) |
| CI | GitHub Actions,Linux / Windows 双平台矩阵 |
Install
Download zipMoonHive:MoonBit 工具链输出的诊断归因库——判断一个包是真的坏了,还是工具链版本对不上