Reserving Trait Impl's In Rust

I often find myself wanting to call a function like my_usize.try_into::<u16>(). This function (and similar) is defined in unstable rust through the TryFrom and TryInto traits. Unfortunately, stabilization of these traits is currently blocked by stabilization of the ! type, because we (the royal we) want to provide default implementations of TryFrom/TryInto that return Result<T, !> for any types that already implement From/Into. If we stabilized TryFrom/TryInto before stabilizing the ! type, then we would have to wait and add the blanket implementation later, once ! is stable. But since trait implementation specialization is not (currently) allowed, adding the blanket implementation later would be a breaking change; any crates that implemented both Into<Foo> for Bar and TryInto<Foo> for Bar, for example, would no longer compile.

Read More

Safe Partial Initialization In Rust

Say we have a struct, Foo, with multiple fields that we would like to partially initialize without resorting to using unsafe. We could write a procedural macro called PartialInit, for example, which would be invoked using derive:

Read More