5 November 2024
This post floats a variation of boats’ UnpinCell proposal that I’m calling MinPin. MinPin’s goal is to integrate Pin
into the language in a “minimally disruptive” way – and in particular a way that is fully backwards compatible. Unlike Overwrite
, MinPin does not attempt to make Pin
and &mut
“play nicely” together. It does however leave the door open to add Overwrite
in the future, and I think helps to clarify the positives and negatives that Overwrite
would bring.
read more →
14 October 2024
In July, boats presented a compelling vision in their post pinned places. With the Overwrite
trait that I introduced in my previous post, however, I think we can get somewhere even more compelling, albeit at the cost of a tricky transition. As I will argue in this post, the Overwrite
trait effectively becomes a better version of the existing Unpin
trait, one that effects not only pinned references but also regular &mut
references. Through this it’s able to make Pin
fit much more seamlessly with the rest of Rust.
read more →
26 September 2024
What would you say if I told you that it was possible to (a) eliminate a lot of “inter-method borrow conflicts” without introducing something like view types and (b) make pinning easier even than boats’s pinned places proposal, all without needing pinned fields or even a pinned keyword? You’d probably say “Sounds great… what’s the catch?” The catch it requires us to change Rust’s fundamental assumption that, given x: &mut T
, you can always overwrite *x
by doing *x = /* new value */
, for any type T: Sized
. This kind of change is tricky, but not impossible, to do over an edition.
read more →