Skip to content

Commit 349aeba

Browse files
committed
---
yaml --- r: 185677 b: refs/heads/auto c: 72eaf2c h: refs/heads/master i: 185675: 6cd61ea v: v3
1 parent 8663e63 commit 349aeba

Some content is hidden

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

63 files changed

+863
-1765
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1010
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1111
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1212
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
13-
refs/heads/auto: 26180e9940ea349fbe62ef53b7f737679bb4a970
13+
refs/heads/auto: 72eaf2c30e846b3d14c520c0c7638b2b16bf8c73
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ To contribute to Rust, please see [CONTRIBUTING.md](CONTRIBUTING.md).
111111
Rust has an [IRC] culture and most real-time collaboration happens in a
112112
variety of channels on Mozilla's IRC network, irc.mozilla.org. The
113113
most popular channel is [#rust], a venue for general discussion about
114-
Rust, and a good place to ask for help.
114+
Rust, and a good place to ask for help,
115115

116116
[IRC]: https://en.wikipedia.org/wiki/Internet_Relay_Chat
117117
[#rust]: irc://irc.mozilla.org/rust

branches/auto/src/compiletest/compiletest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
268268
logfile: config.logfile.clone(),
269269
run_tests: true,
270270
run_benchmarks: true,
271-
nocapture: env::var("RUST_TEST_NOCAPTURE").is_ok(),
271+
nocapture: false,
272272
color: test::AutoColor,
273273
}
274274
}

branches/auto/src/compiletest/errors.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub fn load_errors(testfile: &Path) -> Vec<ExpectedError> {
5858
fn parse_expected(last_nonfollow_error: Option<uint>,
5959
line_num: uint,
6060
line: &str) -> Option<(WhichLine, ExpectedError)> {
61-
let start = match line.find("//~") { Some(i) => i, None => return None };
61+
let start = match line.find_str("//~") { Some(i) => i, None => return None };
6262
let (follow, adjusts) = if line.char_at(start + 3) == '|' {
6363
(true, 0)
6464
} else {

branches/auto/src/compiletest/header.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use std::env;
12-
1311
use common::Config;
1412
use common;
1513
use util;
@@ -127,16 +125,6 @@ pub fn load_props(testfile: &Path) -> TestProps {
127125
true
128126
});
129127

130-
for key in vec!["RUST_TEST_NOCAPTURE", "RUST_TEST_TASKS"] {
131-
match env::var(key) {
132-
Ok(val) =>
133-
if exec_env.iter().find(|&&(ref x, _)| *x == key.to_string()).is_none() {
134-
exec_env.push((key.to_string(), val))
135-
},
136-
Err(..) => {}
137-
}
138-
}
139-
140128
TestProps {
141129
error_patterns: error_patterns,
142130
compile_flags: compile_flags,
@@ -342,7 +330,7 @@ fn parse_name_directive(line: &str, directive: &str) -> bool {
342330
pub fn parse_name_value_directive(line: &str, directive: &str)
343331
-> Option<String> {
344332
let keycolon = format!("{}:", directive);
345-
match line.find(&keycolon) {
333+
match line.find_str(&keycolon) {
346334
Some(colon) => {
347335
let value = line[(colon + keycolon.len()) .. line.len()].to_string();
348336
debug!("{}: {}", directive, value);

branches/auto/src/compiletest/runtest.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ fn check_debugger_output(debugger_run_result: &ProcRes, check_lines: &[String])
847847
check_lines.iter().map(|s| {
848848
s
849849
.trim()
850-
.split("[...]")
850+
.split_str("[...]")
851851
.map(|x| x.to_string())
852852
.collect()
853853
}).collect();
@@ -866,7 +866,7 @@ fn check_debugger_output(debugger_run_result: &ProcRes, check_lines: &[String])
866866
None
867867
}
868868
} else {
869-
rest.find(frag)
869+
rest.find_str(frag)
870870
};
871871
match found {
872872
None => {

branches/auto/src/doc/intro.md

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -426,33 +426,39 @@ use std::thread::Thread;
426426
fn main() {
427427
let mut numbers = vec![1, 2, 3];
428428
429-
let guards: Vec<_> = (0..3).map(|i| {
430-
Thread::scoped(move || {
429+
for i in 0..3 {
430+
Thread::spawn(move || {
431431
for j in 0..3 { numbers[j] += 1 }
432432
});
433-
}).collect();
433+
}
434434
}
435435
```
436436
437437
It gives us this error:
438438
439439
```text
440-
7:29: 9:10 error: cannot move out of captured outer variable in an `FnMut` closure
441-
7 Thread::scoped(move || {
442-
8 for j in 0..3 { numbers[j] += 1 }
443-
9 });
440+
6:71 error: capture of moved value: `numbers`
441+
for j in 0..3 { numbers[j] += 1 }
442+
^~~~~~~
443+
7:50 note: `numbers` moved into closure environment here
444+
spawn(move || {
445+
for j in 0..3 { numbers[j] += 1 }
446+
});
447+
6:79 error: cannot assign to immutable dereference (dereference is implicit, due to indexing)
448+
for j in 0..3 { numbers[j] += 1 }
449+
^~~~~~~~~~~~~~~
444450
```
445451
446-
It mentions that "captured outer variable in an `FnMut` closure".
447-
Because we declared the closure as a moving closure, and it referred
448-
to `numbers`, the closure will try to take ownership of the
449-
vector. But the closure itself is created in a loop, and hence we will
450-
actually create three closures, one for every iteration of the
451-
loop. This means that all three of those closures would try to own
452-
`numbers`, which is impossible -- `numbers` must have just one
453-
owner. Rust detects this and gives us the error: we claim that
454-
`numbers` has ownership, but our code tries to make three owners. This
455-
may cause a safety problem, so Rust disallows it.
452+
It mentions that "numbers moved into closure environment". Because we
453+
declared the closure as a moving closure, and it referred to
454+
`numbers`, the closure will try to take ownership of the vector. But
455+
the closure itself is created in a loop, and hence we will actually
456+
create three closures, one for every iteration of the loop. This means
457+
that all three of those closures would try to own `numbers`, which is
458+
impossible -- `numbers` must have just one owner. Rust detects this
459+
and gives us the error: we claim that `numbers` has ownership, but our
460+
code tries to make three owners. This may cause a safety problem, so
461+
Rust disallows it.
456462
457463
What to do here? Rust has two types that helps us: `Arc<T>` and `Mutex<T>`.
458464
*Arc* stands for "atomically reference counted". In other words, an Arc will
@@ -474,14 +480,14 @@ use std::sync::{Arc,Mutex};
474480
fn main() {
475481
let numbers = Arc::new(Mutex::new(vec![1, 2, 3]));
476482
477-
let guards: Vec<_> = (0..3).map(|i| {
483+
for i in 0..3 {
478484
let number = numbers.clone();
479-
Thread::scoped(move || {
485+
Thread::spawn(move || {
480486
let mut array = number.lock().unwrap();
481487
array[i] += 1;
482488
println!("numbers[{}] is {}", i, array[i]);
483489
});
484-
}).collect();
490+
}
485491
}
486492
```
487493
@@ -510,10 +516,8 @@ numbers[1] is 3
510516
numbers[0] is 2
511517
```
512518
513-
Each time, we can get a slithtly different output because the threads
514-
are not quaranteed to run in any set order. If you get the same order
515-
every time it is because each of these threads are very small and
516-
complete too fast for their indeterminate behavior to surface.
519+
Each time, we get a slightly different output, because each thread works in a
520+
different order. You may not get the same output as this sample, even.
517521
518522
The important part here is that the Rust compiler was able to use ownership to
519523
give us assurance _at compile time_ that we weren't doing something incorrect
@@ -535,13 +539,13 @@ safety check that makes this an error about moved values:
535539
use std::thread::Thread;
536540
537541
fn main() {
538-
let numbers = vec![1, 2, 3];
539-
540-
let guards: Vec<_> = (0..3).map(|i| {
541-
Thread::scoped(move || {
542-
println!("{}", numbers[i]);
542+
let vec = vec![1, 2, 3];
543+
544+
for i in 0..3 {
545+
Thread::spawn(move || {
546+
println!("{}", vec[i]);
543547
});
544-
}).collect();
548+
}
545549
}
546550
```
547551

branches/auto/src/doc/reference.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,6 @@ This last example is different because it is not possible to use the suffix
515515
syntax with a floating point literal ending in a period. `2.f64` would attempt
516516
to call a method named `f64` on `2`.
517517

518-
The representation semantics of floating-point numbers are described in
519-
["Machine Types"](#machine-types).
520-
521518
#### Boolean literals
522519

523520
The two values of the boolean type are written `true` and `false`.

branches/auto/src/doc/trpl/crates-and-modules.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Rust has two distinct terms that relate to the module system: *crate* and
1212
*module*. A crate is synonymous with a *library* or *package* in other
1313
languages. Hence "Cargo" as the name of Rust's package management tool: you
1414
ship your crates to others with Cargo. Crates can produce an executable or a
15-
library, depending on the project.
15+
shared library, depending on the project.
1616

1717
Each crate has an implicit *root module* that contains the code for that crate.
1818
You can then define a tree of sub-modules under that root module. Modules allow

branches/auto/src/doc/trpl/iterators.md

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ for i in 0..nums.len() {
5757
}
5858
```
5959

60-
This is strictly worse than using an actual iterator. The `.iter()` method on
61-
vectors returns an iterator which iterates through a reference to each element
62-
of the vector in turn. So write this:
60+
This is strictly worse than using an actual iterator. You can iterate over vectors
61+
directly, so write this:
6362

6463
```rust
6564
let nums = vec![1, 2, 3];
6665

67-
for num in nums.iter() {
66+
for num in &nums {
6867
println!("{}", num);
6968
}
7069
```
@@ -86,16 +85,17 @@ see it. This code works fine too:
8685
```rust
8786
let nums = vec![1, 2, 3];
8887

89-
for num in nums.iter() {
88+
for num in &nums {
9089
println!("{}", *num);
9190
}
9291
```
9392

94-
Now we're explicitly dereferencing `num`. Why does `iter()` give us references?
95-
Well, if it gave us the data itself, we would have to be its owner, which would
96-
involve making a copy of the data and giving us the copy. With references,
97-
we're just borrowing a reference to the data, and so it's just passing
98-
a reference, without needing to do the copy.
93+
Now we're explicitly dereferencing `num`. Why does `&nums` give us
94+
references? Because we asked it to with `&`. If we had not had the
95+
`&`, `nums` would have been moved into the `for` loop and consumed,
96+
and we we would no longer be able to access `nums` afterward. With
97+
references, we're just borrowing a reference to the data, and so it's
98+
just passing a reference, without needing to do the move.
9999

100100
So, now that we've established that ranges are often not what you want, let's
101101
talk about what you do want instead.
@@ -230,9 +230,9 @@ let nums = (1..100).collect::<Vec<i32>>();
230230
Now, `collect()` will require that the range gives it some numbers, and so
231231
it will do the work of generating the sequence.
232232

233-
Ranges are one of two basic iterators that you'll see. The other is `iter()`,
234-
which you've used before. `iter()` can turn a vector into a simple iterator
235-
that gives you each element in turn:
233+
Ranges are one of two basic iterators that you'll see. The other is `iter()`.
234+
`iter()` can turn a vector into a simple iterator that gives you each element
235+
in turn:
236236

237237
```rust
238238
let nums = [1, 2, 3];
@@ -242,6 +242,9 @@ for num in nums.iter() {
242242
}
243243
```
244244

245+
Sometimes you need this functionality, but since for loops operate on the
246+
`IntoIterator` trait, calling `.iter()` is rarely necessary.
247+
245248
These two basic iterators should serve you well. There are some more
246249
advanced iterators, including ones that are infinite. Like `count`:
247250

branches/auto/src/doc/trpl/more-strings.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ string literal or a `String`.
3838

3939
# String
4040

41-
A `String` is a heap-allocated string. This string is growable, and is
42-
also guaranteed to be UTF-8. `String`s are commonly created by
43-
converting from a string slice using the `to_string` method.
41+
A `String` is a heap-allocated string. This string is growable, and is also
42+
guaranteed to be UTF-8.
4443

4544
```
4645
let mut s = "Hello".to_string();
@@ -50,7 +49,7 @@ s.push_str(", world.");
5049
println!("{}", s);
5150
```
5251

53-
A reference to a `String` will automatically coerce to a string slice:
52+
You can coerce a `String` into a `&str` by dereferencing it:
5453

5554
```
5655
fn takes_slice(slice: &str) {
@@ -59,7 +58,7 @@ fn takes_slice(slice: &str) {
5958
6059
fn main() {
6160
let s = "Hello".to_string();
62-
takes_slice(&s);
61+
takes_slice(&*s);
6362
}
6463
```
6564

branches/auto/src/doc/trpl/static-and-dynamic-dispatch.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,10 @@ fn main() {
7979
}
8080
```
8181

82-
This has a great upside: static dispatch allows function calls to be
83-
inlined because the callee is known at compile time, and inlining is
84-
the key to good optimization. Static dispatch is fast, but it comes at
85-
a tradeoff: 'code bloat', due to many copies of the same function
86-
existing in the binary, one for each type.
82+
This has some upsides: static dispatching of any method calls, allowing for
83+
inlining and hence usually higher performance. It also has some downsides:
84+
causing code bloat due to many copies of the same function existing in the
85+
binary, one for each type.
8786

8887
Furthermore, compilers aren’t perfect and may “optimize” code to become slower.
8988
For example, functions inlined too eagerly will bloat the instruction cache

branches/auto/src/doc/trpl/strings.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@ compiled program, and exists for the entire duration it runs. The `string`
2525
binding is a reference to this statically allocated string. String slices
2626
have a fixed size, and cannot be mutated.
2727

28-
A `String`, on the other hand, is a heap-allocated string. This string
29-
is growable, and is also guaranteed to be UTF-8. `String`s are
30-
commonly created by converting from a string slice using the
31-
`to_string` method.
28+
A `String`, on the other hand, is an in-memory string. This string is
29+
growable, and is also guaranteed to be UTF-8.
3230

3331
```{rust}
3432
let mut s = "Hello".to_string(); // mut s: String

0 commit comments

Comments
 (0)