auto merge of #5721 : dhardy/rust/master, r=graydon
This is some stuff which seemed to be missing to me (though I haven't read everything yet so hope I haven't missed the relevant section). A similar addition for borrowing handles is needed, but #5720 stumped me. Comments welcome.
This commit is contained in:
commit
614d6da828
1 changed files with 32 additions and 0 deletions
|
@ -1067,6 +1067,28 @@ let mut d = @mut 5; // mutable variable, mutable box
|
||||||
d = @mut 15;
|
d = @mut 15;
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
|
A mutable variable and an immutable variable can refer to the same box, given
|
||||||
|
that their types are compatible. Mutability of a box is a property of its type,
|
||||||
|
however, so for example a mutable handle to an immutable box cannot be
|
||||||
|
assigned a reference to a mutable box.
|
||||||
|
|
||||||
|
~~~~
|
||||||
|
let a = @1; // immutable box
|
||||||
|
let b = @mut 2; // mutable box
|
||||||
|
|
||||||
|
let mut c : @int; // declare a variable with type managed immutable int
|
||||||
|
let mut d : @mut int; // and one of type managed mutable int
|
||||||
|
|
||||||
|
c = a; // box type is the same, okay
|
||||||
|
d = b; // box type is the same, okay
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
~~~~ {.xfail-test}
|
||||||
|
// but b cannot be assigned to c, or a to d
|
||||||
|
c = b; // error
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
|
||||||
# Move semantics
|
# Move semantics
|
||||||
|
|
||||||
Rust uses a shallow copy for parameter passing, assignment and returning values
|
Rust uses a shallow copy for parameter passing, assignment and returning values
|
||||||
|
@ -1081,6 +1103,16 @@ let y = x.clone(); // y is a newly allocated box
|
||||||
let z = x; // no new memory allocated, x can no longer be used
|
let z = x; // no new memory allocated, x can no longer be used
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
|
Since in owned boxes mutability is a property of the owner, not the
|
||||||
|
box, mutable boxes may become immutable when they are moved, and vice-versa.
|
||||||
|
|
||||||
|
~~~~
|
||||||
|
let r = ~13;
|
||||||
|
let mut s = r; // box becomes mutable
|
||||||
|
*s += 1;
|
||||||
|
let t = s; // box becomes immutable
|
||||||
|
~~~~
|
||||||
|
|
||||||
# Borrowed pointers
|
# Borrowed pointers
|
||||||
|
|
||||||
Rust's borrowed pointers are a general purpose reference type. In contrast with
|
Rust's borrowed pointers are a general purpose reference type. In contrast with
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue