给 Rust 带来更快的异常

2024 年 11 月 6 日,关于在 Rust 中引入更快的异常的讨论。三个月前曾写过为何可能使用恐慌处理错误,但恐慌并不适合此目标,真正的明星是 unwind 机制。

  • Lithium crate:用于在 Rust 中实现更快的异常和 unwind。
  • 常规函数返回与替代返回:通常函数返回至调用后的语句,而替代返回机制可让被调用者决定返回的语句。
  • Rust 当前 panic 性能测量:使用 criterion 测量当前 Rust panic 性能为 2.3814µs,较慢原因包括格式参数类型擦除、跨 crate 边界的 extern 函数等。
  • 优化 panic 处理:通过调用std::panic::resume_unwind可去掉一些逻辑,直接调用__rust_start_panic可进一步优化至 580.44ns,之后通过一系列操作恢复安全性且不影响性能至 562.69ns,再利用线程局部变量优化至 556.32ns。
  • 结论与 Lithium crate:通过一系列优化将 panic 处理速度从 2.3814µs 提升至 556.32ns,提升 4.3 倍。发布 Lithium crate 支持高效 unwind,有一些注意事项,后续将继续探索相关内容。
阅读 16
0 条评论