Skip to content

Commit d561569

Browse files
committed
---
yaml --- r: 153526 b: refs/heads/try2 c: 5ddc7b4 h: refs/heads/master v: v3
1 parent ba9b079 commit d561569

File tree

105 files changed

+778
-361
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+778
-361
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 46a3314943ad9f0aa11f4aec50ae1e8c3e27b1a6
8+
refs/heads/try2: 5ddc7b4a252fbebee5f2ac87ed755139816d6823
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/man/rustc.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ AST nodes and blocks with IDs), or flowgraph=<nodeid> (graphviz
6868
formatted flowgraph for node)
6969
.TP
7070
\fB\-\-dep-info\fR [FILENAME]
71-
Output dependency info to <filename> after compiling, in o format suitable
71+
Output dependency info to <filename> after compiling, in a format suitable
7272
for use by Makefiles.
7373
.TP
7474
\fB\-\-sysroot\fR PATH

branches/try2/mk/main.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ define SREQ_CMDS
377377
ifeq ($$(OSTYPE_$(3)),apple-darwin)
378378
LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3) := DYLD_LIBRARY_PATH
379379
else
380-
ifeq ($$(CFG_WINDOWSY_$(2)),1)
380+
ifeq ($$(CFG_WINDOWSY_$(3)),1)
381381
LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3) := PATH
382382
else
383383
LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3) := LD_LIBRARY_PATH

branches/try2/src/doc/complement-lang-faq.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ You may also be interested in browsing [GitHub's Rust][github-rust] page.
3131

3232
## Does it run on Windows?
3333

34-
Yes. All development happens in lock-step on all 3 target platforms. Using MinGW, not Cygwin. Note that the windows implementation currently has some limitations: in particular 64-bit build is [not fully supported yet][win64], and all executables created by rustc [depends on libgcc DLL at runtime][libgcc].
34+
Yes. All development happens in lock-step on all 3 target platforms. Using MinGW, not Cygwin. Note that the windows implementation currently has some limitations: in particular 64-bit build is [not fully supported yet][win64], and all executables created by rustc [depend on libgcc DLL at runtime][libgcc].
3535

3636
[win64]: https://github.com/rust-lang/rust/issues/1237
3737
[libgcc]: https://github.com/rust-lang/rust/issues/11782
@@ -68,7 +68,7 @@ Cleanup through RAII-style destructors is more likely to work than in catch bloc
6868

6969
## Why aren't modules type-parametric?
7070

71-
We want to maintain the option to parametrize at runtime. We may make eventually change this limitation, but initially this is how type parameters were implemented.
71+
We want to maintain the option to parametrize at runtime. We may eventually change this limitation, but initially this is how type parameters were implemented.
7272

7373
## Why aren't values type-parametric? Why only items?
7474

branches/try2/src/doc/guide-lifetimes.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Now we can call `compute_distance()`:
6767
# let on_the_stack : Point = Point{x: 3.0, y: 4.0};
6868
# let on_the_heap : Box<Point> = box Point{x: 7.0, y: 9.0};
6969
# fn compute_distance(p1: &Point, p2: &Point) -> f64 { 0.0 }
70-
compute_distance(&on_the_stack, on_the_heap);
70+
compute_distance(&on_the_stack, &*on_the_heap);
7171
~~~
7272

7373
Here, the `&` operator takes the address of the variable
@@ -77,10 +77,9 @@ value. We also call this _borrowing_ the local variable
7777
`on_the_stack`, because we have created an alias: that is, another
7878
name for the same data.
7979

80-
In the case of `on_the_heap`, however, no explicit action is necessary.
81-
The compiler will automatically convert a box point to a reference like &point.
82-
This is another form of borrowing; in this case, the contents of the owned box
83-
are being lent out.
80+
Likewise, in the case of `owned_box`,
81+
the `&` operator is used in conjunction with the `*` operator
82+
to take a reference to the contents of the box.
8483

8584
Whenever a caller lends data to a callee, there are some limitations on what
8685
the caller can do with the original. For example, if the contents of a

branches/try2/src/doc/guide-pointers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ fn main() {
279279
let origin = &Point { x: 0.0, y: 0.0 };
280280
let p1 = box Point { x: 5.0, y: 3.0 };
281281

282-
println!("{}", compute_distance(origin, p1));
282+
println!("{}", compute_distance(origin, &*p1));
283283
}
284284
~~~
285285

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
% The Strings Guide
2+
3+
# Strings
4+
5+
Strings are an important concept to master in any programming language. If you
6+
come from a managed language background, you may be surprised at the complexity
7+
of string handling in a systems programming language. Efficient access and
8+
allocation of memory for a dynamically sized structure involves a lot of
9+
details. Luckily, Rust has lots of tools to help us here.
10+
11+
A **string** is a sequence of unicode scalar values encoded as a stream of
12+
UTF-8 bytes. All strings are guaranteed to be validly-encoded UTF-8 sequences.
13+
Additionally, strings are not null-terminated and can contain null bytes.
14+
15+
Rust has two main types of strings: `&str` and `String`.
16+
17+
## &str
18+
19+
The first kind is a `&str`. This is pronounced a 'string slice.' String literals
20+
are of the type `&str`:
21+
22+
```{rust}
23+
let string = "Hello there.";
24+
```
25+
26+
Like any Rust type, string slices have an associated lifetime. A string literal
27+
is a `&'static str`. A string slice can be written without an explicit
28+
lifetime in many cases, such as in function arguments. In these cases the
29+
lifetime will be inferred:
30+
31+
```{rust}
32+
fn takes_slice(slice: &str) {
33+
println!("Got: {}", slice);
34+
}
35+
```
36+
37+
Like vector slices, string slices are simply a pointer plus a length. This
38+
means that they're a 'view' into an already-allocated string, such as a
39+
`&'static str` or a `String`.
40+
41+
## String
42+
43+
A `String` is a heap-allocated string. This string is growable, and is also
44+
guaranteed to be UTF-8.
45+
46+
```{rust}
47+
let mut s = "Hello".to_string();
48+
println!("{}", s);
49+
50+
s.push_str(", world.");
51+
println!("{}", s);
52+
```
53+
54+
You can coerce a `String` into a `&str` with the `as_slice()` method:
55+
56+
```{rust}
57+
fn takes_slice(slice: &str) {
58+
println!("Got: {}", slice);
59+
}
60+
61+
fn main() {
62+
let s = "Hello".to_string();
63+
takes_slice(s.as_slice());
64+
}
65+
```
66+
67+
You can also get a `&str` from a stack-allocated array of bytes:
68+
69+
```{rust}
70+
use std::str;
71+
72+
let x: &[u8] = &[b'a', b'b'];
73+
let stack_str: &str = str::from_utf8(x).unwrap();
74+
```
75+
76+
## Best Practices
77+
78+
### `String` vs. `&str`
79+
80+
In general, you should prefer `String` when you need ownership, and `&str` when
81+
you just need to borrow a string. This is very similar to using `Vec<T>` vs. `&[T]`,
82+
and `T` vs `&T` in general.
83+
84+
This means starting off with this:
85+
86+
```{rust,ignore}
87+
fn foo(s: &str) {
88+
```
89+
90+
and only moving to this:
91+
92+
```{rust,ignore}
93+
fn foo(s: String) {
94+
```
95+
96+
If you have good reason. It's not polite to hold on to ownership you don't
97+
need, and it can make your lifetimes more complex. Furthermore, you can pass
98+
either kind of string into `foo` by using `.as_slice()` on any `String` you
99+
need to pass in, so the `&str` version is more flexible.
100+
101+
### Comparisons
102+
103+
To compare a String to a constant string, prefer `as_slice()`...
104+
105+
```{rust}
106+
fn compare(string: String) {
107+
if string.as_slice() == "Hello" {
108+
println!("yes");
109+
}
110+
}
111+
```
112+
113+
... over `to_string()`:
114+
115+
```{rust}
116+
fn compare(string: String) {
117+
if string == "Hello".to_string() {
118+
println!("yes");
119+
}
120+
}
121+
```
122+
123+
Converting a `String` to a `&str` is cheap, but converting the `&str` to a
124+
`String` involves an allocation.
125+
126+
## Other Documentation
127+
128+
* [the `&str` API documentation](/std/str/index.html)
129+
* [the `String` API documentation](std/string/index.html)

branches/try2/src/doc/rust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3243,7 +3243,7 @@ enum List { Nil, Cons(uint, Box<List>) }
32433243
fn is_sorted(list: &List) -> bool {
32443244
match *list {
32453245
Nil | Cons(_, box Nil) => true,
3246-
Cons(x, ref r @ box Cons(y, _)) => (x <= y) && is_sorted(*r)
3246+
Cons(x, ref r @ box Cons(y, _)) => (x <= y) && is_sorted(&**r)
32473247
}
32483248
}
32493249

branches/try2/src/doc/tutorial.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,7 +1470,7 @@ Now we can call `compute_distance()` in various ways:
14701470
# let on_the_stack : Point = Point { x: 3.0, y: 4.0 };
14711471
# let on_the_heap : Box<Point> = box Point { x: 7.0, y: 9.0 };
14721472
# fn compute_distance(p1: &Point, p2: &Point) -> f64 { 0.0 }
1473-
compute_distance(&on_the_stack, on_the_heap);
1473+
compute_distance(&on_the_stack, &*on_the_heap);
14741474
~~~
14751475

14761476
Here the `&` operator is used to take the address of the variable
@@ -1480,11 +1480,9 @@ reference. We also call this _borrowing_ the local variable
14801480
`on_the_stack`, because we are creating an alias: that is, another
14811481
route to the same data.
14821482

1483-
In the case of `owned_box`, however, no
1484-
explicit action is necessary. The compiler will automatically convert
1485-
a box `box point` to a reference like
1486-
`&point`. This is another form of borrowing; in this case, the
1487-
contents of the owned box are being lent out.
1483+
Likewise, in the case of `owned_box`,
1484+
the `&` operator is used in conjunction with the `*` operator
1485+
to take a reference to the contents of the box.
14881486

14891487
Whenever a value is borrowed, there are some limitations on what you
14901488
can do with the original. For example, if the contents of a variable

branches/try2/src/liballoc/boxed.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl<T:PartialEq> PartialEq for Box<T> {
6767
impl<T:PartialOrd> PartialOrd for Box<T> {
6868
#[inline]
6969
fn partial_cmp(&self, other: &Box<T>) -> Option<Ordering> {
70-
(**self).partial_cmp(*other)
70+
(**self).partial_cmp(&**other)
7171
}
7272
#[inline]
7373
fn lt(&self, other: &Box<T>) -> bool { *(*self) < *(*other) }
@@ -80,7 +80,9 @@ impl<T:PartialOrd> PartialOrd for Box<T> {
8080
}
8181
impl<T: Ord> Ord for Box<T> {
8282
#[inline]
83-
fn cmp(&self, other: &Box<T>) -> Ordering { (**self).cmp(*other) }
83+
fn cmp(&self, other: &Box<T>) -> Ordering {
84+
(**self).cmp(&**other)
85+
}
8486
}
8587
impl<T: Eq> Eq for Box<T> {}
8688

branches/try2/src/libcollections/btree.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -365,12 +365,12 @@ impl<K: Clone + Ord, V: Clone> Leaf<K, V> {
365365
return (Node::new_leaf(self.clone().elts), false);
366366
}
367367
//If there is an index, insert at that index.
368-
_ => {
369-
if index.unwrap() >= self.elts.len() {
368+
Some(i) => {
369+
if i >= self.elts.len() {
370370
self.elts.push(to_insert.clone());
371371
}
372372
else {
373-
self.elts.insert(index.unwrap(), to_insert.clone());
373+
self.elts.insert(i, to_insert.clone());
374374
}
375375
}
376376
}
@@ -526,16 +526,16 @@ impl<K: Clone + Ord, V: Clone> Branch<K, V> {
526526
self.clone().rightmost_child),
527527
outcome);
528528
}
529-
_ => {
530-
if index.unwrap() == self.elts.len() {
529+
Some(i) => {
530+
if i == self.elts.len() {
531531
let new_outcome = self.clone().rightmost_child.insert(k.clone(),
532532
v.clone(),
533533
ub.clone());
534534
new_branch = new_outcome.clone().val0();
535535
outcome = new_outcome.val1();
536536
}
537537
else {
538-
let new_outcome = self.elts.get(index.unwrap()).left.clone().insert(k.clone(),
538+
let new_outcome = self.elts.get(i).left.clone().insert(k.clone(),
539539
v.clone(),
540540
ub.clone());
541541
new_branch = new_outcome.clone().val0();
@@ -547,11 +547,11 @@ impl<K: Clone + Ord, V: Clone> Branch<K, V> {
547547
//If we have a leaf, we do not need to resize the tree,
548548
//so we can return false.
549549
LeafNode(..) => {
550-
if index.unwrap() == self.elts.len() {
550+
if i == self.elts.len() {
551551
self.rightmost_child = box new_branch.clone();
552552
}
553553
else {
554-
self.elts.get_mut(index.unwrap()).left = box new_branch.clone();
554+
self.elts.get_mut(i).left = box new_branch.clone();
555555
}
556556
return (Node::new_branch(self.clone().elts,
557557
self.clone().rightmost_child),
@@ -589,13 +589,13 @@ impl<K: Clone + Ord, V: Clone> Branch<K, V> {
589589
self.clone().rightmost_child),
590590
false);
591591
}
592-
_ => {
593-
self.elts.insert(new_elt_index.unwrap(), new_elt);
594-
if new_elt_index.unwrap() + 1 >= self.elts.len() {
592+
Some(i) => {
593+
self.elts.insert(i, new_elt);
594+
if i + 1 >= self.elts.len() {
595595
self.rightmost_child = branch.clone().rightmost_child;
596596
}
597597
else {
598-
self.elts.get_mut(new_elt_index.unwrap() + 1).left =
598+
self.elts.get_mut(i + 1).left =
599599
branch.clone().rightmost_child;
600600
}
601601
}

0 commit comments

Comments
 (0)