Update ownership.md for clarity

made the language around immutable target of references more direct
pull/428/head
George 11 months ago committed by GitHub
parent 1842257814
commit 9bc792900f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -41,9 +41,9 @@ be forced to accept your program on the assumption that it is correct.
This will never happen to Rust. It's up to the programmer to prove to the This will never happen to Rust. It's up to the programmer to prove to the
compiler that everything is sound. compiler that everything is sound.
Of course, Rust's story around ownership is much more complicated than just Of course, Rust's story around ownership is much more complicated than simply
verifying that references don't escape the scope of their referent. That's gauranteeing that references cannot outlive their target. That is
because ensuring pointers are always valid is much more complicated than this. because ensuring pointers are always valid in the general case is much more complicated.
For instance in this code, For instance in this code,
```rust,compile_fail ```rust,compile_fail
@ -59,7 +59,10 @@ data.push(4);
println!("{}", x); println!("{}", x);
``` ```
naive scope analysis would be insufficient to prevent this bug, because `data` a naive scope analysis would be insufficient to prevent this bug because `data`
does in fact live as long as we needed. However it was *changed* while we had does indeed live as long as required. However, `data` is *changed* by `push(4)`
a reference into it. This is why Rust requires any references to freeze the and now may have been realocated to accommodate the new value.
referent and its owners. Consequently, `x` may now be referring to the old
value or memory already put to use in another process (pre-emptive multi-tasking).
This is why Rust requires the code to also treat the target as frozen; and so,
will refuse the expression, `data.push(4)`.

Loading…
Cancel
Save