This is about Rust, but it’s a great post and likely relevant to languages with Rust-style ownership. It describes four features planned for Rust to make its borrow checker more expressive and permissive:
- Allow a function to return a reference in one branch of a conditional and not consider it “borrowed” in the other branch (this is supported by the new borrow checker, Polonius, which should be in stable Rust very soon).
- Allow “place” lifetimes; that is, lifetimes that refer to other variables or their fields (e.g.
'foo.bar
is a lifetime that, when attached to a reference, means the reference is borrowingfoo.bar
or some data within it). - View types and inter-procedural AKA “partial” borrows: define a function that can only borrow specific fields in a structure, so that the function can be called with a structure whose other fields (at the call-site) are mutably borrowed or moved.
- Self-referential structures: structures where one field borrows another owned field (e.g.
Foo { foo: String, bar: &'self.foo str }
,foo
is owned andbar
borrows from it). Crates like self_cell and ouroboros provide this feature, but the goal is to have it in safe Rust with a cleaner syntax.
You must log in or # to comment.