Skip to content

Commit caf17a6

Browse files
committed
---
yaml --- r: 192246 b: refs/heads/master c: c608084 h: refs/heads/master v: v3
1 parent e06ff9a commit caf17a6

File tree

188 files changed

+3285
-1080
lines changed

Some content is hidden

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

188 files changed

+3285
-1080
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 8c93a79e387f5197e8b8fe73b3d87d2b101b7c4a
2+
refs/heads/master: c608084ff595c9c31e78ad3cde07093e68ee1848
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: a923278c6278c63468d74772c58dbf788e88f58c
55
refs/heads/try: ce76bff75603a754d092456285ff455eb871633d

trunk/configure

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -479,10 +479,19 @@ esac
479479
# Detect 64 bit linux systems with 32 bit userland and force 32 bit compilation
480480
if [ $CFG_OSTYPE = unknown-linux-gnu -a $CFG_CPUTYPE = x86_64 ]
481481
then
482-
file -L "$SHELL" | grep -q "x86[_-]64"
483-
if [ $? != 0 ]; then
484-
CFG_CPUTYPE=i686
482+
# $SHELL does not exist in standard 'sh', so probably only exists
483+
# if configure is running in an interactive bash shell. /usr/bin/env
484+
# exists *everywhere*.
485+
BIN_TO_PROBE="$SHELL"
486+
if [ -z "$BIN_TO_PROBE" -a -e "/usr/bin/env" ]; then
487+
BIN_TO_PROBE="/usr/bin/env"
485488
fi
489+
if [ -n "$BIN_TO_PROBE" ]; then
490+
file -L "$BIN_TO_PROBE" | grep -q "x86[_-]64"
491+
if [ $? != 0 ]; then
492+
CFG_CPUTYPE=i686
493+
fi
494+
fi
486495
fi
487496

488497

trunk/src/compiletest/compiletest.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#![feature(std_misc)]
2121
#![feature(test)]
2222
#![feature(path_ext)]
23+
#![feature(convert)]
2324
#![feature(str_char)]
2425

2526
#![deny(warnings)]
@@ -116,7 +117,7 @@ pub fn parse_config(args: Vec<String> ) -> Config {
116117

117118
fn opt_path(m: &getopts::Matches, nm: &str) -> PathBuf {
118119
match m.opt_str(nm) {
119-
Some(s) => PathBuf::new(&s),
120+
Some(s) => PathBuf::from(&s),
120121
None => panic!("no option (=path) found for {}", nm),
121122
}
122123
}
@@ -131,18 +132,18 @@ pub fn parse_config(args: Vec<String> ) -> Config {
131132
compile_lib_path: matches.opt_str("compile-lib-path").unwrap(),
132133
run_lib_path: matches.opt_str("run-lib-path").unwrap(),
133134
rustc_path: opt_path(matches, "rustc-path"),
134-
clang_path: matches.opt_str("clang-path").map(|s| PathBuf::new(&s)),
135+
clang_path: matches.opt_str("clang-path").map(|s| PathBuf::from(&s)),
135136
valgrind_path: matches.opt_str("valgrind-path"),
136137
force_valgrind: matches.opt_present("force-valgrind"),
137-
llvm_bin_path: matches.opt_str("llvm-bin-path").map(|s| PathBuf::new(&s)),
138+
llvm_bin_path: matches.opt_str("llvm-bin-path").map(|s| PathBuf::from(&s)),
138139
src_base: opt_path(matches, "src-base"),
139140
build_base: opt_path(matches, "build-base"),
140141
aux_base: opt_path(matches, "aux-base"),
141142
stage_id: matches.opt_str("stage-id").unwrap(),
142143
mode: matches.opt_str("mode").unwrap().parse().ok().expect("invalid mode"),
143144
run_ignored: matches.opt_present("ignored"),
144145
filter: filter,
145-
logfile: matches.opt_str("logfile").map(|s| PathBuf::new(&s)),
146+
logfile: matches.opt_str("logfile").map(|s| PathBuf::from(&s)),
146147
runtool: matches.opt_str("runtool"),
147148
host_rustcflags: matches.opt_str("host-rustcflags"),
148149
target_rustcflags: matches.opt_str("target-rustcflags"),

trunk/src/compiletest/header.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,10 @@ fn parse_exec_env(line: &str) -> Option<(String, String)> {
328328

329329
fn parse_pp_exact(line: &str, testfile: &Path) -> Option<PathBuf> {
330330
match parse_name_value_directive(line, "pp-exact") {
331-
Some(s) => Some(PathBuf::new(&s)),
331+
Some(s) => Some(PathBuf::from(&s)),
332332
None => {
333333
if parse_name_directive(line, "pp-exact") {
334-
testfile.file_name().map(|s| PathBuf::new(s))
334+
testfile.file_name().map(|s| PathBuf::from(s))
335335
} else {
336336
None
337337
}

trunk/src/compiletest/runtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1440,7 +1440,7 @@ fn aux_output_dir_name(config: &Config, testfile: &Path) -> PathBuf {
14401440
}
14411441

14421442
fn output_testname(testfile: &Path) -> PathBuf {
1443-
PathBuf::new(testfile.file_stem().unwrap())
1443+
PathBuf::from(testfile.file_stem().unwrap())
14441444
}
14451445

14461446
fn output_base_name(config: &Config, testfile: &Path) -> PathBuf {

trunk/src/doc/intro.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -446,16 +446,16 @@ It gives us this error:
446446
error: aborting due to previous error
447447
```
448448
449-
It mentions that "captured outer variable in an `FnMut` closure".
450-
Because we declared the closure as a moving closure, and it referred
451-
to `numbers`, the closure will try to take ownership of the
452-
vector. But the closure itself is created in a loop, and hence we will
453-
actually create three closures, one for every iteration of the
454-
loop. This means that all three of those closures would try to own
455-
`numbers`, which is impossible -- `numbers` must have just one
456-
owner. Rust detects this and gives us the error: we claim that
457-
`numbers` has ownership, but our code tries to make three owners. This
458-
may cause a safety problem, so Rust disallows it.
449+
This is a little confusing because there are two closures here: the one passed
450+
to `map`, and the one passed to `thread::scoped`. In this case, the closure for
451+
`thread::scoped` is attempting to reference `numbers`, a `Vec<i32>`. This
452+
closure is a `FnOnce` closure, as that’s what `thread::scoped` takes as an
453+
argument. `FnOnce` closures take ownership of their environment. That’s fine,
454+
but there’s one detail: because of `map`, we’re going to make three of these
455+
closures. And since all three try to take ownership of `numbers`, that would be
456+
a problem. That’s what it means by ‘cannot move out of captured outer
457+
variable’: our `thread::scoped` closure wants to take ownership, and it can’t,
458+
because the closure for `map` won’t let it.
459459
460460
What to do here? Rust has two types that helps us: `Arc<T>` and `Mutex<T>`.
461461
*Arc* stands for "atomically reference counted". In other words, an Arc will

trunk/src/doc/trpl/compound-data-types.md

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ This pattern is very powerful, and we'll see it repeated more later.
4747

4848
There are also a few things you can do with a tuple as a whole, without
4949
destructuring. You can assign one tuple into another, if they have the same
50-
contained types and arity. Tuples have the same arity when they have the same
50+
contained types and [arity]. Tuples have the same arity when they have the same
5151
length.
5252

5353
```rust
@@ -196,8 +196,9 @@ Now, we have actual names, rather than positions. Good names are important,
196196
and with a struct, we have actual names.
197197

198198
There _is_ one case when a tuple struct is very useful, though, and that's a
199-
tuple struct with only one element. We call this a *newtype*, because it lets
200-
you create a new type that's similar to another one:
199+
tuple struct with only one element. We call this the *newtype* pattern, because
200+
it allows you to create a new type, distinct from that of its contained value
201+
and expressing its own semantic meaning:
201202

202203
```{rust}
203204
struct Inches(i32);
@@ -216,7 +217,7 @@ destructuring `let`, as we discussed previously in 'tuples.' In this case, the
216217

217218
Finally, Rust has a "sum type", an *enum*. Enums are an incredibly useful
218219
feature of Rust, and are used throughout the standard library. An `enum` is
219-
a type which ties a set of alternates to a specific name. For example, below
220+
a type which relates a set of alternates to a specific name. For example, below
220221
we define `Character` to be either a `Digit` or something else. These
221222
can be used via their fully scoped names: `Character::Other` (more about `::`
222223
below).
@@ -228,8 +229,8 @@ enum Character {
228229
}
229230
```
230231

231-
An `enum` variant can be defined as most normal types. Below are some example
232-
types which also would be allowed in an `enum`.
232+
Most normal types are allowed as the variant components of an `enum`. Here are
233+
some examples:
233234

234235
```rust
235236
struct Empty;
@@ -239,15 +240,15 @@ struct Status { Health: i32, Mana: i32, Attack: i32, Defense: i32 }
239240
struct HeightDatabase(Vec<i32>);
240241
```
241242

242-
So you see that depending on the sub-datastructure, the `enum` variant, same as
243-
a struct, may or may not hold data. That is, in `Character`, `Digit` is a name
244-
tied to an `i32` where `Other` is just a name. However, the fact that they are
245-
distinct makes this very useful.
243+
You see that, depending on its type, an `enum` variant may or may not hold data.
244+
In `Character`, for instance, `Digit` gives a meaningful name for an `i32`
245+
value, where `Other` is only a name. However, the fact that they represent
246+
distinct categories of `Character` is a very useful property.
246247

247-
As with structures, enums don't by default have access to operators such as
248-
compare ( `==` and `!=`), binary operations (`*` and `+`), and order
249-
(`<` and `>=`). As such, using the previous `Character` type, the
250-
following code is invalid:
248+
As with structures, the variants of an enum by default are not comparable with
249+
equality operators (`==`, `!=`), have no ordering (`<`, `>=`, etc.), and do not
250+
support other binary operations such as `*` and `+`. As such, the following code
251+
is invalid for the example `Character` type:
251252

252253
```{rust,ignore}
253254
// These assignments both succeed
@@ -265,9 +266,10 @@ let four_equals_ten = four == ten;
265266
```
266267

267268
This may seem rather limiting, but it's a limitation which we can overcome.
268-
There are two ways: by implementing equality ourselves, or by using the
269-
[`match`][match] keyword. We don't know enough about Rust to implement equality
270-
yet, but we can use the `Ordering` enum from the standard library, which does:
269+
There are two ways: by implementing equality ourselves, or by pattern matching
270+
variants with [`match`][match] expressions, which you'll learn in the next
271+
chapter. We don't know enough about Rust to implement equality yet, but we can
272+
use the `Ordering` enum from the standard library, which does:
271273

272274
```
273275
enum Ordering {
@@ -277,9 +279,8 @@ enum Ordering {
277279
}
278280
```
279281

280-
Because we did not define `Ordering`, we must import it (from the std
281-
library) with the `use` keyword. Here's an example of how `Ordering` is
282-
used:
282+
Because `Ordering` has already been defined for us, we will import it with the
283+
`use` keyword. Here's an example of how it is used:
283284

284285
```{rust}
285286
use std::cmp::Ordering;
@@ -313,17 +314,17 @@ the standard library if you need them.
313314

314315
Okay, let's talk about the actual code in the example. `cmp` is a function that
315316
compares two things, and returns an `Ordering`. We return either
316-
`Ordering::Less`, `Ordering::Greater`, or `Ordering::Equal`, depending on if
317-
the two values are less, greater, or equal. Note that each variant of the
318-
`enum` is namespaced under the `enum` itself: it's `Ordering::Greater` not
319-
`Greater`.
317+
`Ordering::Less`, `Ordering::Greater`, or `Ordering::Equal`, depending on
318+
whether the first value is less than, greater than, or equal to the second. Note
319+
that each variant of the `enum` is namespaced under the `enum` itself: it's
320+
`Ordering::Greater`, not `Greater`.
320321

321322
The `ordering` variable has the type `Ordering`, and so contains one of the
322323
three values. We then do a bunch of `if`/`else` comparisons to check which
323324
one it is.
324325

325-
This `Ordering::Greater` notation is too long. Let's use `use` to import the
326-
`enum` variants instead. This will avoid full scoping:
326+
This `Ordering::Greater` notation is too long. Let's use another form of `use`
327+
to import the `enum` variants instead. This will avoid full scoping:
327328

328329
```{rust}
329330
use std::cmp::Ordering::{self, Equal, Less, Greater};
@@ -347,16 +348,18 @@ fn main() {
347348
```
348349

349350
Importing variants is convenient and compact, but can also cause name conflicts,
350-
so do this with caution. It's considered good style to rarely import variants
351-
for this reason.
351+
so do this with caution. For this reason, it's normally considered better style
352+
to `use` an enum rather than its variants directly.
352353

353-
As you can see, `enum`s are quite a powerful tool for data representation, and are
354-
even more useful when they're [generic][generics] across types. Before we
355-
get to generics, though, let's talk about how to use them with pattern matching, a
356-
tool that will let us deconstruct this sum type (the type theory term for enums)
357-
in a very elegant way and avoid all these messy `if`/`else`s.
354+
As you can see, `enum`s are quite a powerful tool for data representation, and
355+
are even more useful when they're [generic][generics] across types. Before we
356+
get to generics, though, let's talk about how to use enums with pattern
357+
matching, a tool that will let us deconstruct sum types (the type theory term
358+
for enums) like `Ordering` in a very elegant way that avoids all these messy
359+
and brittle `if`/`else`s.
358360

359361

362+
[arity]: ./glossary.html#arity
360363
[match]: ./match.html
361364
[game]: ./guessing-game.html#comparing-guesses
362365
[generics]: ./generics.html

trunk/src/doc/trpl/concurrency.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ us enforce that it can't leave the current thread.
4040

4141
### `Sync`
4242

43-
The second of these two trait is called [`Sync`](../std/marker/trait.Sync.html).
43+
The second of these traits is called [`Sync`](../std/marker/trait.Sync.html).
4444
When a type `T` implements `Sync`, it indicates to the compiler that something
4545
of this type has no possibility of introducing memory unsafety when used from
4646
multiple threads concurrently.
4747

4848
For example, sharing immutable data with an atomic reference count is
4949
threadsafe. Rust provides a type like this, `Arc<T>`, and it implements `Sync`,
50-
so that it could be safely shared between threads.
50+
so it is safe to share between threads.
5151

5252
These two traits allow you to use the type system to make strong guarantees
5353
about the properties of your code under concurrency. Before we demonstrate
@@ -69,7 +69,7 @@ fn main() {
6969
}
7070
```
7171

72-
The `Thread::scoped()` method accepts a closure, which is executed in a new
72+
The `thread::scoped()` method accepts a closure, which is executed in a new
7373
thread. It's called `scoped` because this thread returns a join guard:
7474

7575
```
@@ -211,10 +211,10 @@ Here's the error:
211211

212212
```text
213213
<anon>:11:9: 11:22 error: the trait `core::marker::Send` is not implemented for the type `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` [E0277]
214-
<anon>:11 Thread::spawn(move || {
214+
<anon>:11 thread::spawn(move || {
215215
^~~~~~~~~~~~~
216216
<anon>:11:9: 11:22 note: `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` cannot be sent between threads safely
217-
<anon>:11 Thread::spawn(move || {
217+
<anon>:11 thread::spawn(move || {
218218
^~~~~~~~~~~~~
219219
```
220220

@@ -327,7 +327,6 @@ While this channel is just sending a generic signal, we can send any data that
327327
is `Send` over the channel!
328328

329329
```
330-
use std::sync::{Arc, Mutex};
331330
use std::thread;
332331
use std::sync::mpsc;
333332

0 commit comments

Comments
 (0)