Skip to content

Commit 614d6da

Browse files
committed
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.
2 parents 08e2cf8 + e2a6feb commit 614d6da

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

doc/tutorial.md

+32
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,28 @@ let mut d = @mut 5; // mutable variable, mutable box
10671067
d = @mut 15;
10681068
~~~~
10691069

1070+
A mutable variable and an immutable variable can refer to the same box, given
1071+
that their types are compatible. Mutability of a box is a property of its type,
1072+
however, so for example a mutable handle to an immutable box cannot be
1073+
assigned a reference to a mutable box.
1074+
1075+
~~~~
1076+
let a = @1; // immutable box
1077+
let b = @mut 2; // mutable box
1078+
1079+
let mut c : @int; // declare a variable with type managed immutable int
1080+
let mut d : @mut int; // and one of type managed mutable int
1081+
1082+
c = a; // box type is the same, okay
1083+
d = b; // box type is the same, okay
1084+
~~~~
1085+
1086+
~~~~ {.xfail-test}
1087+
// but b cannot be assigned to c, or a to d
1088+
c = b; // error
1089+
~~~~
1090+
1091+
10701092
# Move semantics
10711093

10721094
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
10811103
let z = x; // no new memory allocated, x can no longer be used
10821104
~~~~
10831105

1106+
Since in owned boxes mutability is a property of the owner, not the
1107+
box, mutable boxes may become immutable when they are moved, and vice-versa.
1108+
1109+
~~~~
1110+
let r = ~13;
1111+
let mut s = r; // box becomes mutable
1112+
*s += 1;
1113+
let t = s; // box becomes immutable
1114+
~~~~
1115+
10841116
# Borrowed pointers
10851117

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

0 commit comments

Comments
 (0)