内存安全的 PNG 解码器现在显著超越了传统 C 库的性能
核心要点:
性能表现:
Rust 的 png
crate 在 x86 上比 libpng 快 1.8 倍,在 ARM 上快 1.5 倍。使用了 QOI benchmark corpus 对多种实现进行了基准测试,测试结果显示内存安全的实现( png
、zune-png
、wuffs
)在速度上全面领先于 C 的实现(libpng
、spng
、stb_image
)。
技术原理:
png
crate 依赖于 Rust 编译器的自动矢量化,而不是显式的 SIMD 指令。这种方法性能跨架构表现稳定,x86 平台上还结合了stb_image
的过滤器实现。其他库(例如 zune-png
和stb_image
)则主要依赖手动编写的 SIMD 指令,导致其在不同架构上的表现不一致。png
crate 使用了流式解压器 fdeflate,通过批量字节解码等优化策略提升性能,同时支持流式解压以实现更广泛的适用性。zune-png
和wuffs
则采用一次性解压整个图像的策略。DEFLATE 压缩: 过滤器优化:
适用性:
Rust 的 png
crate 已用于image
crate,显示其广泛的生产环境适用性。Chromium 浏览器正在试验用 Rust 的 png
crate 替代 libpng。
生产就绪:
内存安全的实现支持现代 PNG 功能,如 APNG、多种辅助块读取/写入。 png
和zune-png
已通过超过 10 万张图片的测试验证其稳定性。wuffs
在某些灰度图像处理上存在已知问题,但可能与配置有关。
这表明,现代内存安全的实现不仅安全性高,还能在性能上赶超甚至超越传统内存不安全的 C 实现。
https://www.reddit.com/r/rust/comments/1ha7uyi/memorysafe_png_decoders_now_vastly_outperform_c/
硬核Rust学习材料
这哥们儿用心整理了硬核版Rust学习材料,大家作为进阶可以关注。
https://security.humanativaspa.it/an-offensive-rust-encore/
--
From 日报小组 Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss 微信公众号:Rust语言中文社区