【Rust日报】2026-08-03 fcmaes-rust:纯 Rust 并行黑箱优化库提供 22 个可复现实验教程
内容提要
本文介绍四个Rust项目:fcmaes-rust提供并行黑箱优化算法及22个教程;Apache Fory 1.5.0支持外部类型序列化,JSON性能大幅提升;BorrowSanitizer优化垃圾回收后平均提速1.90倍,发现跨语言别名错误;job-control实现支持作业控制的Unix shell。
延伸解读
fcmaes-rust 的工程化设计
fcmaes-rust 强调纯 Rust 实现,仅依赖 rand、rand_pcg、rand_distr 和 rayon,避免使用 unsafe、build.rs 或 C 编译器,这有助于提升代码的可移植性和安全性。其 22 个教程均绑定真实模拟器,并提供固定产物、随机种子和精确重放命令,便于复现实验结果。在 ESA GTOP 轨迹问题上,该库在 7 个问题族中的 6 个取得最佳平均最优值,但作者也保留了质量多样性测试失败和“贪心算法优于优化器”的结果,体现了对算法局限性的透明报告。
Apache Fory 1.5.0 的序列化性能提升
Apache Fory 1.5.0 的 JSON 性能在基准测试中最高达到 Jackson 的 5 倍、Gson 的 10 倍,UTF-8 字节序列化也有显著提升。新增的外部类型序列化支持为 Rust、Dart、Swift 和 C# 等语言提供本地 serializer 或 schema,无需修改第三方结构体或引入包装类型,这为集成外部库提供了便利。Rust 侧通过本地 derive 声明目标类型,并以注册的 serializer 完成序列化,简化了使用流程。
BorrowSanitizer 的优化与发现
BorrowSanitizer 通过优化垃圾回收器,将回收触发条件从按 retag 数量改为按节点访问量计数,并增加多子节点压缩和树大小阈值判断,在 98 个 unsafe crate 基准中平均提速 1.90 倍,运行时间从 131.9 秒降至 62.4 秒。该工具还发现了新的跨语言别名错误,例如 Servo 的 mozjs 封装和 fiona-rs 的 io_uring 封装中由 C/C++ 与 Rust 共同访问触发的问题,这凸显了多语言应用中别名模型检查的重要性。
job-control 的实用功能
job-control 是一个用 Rust 实现的类 Unix shell,重点支持作业控制,包括 jobs、bg、fg、kill 等命令,以及通过 Ctrl+Z 暂停前台进程。它还提供 cd、pwd、echo 等内置命令,并使用 rustyline 实现命令历史和行编辑,使用 libc 处理进程控制与信号。对于希望了解 shell 内部实现或需要轻量级作业控制工具的开发者,该项目提供了清晰的参考实现。
Q&A
fcmaes-rust 是什么?它提供了哪些优化算法?
fcmaes-rust 是一个纯 Rust 的并行黑箱优化库,包含 DE、CMA-ES、CR-FM-NES、PGPE、BiteOpt、Dual Annealing、MODE 和 MAP-Elites 等算法。
fcmaes-rust 的教程有什么特点?
fcmaes-rust 提供 22 个教程,每个教程都绑定真实 Rust 模拟器,并附带固定产物、随机种子和精确重放命令,确保可复现性。
Apache Fory 1.5.0 在 JSON 性能上相比 Jackson 和 Gson 提升多少?
Fory JSON 在基准测试中最高达到 Jackson 的 5 倍、Gson 的 10 倍;UTF-8 字节序列化相较 Jackson 最高提升 5.55 倍,相较 Gson 最高提升 10 倍。
Apache Fory 1.5.0 的外部类型序列化是如何工作的?
应用可以为无法修改、无法添加 Fory 注解的第三方结构体定义本地 serializer 或 schema,直接读写目标值,不需要包装类型或中间镜像对象。Rust 侧通过本地 derive 声明目标类型,并以注册的 serializer 完成序列化和反序列化。
BorrowSanitizer 是什么?它主要用来做什么?
BorrowSanitizer 是一个基于 LLVM 插桩的工具,用来查找多语言应用中违反 Rust 别名模型的行为。
BorrowSanitizer 在 7 月更新中优化了垃圾回收器,具体有哪些改进?
回收触发条件从按 retag 数量计数改为按节点访问量计数,并增加了多子节点压缩和树大小阈值判断。
BorrowSanitizer 优化后性能提升多少?发现了哪些新错误?
在 98 个基准 crate 中,优化前后总平均加速 1.90 倍,运行时间从 131.9 秒降到 62.4 秒,几何平均加速达到 2.74 倍。项目还发现了新的跨语言别名错误,包括 Servo 的 mozjs 封装和 fiona-rs 的 io_uring 封装中由 C/C++ 与 Rust 共同访问触发的问题。
job-control 项目实现了哪些作业控制功能?
job-control 支持 jobs 查看作业状态,bg 和 fg 在后台与前台之间切换,kill 按 PID 或作业 ID 发送信号,并支持通过 Ctrl+Z 暂停前台进程。
job-control 提供了哪些内置命令?
提供 cd、pwd、echo、ls、cat、cp、mv、rm、mkdir 等内置命令,使用 rustyline 实现命令历史和行编辑,使用 libc 处理进程控制与信号。