3个不稳定版本
0.2.0 | 2024年2月8日 |
---|---|
0.1.1 | 2020年5月21日 |
0.1.0 | 2020年4月16日 |
146 在 压缩 中排名
每月下载量 2,561
用于 14 个 crate(其中5个直接使用)
145KB
896 行
lz-fear
本crate旨在使用纯Rust和无安全隐患的方式实现LZ4压缩和解压缩算法,以及用于LZ4文件的封装格式。输出与C参考实现完全匹配,字节对应字节。在撰写本文时,这也是我所知最快的无安全隐患实现。
lz4 crate调用C库。compress crate有一个依赖于unsafe
的实现。Redox实现(下面会详细介绍)在某些情况下速度较慢。
解压缩器状态:Beta。工作良好,速度极快(至少在我测试的官方C实现中如此)。
压缩器状态:Alpha。对于所有配置,您可以期望它产生完美的输出(即与C库产生的输出完全相同)。非默认块大小是这里的例外,目前尚不确定问题所在。字典的实现方式也略有不同。还有一个其他未知边缘情况,输出略有不同。请注意,所有这些情况仍然产生有效且正确的输出,只是编码方式与C实现略有不同(在这些情况下,压缩率可能略差)。API可能还会略有变化。名为“dolz4”的示例是一个压缩器,但目前缺少CLI。您必须通过更改代码来配置它。性能良好,但比C实现慢约2-3倍。当前瓶颈似乎是写入输出时的范围检查过多(大约25%的周期花费在这里),这也导致编译器完全崩溃,有时会为输出数组中的1字节和4字节写入发出一系列copy_from_slice调用。需要帮助。
如果您查看git历史记录,这严格来说是来自@johannesvollmer的分支。他拿来了redox-os的lz4压缩,并将其重构为可用的库crate。
然而,在注意到性能问题后,我逐渐从头开始重写了压缩器和解压缩器,使其与2400行官方C实现(而且这仅仅是没有帧的原始格式!)的混乱程度非常接近。诚然,它们包含了许多优化(为了性能故意读取超出缓冲区边界),但我自豪地说,我仅用400行完全安全的Rust就实现了类似性能。
代码模糊测试
模糊测试需要一个夜间工具链。目前确认这个项目的模糊测试与以下工具链兼容
rustc 1.44.0-nightly (f509b26a7 2020-03-18)
运行
cargo install cargo-fuzz
cargo +nightly fuzz run roundtrip_fuzz
依赖项
~0.6-1.1MB
~25K SLoC