使用纯函数式编程(FP)追求高性能软件时,往往在与使用 C 等低级语言编写的成熟系统竞争时遇到障碍。Richard Feldman 最近的基准测试通过评估不同的 FP 实现与标准 DEFLATE 压缩工具的对比,突显了这一动态。测试表明,虽然现代函数式语言正在缩小差距,但 C 语言中可用的特定架构优化在缺乏原生访问的情况下仍难以复制。
其中一个显著的成功是使用 Lean 4 实现的,这是一种函数式编程语言和定理证明器。一个名为 `lean-zip` 的库在所有测试的压缩级别上都优于同等的 Rust 包(`miniz_oxide`)。在最快设置下,Lean 实现的速度快了高达 15%,且生成的输出比 Rust 替代方案小 8.8%。然而,尽管超越了一个主要生态系统的标准,它仍无法与专门的 C 库 `libdeflate` 相媲美。这种差异归因于 `libdeflate` 使用了特定于架构的 SIMD(单指令多数据)指令,这些指令提供了当前的函数式抽象难以轻松利用的硬件级并行处理。
为了进一步测试这些语言的极限,研究人员对专门为运行时性能设计的初创函数式语言 Roc 进行了基准测试。使用名为 `roc-deflate` 的包,研究人员利用 Silesia 语料库(用于测试压缩算法的标准文件集)将其输出与 `libdeflate` 进行对比。在 AMD Ryzen 9 3900X 机器上,`roc-deflate` 的性能在 `libdeflate` 速度的 8.9% 左右;而在 M1 MacBook Pro 上,差距显著缩小到仅为 2.6%。这些结果表明,虽然纯 FP 目前可能由于编译器在特定 CPU 指令方面的限制而难以达到手工调优的 C 代码的绝对峰值,但它们能够在许多生产环境中实现高性能对等。
这些测试中确定的一个关键限制涉及流式 API 和架构约束。例如,Roc 中实现的一些优化尚未应用于非流式操作。此外,由于函数式编译器通常优先考虑安全性和抽象,而非直接内存操作或专用指令集,因此仍然存在一个“天花板”,即在汇编级别进行手动调优(如 libdeflate 中所示)具有决定性的优势。数据表明,随着函数式编译器的演进,重点可能会集中在通过更好的自动化优化来缩小这一百分比差异,而不是试图手动复制每一个硬件特定技巧。
这些基准测试为编程范式之间的权衡提供了实际视角。虽然 Rust 已成为系统工程的热门选择,但这些发现表明,根据所需的吞吐量和应用程序所需的硬件专业化程度,Lean 和 Roc 可以提供具有竞争力的替代方案。最终,这些语言与 C 性能的接近程度是一个受语言设计和各自工具链成熟度共同影响的动态目标。
主要来源确立了几个关键点:首先,它确认了 `lean-zip` 在所有压缩级别上都优于 `miniz_oxide`;其次,它量化了 `roc-deflate` 与 `libdeflate` 之间的具体性能差距,显示在不同架构上分别中位减速为 8.9% 和 2.6%。这些主张直接由作者在原始文章中提供的基准测试结果支持。
证据映射: 1. 主张:lean-zip 优于 miniz_oxide。 来源 ID:[primary] 2. 主张:roc-deflate 在测试的 CPU 上性能在 libdeflate 速度的 ~3% 到 9% 范围内。 来源 ID:[primary]
