扩展库/lzma

lzma

压缩归档

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 失败,不作整包签收。新增双语事务范例和各 14 条普通独立程序路径通过。

v1.0.0C 混编0 依赖ABI 1

基于 7-Zip SDK 的标准 .xz 编解码,提供一次性内存、分段输入和文件流式 C/XLang API。

默认输出标准 XZ .xz 流(LZMA2 + CRC64),可与通用工具交换;解码还验证 CRC32、SHA-256、无校验、Delta 与 x86 BCJ 滤镜的外部样本。支持串联流及 4 字节对齐的零填充,拒绝不完整填充和尾随垃圾;不读取旧 .lzma 流。无校验流不检测内容损坏;CRC64 也不是内容认证。

2026-10-25 文本解压已通过拥有型 cstring 接管原解压缓冲;Windows 严格 C、标准 .xz 互通及语言 JIT/AOT 专项通过。完整 Windows 包脚本仍被项目根目录的共享 VFS 头路径问题挡住;Linux C ASan/UBSan 通过,但旧 Linux release/xl 不识别 cstring,语言阶段须待发布物重建后验收。

2026-10-26 当前 Win/Linux x64 发布版默认包门禁均通过:严格 C、Linux ASan/UBSan、Python 标准库 lzma.FORMAT_XZ 双向互通、完整 XLang JIT 与两平台各九条独立 EXE AOT。综合范例 JIT/AOT 同输出,基础范例与 C 输出一致。上段 VFS 与旧 Linux cstring 诊断是历史;公开格式只支持标准 .xz,32 位、TSan、长时压力及性能基准尚未验收。

典型场景

归档压缩固件 / 安装包分发冷存储大文件流式备份存储进度回显传输

快速开始

quick_start.xl
import lzma

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

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

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

核心特性

2026-10-28:Windows/Linux x64 默认包级门禁通过,包含 25 组 C 原生参数负例、0..9 往返、文件失败时保护已有目标、分配故障、Linux ASan/UBSan、Python 标准 XZ 互通及双语 JIT/AOT。C 桥接头可与核心头按任意顺序包含,不主动启用宿主的 XRT VALUE 模块。该结果不代表 32 位、长时压力或性能基准认证。

包信息

包名lzma
版本1.0.0
引擎LZMA SDK 26.03
实现方式C 混编(LZMA SDK C,API 层 xlang)
依赖无
ABI 版本1
导出符号compress(), decompress(), decompressText(), compressFile(), decompressFile(), compressor(), decompressor(), LzmaCompressor, LzmaDecompressor, LZMA_* 常量
源文件extlibs/lzma/src/lzma.xl
常量
export const int LZMA_MIN_LEVEL = 0 export const int LZMA_MAX_LEVEL = 9 export const int LZMA_DEFAULT_LEVEL = 5

压缩级别常量。0 最快、9 压缩率最高、5 为默认平衡点。

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

API 分为一次性、文件级和分段对象。压缩器对象在 finish() 时生成一条标准 .xz 流,此前 drain() 返回空 Buffer;文件接口直接通过 XRT reader/writer 流动。解压器可边输入边 drain(),但仅在 finish() 成功后才能信任输出。

文件接口末尾支持可空 onProgress(inputBytes, totalBytes, outputBytes)。含 NUL 的源/目标路径报 ValueError;返回 false 取消,抛 CancelledError;回调异常保留首因。普通 C Reader/Writer 流使用 xrtprogressproc + userData;native 文件 ABI 使用 XRT callable,三个 uint64 参数、bool 返回,不提供 FINAL 标志。关闭态回滚的 Windows OOM 缺口仍开放。
level 越界抛 ValueError;数据损坏或截断经 XRT 映射为 IOError,资源限额为 RangeError。C 的 iMaxItemBytes 是有效的解码单次分配上限,默认 256 MiB,可在分配前拒绝小输入声明的 1 GiB 字典;它不是进程总内存配额。OptionsInit 清零无关的条目、节点与深度字段,显式设置这些字段或 iFlags 会报参数错误。LZMA 不提供内容认证。

教学范例

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

1. 一次性 + 流式

lzma.xl
import lzma

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

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

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

2. 最高级别 L9

调优
import lzma

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

以上两段对象位于顶层,当前 JIT 可运行,AOT 仍受 M2 退出边界阻断;不以正文断言通过替代自然退役。取消、回调错误保护旧目标并立即重试的双语完整例见 extlibs/lzma/examples/file_transaction.xl / file_transaction_c.c,各自创建并清理独占临时目录。

运行范例

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

测试覆盖

普通功能、C ASan/UBSan(Linux)、语言 JIT/普通 AOT 与 Python 标准 .xz 双向互通通过,不表示默认门禁全绿:Windows 101 阶段中 99 项符合要求,余下关闭态 RFS 与顶层 M2;Linux 此轮只剩 M2。C 入口验证选项和资源限制结构的当前完整长度、版本及零保留字段;无效选项不开始读写流。独立编码器覆盖不同校验/滤镜及混合串联,损坏次流不交付首流明文。Python 检查器在 -O 下也执行全部判据,坏流须精确返回 1、lzma 诊断且无部分输出,不将崩溃或超时视为拒绝成功。

运行测试

终端
cd release
xl.exe run extlibs\lzma\examples\basic.xl
xl.exe run extlibs\lzma\examples\basic_c.c
xl.exe run extlibs\lzma\examples\file_transaction.xl
xl.exe run extlibs\lzma\examples\file_transaction_c.c
xl.exe run extlibs\lzma\test\boundaries.xl
xl.exe run extlibs\lzma\test\allocations.xl
xl.exe run ..\test\cases\extlib_lzma_progress.xl
← 返回扩展库列表