Skip to content

Commit

Permalink
Tutorial: comment on how mutability applies to boxes
Browse files Browse the repository at this point in the history
  • Loading branch information
Diggory Hardy committed Apr 4, 2013
1 parent cb91e91 commit 964fc86
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions doc/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -1067,6 +1067,26 @@ let mut d = @mut 5; // mutable variable, mutable box
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 hande 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
d = b; // box type is the same
// but b cannot be assigned to c, or a to d
c = b; // error
~~~~


# Move semantics

Rust uses a shallow copy for parameter passing, assignment and returning values
Expand All @@ -1081,6 +1101,16 @@ let y = x.clone(); // y is a newly allocated box
let z = x; // no new memory allocated, x can no longer be used
~~~~

Since in owned boxes mutabilility 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

Rust's borrowed pointers are a general purpose reference type. In contrast with
Expand Down

0 comments on commit 964fc86

Please sign in to comment.