bz2

2026-10-29 顶层生命周期补测:全局压缩器在 Windows/Linux JIT 退出0,独立 EXE 均打印校验 PASS 后于退出期报状态错误、退出1。已确认 M2 主线阻断,与文件回滚 RFS 独立;默认门禁保留检查,旧局部对象与算法通过不等于完整发布签收。不通过提前销毁或移动全局对象绕开。

bzip2 字节流、增量编解码、文件事务和进度回调。复用 bzip2 1.0.8 与 XRT,无额外压缩 DLL。

交付状态

2026-10-29:新增“回调先失败、清理再OOM”的八组组合,Windows C/TCC先复现遗留临时文件;现复用XRT按仍打开文件句柄回滚后转绿,首因和旧目标不变。关闭后提交失败,再遇路径删除OOM的16组探针仍在压缩/解压预算3遗留临时文件,需独立XRT上下文补预备事务能力。默认门禁保留红项,本包暂不作完整发布签收;下列旧通过记录不覆盖该组合。

本轮Windows完整77项中仅关闭态回滚未达到预期;26个生成C原型、269项Python bz2互通、74个旧文件分配故障、新八组及新旧C/XLang JIT/AOT均符合预期。Linux原生文件系统完整门禁通过ASan/UBSan、24组双故障、56个旧文件分配故障、同等互通和双语JIT/AOT;输入指纹一致,不用Linux通过替代Windows风险验收。

2026-10-28:独立 C 桥接头不再依赖核心头的包含顺序,也不会打开宿主未选择的 VALUE 模块。四种头组合严格编译与 Windows/Linux 基础 C/XL 范例 JIT/AOT 同输出通过;此轮只改声明,未重复完整算法压力门禁。

2026-10-25:当前 Windows 发布版的默认专项门禁通过中央 XLang 用例 JIT/AOT、文件 OOM 事务、C/XL 双语范例、23 个生成 C 原型和 269 项独立 Python bz2 互通。Linux 门禁通过 C ASan/UBSan、同一互通集和 XLang 文件用例;现有 Linux release/xl 的中央语言用例仍在字节异或处报 typed XLIR 错误,完整 Linux 语言/AOT 尚未签收,须待 Linux 发布物重建后复验。长期压力和性能基准也不在本轮验收范围。

2026-10-26:当前 Win/Linux x64 发布版的完整包门禁均通过。Windows 报告 66 项检查与 26 个生成 C 原型;Linux 通过 C ASan/UBSan、269 项 Python 标准 bz2 互通,以及中央、进度、文件操作、文本交付、综合/基础/文件范例七份独立 XLang EXE。基础和文件范例与 C 输出一致,文本交付覆盖空串、中文、内嵌 NUL 与非法 UTF-8。上段 Linux XLIR 诊断属于旧发布物;32 位、TSan、长时压力和性能基准仍未验收。

快速使用

import bz2

Buffer packed = bz2.compress("你好,bz2", level = 6)
assert bz2.decompressText(packed, smallMemory = true) == "你好,bz2"

auto encoder = bz2.compressor()
encoder.update("left")
Buffer wire = encoder.drain()
encoder.update("right")
encoder.finish()
wire.append(encoder.drain())

接口

接口用途与默认值
compress(Buffer|string, level=9, maxInput=268435456, maxOutput=536870912)输出 Buffer;字符串长度使用 UTF-8 字节数。
decompress / decompressTextsmallMemory=false,maxInput=268435456,maxOutput=536870912,maxRatio=1000。
compressor / decompressor增量对象;压缩 workFactor=30,合法范围 0..250。
update / drain / finishfinish 返回 bool,不移交输出;完成后仍需 drain,drain 不重置计数。
valid / inputBytes / outputBytes / finished只读属性;解压器额外提供 members,finished 表示当前成员边界。
compressFile / decompressFilesource、destination、overwrite=true、限额及可选同步进度回调;含 NUL 路径报 ValueError。

文件回调

bz2.compressFile("input.bin", "output.bz2",
    onProgress = func(int inputBytes, int totalBytes, int outputBytes) as bool
        println(inputBytes, "/", totalBytes)
        return true
    end)

返回 false 抛 CancelledError;回调异常保留类型和消息,最终通知也可取消。常规失败不覆盖已有目标;不覆盖模式在预检后出现目标时仍拒绝最终替换。支持源目标同路径;当前发布物的文件 OOM 专项证据与其他边界见页首。

格式、限额和错误

支持空内容、低内存解码、串联成员;拒绝 CRC 损坏、截断和尾部垃圾。非法压缩数据及文件错误为 IOError,参数错误为 ValueError,限额为 RangeError,状态错误为 RuntimeError,分配失败为 MemoryError。

同一对象串行使用。已 drain 的数据无法撤回;倍率按已提交输入计算,需同时设置 maxOutput。限额不是 CPU 超时或编解码器工作内存限制。CRC 不是加密认证。

C 同等能力

xrt_bz2.h 提供版本化 options/error、一次性 Buffer、增量对象、Reader/Writer、文件事务及 xrtprogressproc。C 可直接使用,不依赖 xlang;只链接一份 XRT/xruntime 与 bzip2。C 只使用输入、输出和解压倍率限额;OptionsInit 清零无关的单项、条目、节点、深度字段,显式设置这些字段或 iFlags 会报参数错误。有效限额为零时关闭对应限制,XL 便捷接口要求正数。

范例与验证

发行目录:examples/extlibs/bz2.xl、bz2_basic.xl、bz2_files.xl。C 对照位于 extlibs/bz2/examples/basic.c 和 files.c,均可直接 xl run 或 xl build,两组使用相同输入与黄金输出。

源码门禁:tools/check_extlib_bz2.ps1、tools/check_extlib_bz2.sh;覆盖 26 个生成原型、269 项 Python bz2 互通、分配失败、IO/回调/状态边界、文件提交竞争及双语 JIT/AOT。中央 XLang 文件范例以独占系统临时目录运行、按字节校验解压内容,Linux 门禁将它与 C 文件范例及固定黄金输出对照;包内 test/file_ops.xl 另覆盖 UTF-8 往返、低内存解码、进度、取消和失败目标保护。test/text_transfer.xl 已进入双平台 JIT/AOT 默认门禁。

完整签名、所有权和复验方式见包内 README.md。官网页描述的是已实现范围和已知限制,不承诺未验证的共享对象并发、性能或断电持久性。