Тут увидел симпатичный PR в Rust-for-Linux: https://github.com/Rust-for-Linux/linux/pull/402
Общий смысл: переписали alloc, что бы он не паниковал на каждый чих. Переходят на стабильный компилятор.
Немного примеров:
for _ in 0..page_count {
let page = Pages::<0>::new()?;
page.insert_page(vma, address)?;
- pages.push(page);
+ pages.try_push(page)?;
address += 1 << bindings::PAGE_SHIFT;
}
- // TODO: This allocates memory.
- let arc = Arc::from(pages);
+ let arc = Arc::try_from_vec(pages)?;
// Save pages for later.
let mut inner = self.inner.lock();
fn read_all(&mut self) -> Result<Vec<u8>> {
let mut data = Vec::<u8>::new();
- data.try_reserve_exact(self.len())?;
- data.resize(self.len(), 0);
+ data.try_resize(self.len(), 0)?;
// SAFETY: The output buffer is valid as we just allocated it.
unsafe { self.read_raw(data.as_mut_ptr(), data.len())? };
Надеются на слияние в 5.14