X-Git-Url: https://git.ralfj.de/web.git/blobdiff_plain/c05e566e4adf175e810e37b67b7b5819f5fed3b5..351dcf54d4afe8ff5baa83672d36531c0d3e901a:/personal/_posts/2018-11-16-stacked-borrows-implementation.md?ds=sidebyside diff --git a/personal/_posts/2018-11-16-stacked-borrows-implementation.md b/personal/_posts/2018-11-16-stacked-borrows-implementation.md index 211d21d..f8f4950 100644 --- a/personal/_posts/2018-11-16-stacked-borrows-implementation.md +++ b/personal/_posts/2018-11-16-stacked-borrows-implementation.md @@ -1,6 +1,7 @@ --- title: "Stacked Borrows Implemented" categories: internship rust +forum: https://internals.rust-lang.org/t/stacked-borrows-implemented/8847 --- Three months ago, I proposed [Stacked Borrows]({% post_url @@ -568,7 +569,7 @@ code: {% highlight rust %} fn demo_refcell() { - let rc = &mut RefCell::new(23u8); + let rc: &mut RefCell = &mut RefCell::new(23u8); Retag(rc); // tag gets changed to `Uniq(0)` // We will consider the stack of the location where `23` is stored; the // `RefCell` bookkeeping counters are not of interest. @@ -576,22 +577,22 @@ fn demo_refcell() { // Taking a shared reference shares the location but does not freeze, due // to the `UnsafeCell`. - let rc_shr = &*rc; + let rc_shr: &RefCell = &*rc; Retag(rc_shr); // tag gets changed to `Shr(Some(1))` // stack: [Uniq(0), Shr]; not frozen // Lots of stuff happens here but it does not matter for this example. - let mut bmut = rc_shr.borrow_mut(); + let mut bmut: RefMut = rc_shr.borrow_mut(); // Obtain a mutable reference into the `RefCell`. - let mut_ref = &mut *bmut; + let mut_ref: &mut u8 = &mut *bmut; Retag(mut_ref); // tag gets changed to `Uniq(2)` // stack: [Uniq(0), Shr, Uniq(2)]; not frozen // And at the same time, a fresh shared reference to its outside! // This counts as a read access through `rc`, so we have to pop until // at least a `Shr` is at the top of the stack. - let shr_ref = &*rc; // tag gets changed to `Shr(Some(3))` + let shr_ref: &RefCell = &*rc; // tag gets changed to `Shr(Some(3))` Retag(shr_ref); // stack: [Uniq(0), Shr]; not frozen @@ -907,5 +908,11 @@ significantly reduce my Rust activities in favor of finishing my PhD. I won't disappear entirely though, don't worry -- I will still be able to mentor you if you want to help with any of the above tasks. :) -Thanks to @nikomatsakis for feedback on a draft of this post. - +Thanks to @nikomatsakis for feedback on a draft of this post, to @shepmaster for +making miri available on the playground, and to @oli-obk for reviewing all my +PRs at unparalleled speed. <3 + +If you want to +help or report results of your experiments, if you have any questions or +comments, please join the +[discussion in the forums](https://internals.rust-lang.org/t/stacked-borrows-implemented/8847).