-
Notifications
You must be signed in to change notification settings - Fork 39
Open
Description
(Copied from #291 (comment))
We arrange for (non-Rust) callers of our function to uphold the safety guarantees by asking them to uphold a few properties:
- We only hand out pointers to our structs that follow the rules above (aligned, initialized, etc).
- We document the lifetime requirements of those pointers.
- We provide
*constpointers for things that may have aliases. - We expect callers to never cast between types or cast away const.
- We provide
*mutpointers for things that may be mutated. This is actually an area we should tighten up. The rules for what you can do with a*mutpointer are very slightly looser than the rules for what you can do with an&mutreference. For instance, the rules are triggered on dereference of raw pointers, while the rules are triggered on mere existence for references. But because we almost always have to convert a*mutpointer to an&mutreference to call methods, we have to ask our callers to uphold the more stringent&mutrules.
https://doc.rust-lang.org/nomicon/aliasing.html
I believe it's okay for a *mut pointer to coexist with an &mut reference. It's just that an &mut reference can't coexist with an &mut reference. So it's possible our documented lifetime requirements are already fine.
Metadata
Metadata
Assignees
Labels
No labels