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` 库现已作为该理念的独立实现提供。