А что, никто не дал себе труд посмотреть к предлагаемый растокод? Там ансейф на ансейфе и ансейфом погоняет. Особенно доставляют строки вида*ptr = unsafe { ptr.sub(1) };
self.ptr = unsafe { self.ptr.add(1) };
return Err(unsafe { array::IntoIter::new_unchecked(raw_ary, 0..len) });
unsafe { &mut (*self.ptr).dev }
прошу отдельно заценить вот такое:
// SAFETY: The C contract guarantees that `buf` is valid if it's less than `end`.
let mut w = unsafe { RawFormatter::from_ptrs(buf.cast(), end.cast()) };
и
// SAFETY: Valid by the safety contract.
let iomem = unsafe { IoMem::<SIZE>::try_new(res) };
Чем это отличается от С, кроме как излишней многословностью и необходимостью тащить с собой огромый тулчейн, я не понимаю.