宣布推出Rust版Zstandard
摘要
Trifecta Tech Foundation 宣布首次发布 libzstd-rs-sys,这是一个纯 Rust 实现的 Zstandard 压缩格式,可作为 C 参考实现的直接替代品,在轻微性能损失下提供更好的可移植性和内存安全性。
<p><a href="https://lobste.rs/s/jhbndn/announcing_zstandard_rust">评论</a></p>
查看缓存全文
缓存时间: 2026/06/01 14:32
# 宣布推出 Rust 语言版的 Zstandard - Trifecta Tech Foundation
来源:https://trifectatech.org/blog/announcing-zstandard-in-rust/
在过去的一年里,我们一直在默默进行第三个压缩项目。继 [zlib](https://github.com/trifectatechfoundation/zlib-rs) 和 [bzip2](https://github.com/trifectatechfoundation/libbzip2-rs) 之后,现在我们开始着手开发 zstd,项目名为 [libzstd-rs-sys](https://github.com/trifectatechfoundation/libzstd-rs-sys),并自豪地宣布其首次发布。
Zstd 是一种专为现代 CPU 设计的压缩格式。它比 gzip 快得多,压缩效果也更好。它已被广泛使用,我们预计它将逐渐取代用于网络流量的 gzip。
## 为什么还要做?
在 Rust 中使用 zstd 已经可以通过 [zstd](https://crates.io/crates/zstd) crate 实现,那么为什么还要费力搞一个全新的实现呢?
### 可移植性
Rust 的一个实际优势是编写可移植的软件非常直接。目前 `zstd` crate 会从源代码编译 C 代码,这需要目标平台有 C 工具链并且该平台必须得到支持。在 Windows 或 WebAssembly 上搭建 C 工具链可能是一个挑战,而纯 Rust 实现则不需要。对于 Rust 程序员来说,使用 Rust 编写的依赖项体验更佳。
### 即插即用
此外,与 zlib 和 bzip2 一样,我们支持将 `libzstd-rs-sys` 编译成一个兼容的即插即用 C 库。因此,我们正在或旨在成为 C 参考实现的一个替代方案。
### 增强生态系统
[C 参考实现](https://github.com/facebook/zstd) 由 Meta 维护,贡献代码需要与他们签署贡献者协议。我们相信,一个独立、高效且兼容的实现能够增强开源生态系统。
## 当前状态
参考实现最初使用 [c2rust](https://c2rust.com/) 进行翻译,此后我们完成了解压和字典构建器的清理工作。
我们将 Rust 代码(编译成 C 静态库)与参考实现的测试套件进行测试。我们还使用模糊测试和 Miri,因此我们对实现的正确性充满信心。
预发布版可在此处获取:[github.com/trifectatechfoundation/libzstd-rs-sys/releases/tag/v0.0.1-prerelease.2](https://github.com/trifectatechfoundation/libzstd-rs-sys/releases/tag/v0.0.1-prerelease.2)。
这项工作也对生态系统产生了积极影响:我们发现了 Miri 的若干限制(现已解决)并为 Clippy 做出了贡献。关于我们近期贡献的更完整总结可在 [此处](https://trifectatech.org/blog/fixing-our-own-problems-in-the-rust-compiler/) 找到。
### 内存安全的代价
默认情况下,我们实现的解压性能比 C 参考实现慢几个百分点。我们在 [基准测试套件](https://trifectatechfoundation.github.io/libzstd-rs-sys-bench/) 中对每次合入 `main` 的提交进行基准测试。
不过我们认为这种回退是可以接受的,因为启用 `unsafe-performance-experimental` 特性标志后,我们能够达到与 C 相同的性能。该特性标志禁用了4处边界检查,这些检查使用输入数据来索引数据结构。对于大多数用户来说,约3%的性能回退可能是为提高内存安全性而接受的代价。如果你真的需要那最后一点性能,可以自行承担风险启用该标志。在这四个位置,其行为与 C 一致,C 同样不检查边界,并且在许多生产系统中运行良好。
## 未来
我们正在为该库的压缩部分寻求资金。
由于压缩和解压之间的代码共享,我们稍微看过压缩代码,但大部分清理工作仍需完成。我们确实设立了基准测试以确保压缩性能不会意外回退,并且如前所述,我们已经使用参考实现的测试套件来检查我们是否产生了正确的结果。
剩余工作列在 [里程碑4:编码器实现](https://trifectatech.org/initiatives/workplans/libzstd-rs/#future-work) 中。如果您想支持我们的工作,请与我们联系;参见 [trifectatech.org/support](https://trifectatech.org/support/)。
### 生态系统集成
我们有自己的 `zstd` crate 分支,用 `libzstd-rs-sys` 代替了 C 库。我们希望将来能将其上游合并。
对于最常用的 API,这很简单。但对于 `experimental` 特性,我们遇到了一些不匹配的地方:`zstd-safe` 使用枚举,而我们出于 FFI 安全考虑必须使用 `struct`。
解压方面的工作由 [Chainguard](https://www.chainguard.dev/)、[Astral](https://astral.sh/) 和 [NLnet Foundation](https://nlnet.nl/) 资助,我们非常感谢他们的支持。[Sovereign Tech Agency](https://sovereigntechfund.nl/) 投资了字典构建器,感谢!
---
### 关于
**Trifecta Tech Foundation**([https://trifectatech.org/](https://trifectatech.org/))是一个非营利性和公益组织(相当于 501(c)(3)),致力于为关键基础设施软件创建开源构建块。我们在数据压缩、时间同步和权限边界方面的倡议影响着数百万人的数字安全。如果您想支持我们的工作,请与我们联系;参见 [trifectatech.org/support](https://trifectatech.org/support/)。
**Astral**([https://astral.sh/](https://astral.sh/))为 Python 生态系统构建高性能开发者工具:
- Ruff,一个用 Rust 编写的极快 Python 代码检查器。
- uv,一个用 Rust 编写的极快 Python 包管理器。
Astral 的使命是让 Python 生态系统更高效。了解更多请访问 [astral.sh](https://astral.sh/)。
**NLnet Foundation**([https://nlnet.nl/](https://nlnet.nl/))是一个公认的慈善非营利基金会。该基金会鼓励互联网技术领域的网络研究和发展。NLnet 基金会的章程规定:“促进电子信息交换以及与此目的相关或有益的一切”。NLnet 的首选工具是向支持独立研究人员和开发者的小型独立项目提供小额资助。了解更多请访问 [nlnet.nl](https://nlnet.nl/)。
**Chainguard**([https://www.chainguard.dev/](https://www.chainguard.dev/))为默认安全的软件栈构建可信的开源软件。了解更多请访问 [chainguard.dev](https://www.chainguard.dev/)。
### 更多信息
- Trifecta Tech Foundation 的数据压缩计划:[https://trifectatech.org/initiatives/data-compression](https://trifectatech.org/initiatives/data-compression)
- libzstd-rs GitHub 仓库:[https://github.com/trifectatechfoundation/libzstd-rs-sys](https://github.com/trifectatechfoundation/libzstd-rs-sys)
*如有疑问,请联系 Erik Jonkers:[[email protected]](mailto:[email protected])*
---
相似文章
@charliermarsh: 来自 Trifecta Tech 的纯 Rust zstandard 解码器实现!很荣幸与 Chainguard 共同资助了这项工作……
一个纯 Rust 的 zstandard 解码器实现已经发布,由 Trifecta Tech、Chainguard 和 NLnet 基金会资助。
Zerostack – 一个受Unix启发的纯Rust编写的编码助手
Zerostack 是一个完全用 Rust 构建的受 Unix 启发的编码助手,旨在帮助开发人员进行代码生成和自动化。
zinnia: 一个用Rust编写的模块化64位类Unix内核
Zinnia 是一个用Rust编写的模块化64位类Unix内核,旨在在UEFI系统上启动并运行带有Wayland或X11的现代桌面。它实现了POSIX API和常见的Linux/BSD扩展。
Firefox 中的 zlib-rs
Firefox 现在使用 zlib-rs 进行 gzip 压缩,提升了性能和安全性,不过集成时需要为 Intel Raptor Lake CPU 的一个 bug 进行变通处理。
Bun 的 Rust 重写已合并
Bun,JavaScript 运行时和包管理器,已合并其核心从 Zig 到 Rust 的重写,可能提升性能和可维护性。