google/comprehensive-rust

Non-lexical lifetimes on exclusive reference

redentis opened this issue · 1 comments

The page talking about "Exclusive References" has the following in the speaker notes:

No other references (shared or exclusive) can exist at the same time, and the referenced value cannot be accessed while the exclusive reference exists. Try making an &point.0 or changing point.0 while x_coord is alive.

I experimented with this on the Rust Playground (see https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=09cab9831d130e6532b11e0b1253153f) and was confused when I could make another reference to &point.0 and I could modify point.0. My confusion was caused by (mis-)understanding that the x_coord reference has block scope.

Non-lexical scoping was introduced in August 2022 / rust 1.63 so this isn't a cutting edge concept or implementation in July 2024.

Maybe reference scoping is complex enough that it need a dedicated page rather than an update on the exclusive references page?

We talk about NLL in https://google.github.io/comprehensive-rust/borrowing/borrowck.html?highlight=lexical

This is one of the places that the course tries to be circular -- the slide you link to is the first "pass" on this topic, and we circle back a few times, including in the "borrow check" slide.

Perhaps:

  • Add a speaker note to the "Exclusive References" slide that Rust is "smart" about when a reference is used, perhaps expanding the text "while x_coord is alive". For the moment, this can be "magic" and reference further explanation later in the course.
  • Fill out a little more detail in the "borrow check" slide.