lz4
2026-10-29 顶层生命周期补测:全局压缩器在 Windows/Linux JIT 退出0,独立 EXE 均打印校验 PASS 后于退出期报状态错误、退出1。已确认 M2 主线阻断,与文件回滚 RFS 独立;默认门禁保留检查,旧局部对象与算法通过不等于完整发布签收。不通过提前销毁或移动全局对象绕开。
标准 LZ4 Frame、增量编解码、文件事务和同步进度回调。复用 LZ4F 与 XRT,无需额外压缩 DLL。
验证范围
2026-10-29:Windows 八组回调失败加清理 OOM 的红例已在包内修复:文件仍打开时按 XRT 原生文件句柄回滚,首因与旧目标不变。但成功关闭后提交失败,再遇路径删除 OOM 仍会遗留临时文件;16组新探针的压缩和解压预算3复现。默认门禁保留红项,当前不作完整发布签收,须由独立 XRT 上下文补齐预备事务回滚能力。下列旧通过记录不覆盖这一新组合。
本轮 Windows 76项门禁仅最后的关闭后回滚项未达到预期,既有功能、新八组、27个生成C原型与514项系统库互通均通过。Linux原生文件系统完整门禁通过 ASan/UBSan、24组双故障、四线程、同等系统库互通、语言JIT/AOT和双语范例;Linux路径删除没有Windows的转码分配,不据此关闭Windows风险。
2026-10-24:当前 Windows 发布版通过 69 项专项检查,包含综合范例 JIT/AOT、23 个实际生成 C 原型、故障注入、四线程 1000 轮及 C/XL 同输出范例;输入快照无变化。Windows 和 Linux C 驱动各通过 514 项系统 liblz4 互操作检查;Linux C 通过 ASan/UBSan 与泄漏检测,Linux XLang 边界和双语对照也通过。此前的字节位运算 XLIR 阻断已不影响当前 Windows 发布版;Linux XLang AOT、32 位、TSan、长期压力和性能基准尚未验收。
2026-10-26:当前 Windows 完整门禁再次通过 69 项检查及系统库互通;Linux 门禁通过 C ASan/UBSan、514 项系统 liblz4 互通,以及中央、边界、进度回调和综合/基础/文件范例的 JIT/AOT。基础与文件范例同 C 输出一致。旧 XLIR 阻断已不影响当前双平台发布版;32 位、TSan、长期压力和性能基准仍未由这些门禁证明。
快速使用
import lz4
Buffer packed = lz4.compress("hello 世界", acceleration = 4)
assert lz4.decompressText(packed) == "hello 世界"
auto encoder = lz4.compressor()
encoder.update("left")
Buffer wire = encoder.drain()
encoder.update("right")
encoder.finish()
wire.append(encoder.drain())
assert lz4.decompressText(wire) == "leftright"
接口
| 接口 | 合同 |
|---|---|
version() | 引擎版本文本。 |
compress(Buffer|string, acceleration=1) | 返回 Buffer;acceleration 为 1..65537,不是 HC 等级。 |
decompress(Buffer) / decompressText(Buffer) | 返回 Buffer 或文本;二进制,包括 NUL,使用 Buffer。 |
compressor / decompressor | 增量对象,update/drain/finish,累计字节只读属性;解压器另有 finished/members。 |
compressFile / decompressFile | source、destination、overwrite=true、限额及可选同步 onProgress;具体参数顺序见 README。 |
便捷函数默认 maxInput=268435456、maxOutput=536870912,解压另有 maxRatio=1000,要求正数。倍率按每帧已消费前缀计算,不是最终压缩率,也不是 CPU 或工作内存限制。C 的 maxEntries 限制数据帧及 skippable 帧;OptionsInit 清零无关的单项、节点、深度字段,显式设置这些字段或 iFlags 会报参数错误。原生类 C 类型构造器的有效零限额表示不限,优先使用带校验的工厂。
流式与文件
finish 成功后重复调用成功,但不能继续 update;finish 后仍需 drain 最后一段。finished 仅表示完整帧边界,members 不含 skippable 帧。串联帧、关联块、标准块大小和跳过帧均可解压,不支持外部字典 ID。已 drain 的前缀无法撤回,完整验证成功后再发布结果;校验和不是加密认证。
文件接口经同目录临时文件,完整校验、最终进度、flush/close 成功后提交;支持原地转换。含 NUL 的源/目标路径报 ValueError,不访问前缀路径。取消、回调异常、输入损坏与限额失败不覆盖已有目标,overwrite=false 处理提交竞争。已关闭事务的二次 OOM 仍有文首所列清理风险;不承诺断电持久性或操作系统拒绝清理时仍能删除临时文件。
onProgress 参数依次为 inputBytes、totalBytes、outputBytes,返回 false 为 CancelledError,最终通知也可以取消;异常保留类型、消息和因果链。同一对象串行使用,可在回调中操作其他独立对象。
错误与边界
ValueError 为参数错误,RangeError 为限额,RuntimeError 为状态,MemoryError 为内存不足,IOError 为压缩数据/文件错误。共享 string 桥的嵌入 NUL 限制没有由本库消除;任意字节输入走 Buffer 路径。包内 VENDOR.md 保留上游许可、哈希及基础 lz4.c/h 精确来源仍待确认的事实。
C 同等能力
xrt_lz4.h 提供 options/error、一次性、增量、Reader/Writer、文件和普通 C 进度回调。输入借用,输出 xbuffer 归调用方释放,reader/writer 不由接口关闭或 flush。C 核心只依赖 XRT;语言 callable 适配另需 xruntime。
范例与复验
发行目录提供已在 Windows JIT/AOT 验证的综合范例 examples/extlibs/lz4.xl,以及 lz4_basic.xl 和 lz4_files.xl;C 对照在 extlibs/lz4/examples/basic.c 和 files.c。基础与文件两组使用相同输入和黄金输出;文件范例使用独占临时目录并在异常路径清理。
tools/check_extlib_lz4.ps1 -Interop 运行完整 Windows 专项及独立互操作;不带 -Interop 不表示已验证互通。tools/check_extlib_lz4.sh 运行 Linux C sanitizer、系统库互通、XLang JIT/AOT 与双语对照。实际输入哈希、参照库版本和输出由门禁保存。