Fast QR code generator library written in MoonBit
基于 MoonBit 的高性能二维码(QR Code)生成库。 纯 MoonBit 实现、无外部依赖,逐位对齐 Rust 参考库 fast_qr v0.14.0。
| 语言 | MoonBit(仅 wasm-gc) |
| 标准 | ISO/IEC 18004 二维码(版本 V01–V40,ECL L/M/Q/H,8 掩码评分择优) |
| 许可 | Apache-2.0 |
| 参考 | Rust fast_qr v0.14.0 逐位移植对齐 |
| 性能/体积 | 单次 build 慢 fast_qr ≈1.0–2.2×(逐位零差异)· 库体积约 0.65× → 量级与出处 |
| 测试 | 三载体分层(黑盒/白盒/文档测试)· 变异检测 + 第三方解码回读全绿 → 证据链 |
本页是落地页:只给「能做什么 / 怎么用 / 边界在哪 / 去哪看细节」。 数字、参数、实验设计与历史记录一律在 docs/, 本页的每条结论都带出处链接。
| 能力 | 说明 |
|---|---|
| 编码内容 | 字节(ASCII) 输入;自动选择 Numeric / Alphanumeric / Byte,也可强制指定模式 |
| 版本/纠错 | 自动最小适配或强制指定版本 V01–V40;ECL 缺省 Quartile(Q),可显式 L/M/Q/H |
| 掩码 | 自动 8 轮评分择优,或指定固定掩码(走快速路径) |
| 输出 | 终端 Unicode 字符画、SVG 字符串 |
moon add TryAndRun-TvT/fast_qr_moonbit发布状态:已发布(首个版本);本页为仓库当前文档,可能领先于线上归档, 精确版本以 mooncakes 页面 为准。
import {
"TryAndRun-TvT/fast_qr_moonbit/lib",
}///|
test "readme_quick_start" {
let qr = @lib.QRBuilder::from_string("https://example.com/").build()
match qr {
Ok(q) => {
// V02 → 边长 4*2+17 = 25;访问器返回 Option(手搓 QRCode 无元数据)
assert_eq(q.size(), 25)
assert_eq(q.version().unwrap().width(), q.size())
assert_eq(q.ecl().unwrap(), @lib.ECL::Q)
assert_true(q.to_str().length() > 0)
let svg = @lib.SvgBuilder::default()
.module_color("#0000ff")
.background_color("#ffffff")
.shape(@lib.Shape::RoundedSquare)
.to_str(q)
assert_true(svg.has_prefix("<svg"))
}
Err(_) => abort("README 示例内容构建失败")
}
}上面的 mbt check 块是 document test:moon test 会真编译、真运行它—— 改公共 API 而不同步改示例,测试直接变红。机制与踩坑见 README优化-冗余清理与最佳实践.md §6.3。
curl -fsSL https://cli.moonbitlang.cn/install/unix.sh | bash
export PATH="$HOME/.moon/bin:$PATH"moon build lib # 编译库包
moon build cmd/main --release # 编译 CLI(唯一后端 wasm-gc)
moon run cmd/main # 运行 CLI 演示(终端字符画 + SVG)
moon test # 运行单元/快照/文档测试bash scripts/gates.sh # 全量;支持 STAGES="check test" / SKIP_SLOW=1门禁阶段清单、脚本分组与逐个用途见 AGENTS.md §三 · S9r §4 脚本分组。 -Oz 体积最优档的命令、moon-wasm-opt 参数与「为何要 --disable-custom-descriptors」,见 S9r §1。
数字仅作选型与迭代基线,不代表对 fast_qr 的追赶承诺。本页只给量级; 表格、参数、统计离散与护栏见 S9r · 明细。
用例数与文件数不写进 README——它们随实现漂移,写死必然自相矛盾。需要数字时以 moon test 实跑为准。
本页只保留落地页所需的入口;文件名前缀 S<N> 为按实现顺序编号的阶段文档。 面向本仓库读者的完整导航(读者路径 / 按议题 / 全量清单)在 docs/README.md; 面向发布归档读者(mooncakes 落地页)的明细承接一律用仓库绝对链接(见文末「链接约定」)。
| 我想… | 去哪 |
|---|---|
| 用这个库 | 本页快速开始 → 公共 API 与矩阵读写 |
| 看性能/体积明细 | S9r 明细承接 · S9p · S9i · S9s 介质/字节加速 · S9t 介质换代复盘/勘误 · S9u 生态对比复测 |
| 看测试与证据链 | S10 roadmap · S10b 覆盖率 · S10c 修复记录 |
| 发布到 mooncakes | mooncakes-发布方案.md · 发布阻塞项落地 · 模块名迁移核验 |
| 改代码 / 提 PR | AGENTS.md(硬性约定)· 实现布局与文件职责 · 目录设置最佳实践 · 工具链版本与特性适配评估 |
| 审计脚本与口径 | 性能测试脚本-公开评审说明.md · S9r §4 脚本分组 |
| README 为何这样写 | README优化-冗余清理与最佳实践.md · 示例码资产与生成 |
| 清理/收敛评估 | S11 评估入口 · S11b 落地记录 · S11c 第6轮体检 |
| 改 / 新增文档 | S12 文档体系规范(准入 CheckList · 状态字段 · 防漂移门禁)· S12b 落地记录(门禁自身审计 · D2 目录分类) |
| 看实现系列文档 | ⤷ S1 数据结构(S1–S9 系列总入口)· ⤷ fast_qr 移植参考 |
| 看历史基线 | ⤷ 项目基础框架 · ⤷ 重写 roadmap · ⤷ wasm 编译运行分析 |
全量清单(含 docs/ 全部篇目与角色)在 docs/README.md §8。 新增文档须同步更新该文件与本表,否则 bash scripts/docs-link-check.sh 与 scripts/docs-consistency.sh ③ 会红(死链零容忍 + 索引覆盖)。
.
├── moon.mod # MoonBit 模块配置
├── moon.pkg # 模块根空包:README 文档测试宿主(不写库代码)
├── lib/ # 库包(公共 API)
│ ├── ecl / version / mode / mask.mbt # 公共枚举(ECL/Version/Mode/Mask)
│ ├── module / qr / qr_build / qr_builder.mbt # 容器、编排入口、链式构造器
│ ├── helpers / svg / shape.mbt # 输出层(终端画 + SVG)
│ ├── *_test.mbt / *_wbtest.mbt # 黑盒测试 / 白盒测试
│ └── internal/ # 实现子包(各带 moon.pkg;不反向依赖 lib)
│ ├── constants/ # 常量表 + 容量/元数据表
│ ├── bitstream/ # 位流缓冲(CompactQR)
│ ├── reedsolomon/ # GF(256) 除法 + 交织
│ ├── data_encoding/ # 三模式编码 + 自动回退
│ └── matrix/ # 放置 / 掩码 / 评分
├── cmd/ # 可执行包:main(CLI)/ bench / qr-min / host-probe
├── docs/ # 项目文档(入口 = docs/README.md,见「文档索引」)
│ ├── README.md # 目录首页:读者路径 + 分类地图 + 全量清单(§8 生成物)
│ ├── 01-规格/ 02-证据/ # D2 分类:实现规格 / 审计数据
│ ├── 03-过程/ 04-元/ # D2 分类:历史基线+发布过程 / 文档与 README 元规范
│ ├── 移植参考/ # fast_qr 外部语料(自成一域,由域首页统辖)
│ └── assets/ # 文档资源(qr-example.svg = README 示例码)
├── scripts/ # 构建/门禁/基准脚本(分组见 S9r §4)
├── .githooks/ .cnb.yml # 可选 Git 钩子 / 云原生构建配置
├── AGENTS.md # AI 协作代理指南(贡献前必读)
├── README.mbt.md -> README.md # 文档测试入口(符号链接;正文在 README.md)
└── LICENSE # Apache-2.0布局纪律:模块根只放元数据;库代码一律 lib/,实现细节 lib/internal/(不要建 src/); 唯一例外是根空 moon.pkg(README 文档测试宿主);测试放所属包内,*_test.mbt(黑盒)与 *_wbtest.mbt(白盒)不可混用。 文件级职责见 moonbit-实现布局与文件职责.md。
Install
Download zipFast QR code generator library written in MoonBit