Bencode 是 BitTorrent (BT 种子) 协议中使用的一种极为成熟的数据序列化和编码格式。本项目旨在为 MoonBit 语言生态提供一个高性能、严格遵循规范的 Bencode 原生编解码器。它的实现不仅填补了 MoonBit 在该特定二进制文本序列化领域的生态空白,还为未来使用 MoonBit 开发 Web3、P2P 协议和高性能网络工具奠定了坚实的基础
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
MoonBencode (基于 MoonBit 的 Bencode 库)
MoonBencode 是一个高性能且成熟的 Bencode 序列化与反序列化库,完全使用 MoonBit 编写。Bencode 是 BitTorrent 点对点文件共享协议所使用的数据编码格式。
特性
i...e,<len>:<string>,l...e和d...e并转换为 MoonBit AST 抽象语法树。Bytes,保证字节级别的保真度。安装与依赖配置
1. 添加依赖到项目中
在你的项目根目录下,运行命令行工具添加依赖:
或者直接编辑你项目的
moon.mod文件,在import部分添加:2. 导入包到模块中
在你想使用该库的包对应的
moon.pkg(例如moon.pkg.json或moon.pkg)中,添加依赖声明:快速使用
配置完成后,在
.mbt源码文件中,即可通过包别名前缀@bencode快速调用本库的方法:高级功能
1. JSON 互操作性
支持与 MoonBit 标准库的
Json类型进行互转。其中from_json会自动对字典的键进行排序以满足规范:2. 路径检索
无需深层嵌套匹配,使用路径数组即可快速查找子元素:
3. 种子 Info Hash 计算
对于 BitTorrent 开发,计算
info字典的 SHA-1 散列是核心。本库已完美集成纯 MoonBit 的 SHA-1 及 hash 计算器:数据类型
本库使用 MoonBit Enum 表示标准 Bencode 类型:
BInt(Int64): 整数类型。BStr(Bytes): 字节串(未强制使用 UTF-8)。BList(Array[BValue]): 列表类型。BDict(Array[(Bytes, BValue)]): 字典类型(键已按字典序排好)。命令行常用操作
本库提供以下标准命令供开发者使用:
moon check --deny-warnmoon buildmoon test --deny-warnmoon fmt --check命令行工具还提供可复现的真实场景演示:
可复现验收
仓库 CI 使用最新 Moon CLI(当前编译器
moonc 0.10.7),并在 Linux、macOS、Windows 上执行。可在项目根目录运行同样的检查:moon info会生成公开接口文件pkg.generated.mbti。0.10.x CLI 的moon info不支持--deny-warn,因此警告检查由moon check --deny-warn和moon test --deny-warn负责。测试覆盖严格整数与字符串校验、字典规范序与重复键、畸形输入、嵌套深度限制、 零拷贝视图、JSON 转换、路径查询、SHA-1
info_hash、Linux ISO 元数据、 嵌套 MoonBit 源码树、私有种子、Magnet 往返、piece 规划、安全策略、目录 查询和 Bencode 结构分析。当前生产.mbt代码已超过 4,000 行。 如需查看覆盖率,可运行:开源协议
Apache-2.0
仓库与来源说明
本项目是原创 MoonBit Bencode 与 BitTorrent 种子元信息实现,遵循公开的 BitTorrent 元信息约定,不复制上游库的实现代码。测试使用精简、可复现的元 数据 fixture,不重新分发种子 payload 或构建产物。