Hasty Briefsbeta

双语

Writing into Uninitialized Buffers in Rust

a year ago
  • #Rust
  • #Systems Programming
  • #Memory Safety
  • Rust 中未初始化的缓冲区长期以来一直是一个热门话题,引发了各种讨论和提案。
  • John Nunley 和 Alex Saveau 提出了一种使用 `Buffer` trait 的新方法,该特性现已成为 rustix 1.0 的一部分。
  • `Buffer` trait 允许安全地读取未初始化的缓冲区,支持 `&mut [T]`、`&mut [MaybeUninit<T>]` 和 `Vec` 的备用容量。
  • 该 trait 包含 `parts_mut` 和 `assume_init` 等方法,用于安全地管理缓冲区操作。
  • 将 `Buffer` 与 `Vec` 备用容量结合使用,封装了不安全的 `Vec::set_len` 调用,从而提高了安全性。
  • `Buffer` trait 在 `T` 上是泛型的,使其不仅限于字节操作,还可用于如 `epoll::wait` 中的事件记录等场景。
  • `Buffer` trait 的错误信息可能不够直观,因此 rustix 更新了相关文档。
  • 讨论了一种使用 `Cursor` API 的潜在安全替代方案,其灵感来自 `BorrowedCursor`。
  • `Buffer` trait 的设计避免了 `BorrowedBuf` 双游标模式的复杂性。
  • `buffer-trait` 库现已作为该理念的独立实现提供。