News for hackers. Stuff that matters.
Re:Rusty Ownership and the Lifecycle’s Stone by estebank on Sunday November 27, 2022 @12:54PM (#33764934)
> There are some APIs like this but last time I checked they didn’t cover all usecases.

This refers to[1]

    <&mut [T]>::split_at_mut(usize) -> (&mut [T], &mut [T])`
used as

    let (first_42, rest) = mutable_slice.split_at_mut(42);
but you can see that the inner logic is just a bit of pointer twiddling[2]

        let len = self.len();
        let ptr = self.as_ptr();

        // SAFETY: Caller has to check that `0 <= mid <= self.len()`
        unsafe { (from_raw_parts(ptr, mid), from_raw_parts(ptr.add(mid), len - mid)) }

[1]: https://doc.rust-lang.org/std/primitive.slice.html#method.sp...

[2]: https://doc.rust-lang.org/src/core/slice/mod.rs.html#1641-16...

Re:Rusty Ownership and the Lifecycle’s Stone by loeg on Sunday November 27, 2022 @02:01PM (#33765565)
Yes, exactly. I was using this for zero-copy serialization into a buffer. At the time, I don’t believe that API had been stabilized yet.
Re:Rusty Ownership and the Lifecycle’s Stone by estebank on Sunday November 27, 2022 @02:17PM (#33765720)
That method has been around since 1.0 (as documented in the source code). Were you using Rust before 2015? If so, a lot has changed :)
Re:Rusty Ownership and the Lifecycle’s Stone by loeg on Sunday November 27, 2022 @03:08PM (#33766286)
No, post-1.0. I don't remember exactly why I had to roll my own with unsafe, but it was essentially the same thing.