扩展库/miniz

miniz

压缩归档

2026-10-29 新顶层对象检查确认 M2 主线阻断:Windows/Linux JIT 退出0;独立 EXE 均打印校验 PASS 后在退出期报状态错误、退出1。默认门禁已接入,旧函数内对象、算法互通与双语通过不覆盖该边界,暂不作完整发布签收;不提前销毁或移动全局对象绕开。

2026-10-30 打开态文件回滚双故障已修复,96 组真实 C 夹具在 Windows 旧 8 失败→新 0;首因、旧目标和内存平衡保持。Windows 关闭态回滚 OOM 仍有两组残留(RFS),Linux 同例过;默认门禁分别保留 RFS/M2,不能签收整包。标准 zlib 77 编码/56 外部解码/70 拒绝和新双语事务例、各 14 条普通独立程序路径通过。

v1.0.0C 混编0 依赖ABI 1

标准 zlib 流压缩,底层复用 XRT 的 deflate/inflate,不重复携带另一套压缩引擎。xlang 层提供二进制安全的 Buffer 一次性、文件级和 update → drain → finish 增量流式接口。

典型场景

嵌入式压缩zlib 兼容轻量集成日志压缩缓存压缩进度回显传输

快速开始

quick_start.xl
import miniz

func main(...) as int
    Buffer packed = miniz.compress("hello miniz")
    println(miniz.decompressText(packed))   // hello miniz

    auto enc = miniz.compressor()
    enc.update("part1 ")
    enc.update("part2")
    enc.finish()
    Buffer blob = enc.drain()

    auto dec = miniz.decompressor()
    dec.update(blob)
    dec.finish()
    println(dec.drain().text())           // part1 part2
    return 0
end

核心特性

包信息

包名miniz
版本1.0.0
引擎XRT deflate/inflate(zlib 格式)
实现方式XRT 编解码 + C/XLang 接口层
依赖无
ABI 版本1
导出符号compress(), decompress(), decompressText(), compressFile(), decompressFile(), compressor(), decompressor(), MinizCompressor, MinizDecompressor, MINIZ_* 常量
源文件extlibs/miniz/src/miniz.xl
常量
export const int MINIZ_MIN_LEVEL = 0 export const int MINIZ_MAX_LEVEL = 10 export const int MINIZ_DEFAULT_LEVEL = 6

压缩级别常量。0 不压缩、10 压缩率最高、6 为默认平衡点。

一次性 / 文件 / 流式
export func compress(Buffer data, int level = 6, ...) as Buffer export func decompress(Buffer data, ...) as Buffer export func compressFile(...) / decompressFile(...) export func compressor(int level = 6, ...) as MinizCompressor export func decompressor(...) as MinizDecompressor

提供一次性、文件级和增量流式三种接口。流式类提供 update/drain/finish、inputBytes/outputBytes/finished;每次编码只生成一条 zlib 流,解码拒绝第二条拼接流及旧私有容器。

文件接口末尾支持可空 onProgress(inputBytes, totalBytes, outputBytes)。含 NUL 的源/目标路径报 ValueError,false 取消,回调错误保留首因。普通 C Reader/Writer 流使用 xrtprogressproc + userData;native 文件 ABI 使用三个 uint64 参数、bool 返回的 XRT callable,无 FINAL 参数。C 流进度从 Reader 当前位置起算,无法同时取得总长和当前位置时不置 TOTAL_KNOWN。Windows 关闭态回滚 OOM 仍开放。
C 流式接口借用 Reader/Writer,不接管关闭。读取或 drain 写出失败时,错误结构保留可识别的 XRT 参数、内存、限额、状态、取消或 IO 首因,以及原始代码和消息;未提供详细首因时才按 IO 处理。
level 在工厂和直接原生构造入口都只接受 0..10,越界抛 ValueError。结构化底层错误直接分发:损坏/截断通常为 IOError,限额为 RangeError,分配失败为 MemoryError,不一概改成 CompressionError。

教学范例

完整源文件:examples/extlibs/miniz.xl

1. 一次性 + 流式

miniz.xl
import miniz

Buffer packed = miniz.compress("xlang miniz")
assert miniz.decompressText(packed) == "xlang miniz"
println("引擎版本: ", miniz.version())

auto encoder = miniz.compressor()
Buffer streamPacked = Buffer()
encoder.update("hello ")
streamPacked.append(encoder.drain())
encoder.update("stream")
streamPacked.append(encoder.drain())
encoder.finish()
streamPacked.append(encoder.drain())

auto decoder = miniz.decompressor()
decoder.update(streamPacked)
decoder.finish()
assert decoder.drain().text() == "hello stream"

2. 最高级别 L10

调优
import miniz

auto tuned = miniz.compressor(miniz.MINIZ_MAX_LEVEL)
tuned.update("tune me")
tuned.finish()
assert miniz.decompress(tuned.drain()).text() == "tune me"

以上两段对象在顶层:当前 JIT 可运行,AOT 仍在退出时受 M2 阻断,不以正文断言通过代替自然退役。文件事务双语完整例 extlibs/miniz/examples/file_transaction.xl / file_transaction_c.c 展示 UTF-8 路径、取消/回调错误保护旧目标及重试,各自创建并清理独占目录。

运行范例

终端
cd release
xl.exe run examples\extlibs\miniz.xl

C 对照范例可从 release 目录直接运行:xl.exe run extlibs/miniz/examples/basic.c。正式包仍按清单分离编译原生源码。

包内 extlibs/miniz/examples/streaming.xl 与 streaming_c.c 是完整增量流双语对照:及时 drain、finish 尾部收集、分块解压和计数断言。两份可直接 xl run 或 build,无文件依赖,固定输出为 hello stream 和 12 / 12。

测试覆盖

当前普通功能和各 14 条普通 AOT 路径通过,不表示默认门禁全绿:Windows 76 阶段中 74 项符合要求,关闭态 RFS 与顶层 M2 分别失败;Linux 此轮只剩 M2。直接构造器/C 桥接、五类非法级别、0..10 往返、显式类型、头包含顺序和原先 IO 首因/分配测试保留。历史资源事件未被本轮绿跑当成已关闭。

2026-10-28 Windows/Linux 默认门禁通过新增 C IO 首因矩阵:四个入口 × 七类错误共 28 组、真实 Writer 扩容 OOM、关闭归属和活动分配恢复。保留严格 GCC、Linux ASan/UBSan、Python zlib 互通、新旧双语 JIT/AOT;Windows 默认模式也完整构建运行中央、进度、文件、分配和完整范例。失败保留原始状态与输入指纹,不把一次通过写成长期压力或所有平台认证。

测试文件:extlibs/miniz/test/file_ops.xl、extlibs/miniz/test/test_miniz.c,以及中央 test/cases/extlib_miniz.xl。C 入口先验证选项和资源限制结构的长度、版本、保留字段及 0..10 级别;条目、节点、深度限额及未知标志不适用于单条 zlib 流,显式设置会报参数错误,不读取文件流输入。

2026-10-26 当前 Windows/Linux x64 包级门禁通过:严格 C、Linux ASan/UBSan、Python 标准库 zlib 双向互通、XLang JIT/AOT,以及 C/XLang 基础范例输出一致。Linux 另覆盖七条独立 EXE AOT 和文件/完整范例 JIT/AOT 对照。旧 Linux cstring、根目录 VFS 与 AOT 缺符号阻断不再复现;32 位、TSan、长时压力及持续模糊测试尚未验收。

运行测试

终端(仓库根目录)
powershell -NoProfile -ExecutionPolicy Bypass -File release/extlibs/miniz/test/check.ps1
bash release/extlibs/miniz/test/check.sh
← 返回扩展库列表