Skip to content

Commit b9d5eb3

Browse files
committed
---
yaml --- r: 192151 b: refs/heads/master c: 67e516c h: refs/heads/master i: 192149: 141facc 192147: 16bdb9c 192143: a2bd614 v: v3
1 parent 3291293 commit b9d5eb3

File tree

166 files changed

+1424
-1688
lines changed

Some content is hidden

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

166 files changed

+1424
-1688
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: c6ca2205eae522387237057812b7901a2c5d3906
2+
refs/heads/master: 67e516c5c2ddd0dbed6b07ccca6b5bdd4ad10b36
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: a923278c6278c63468d74772c58dbf788e88f58c
55
refs/heads/try: ce76bff75603a754d092456285ff455eb871633d

trunk/Makefile.in

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,7 @@
9797
# make check-stage1-rpass TESTNAME=my-shiny-new-test
9898
#
9999
# // Having trouble figuring out which test is failing? Turn off parallel tests
100-
# make check-stage1-std RUST_TEST_TASKS=1
101-
#
102-
# This is hardly all there is to know of The Rust Build System's
103-
# mysteries. The tale continues on the wiki[1].
104-
#
105-
# [1]: https://github.com/rust-lang/rust/wiki/Note-testsuite
100+
# make check-stage1-std RUST_TEST_THREADS=1
106101
#
107102
# If you really feel like getting your hands dirty, then:
108103
#

trunk/man/rustc.1

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,28 @@ full debug info with variable and type information.
242242
\fBopt\-level\fR=\fIVAL\fR
243243
Optimize with possible levels 0\[en]3
244244

245+
.SH ENVIRONMENT
246+
247+
Some of these affect the output of the compiler, while others affect programs
248+
which link to the standard library.
249+
250+
.TP
251+
\fBRUST_TEST_THREADS\fR
252+
The test framework Rust provides executes tests in parallel. This variable sets
253+
the maximum number of threads used for this purpose.
254+
255+
.TP
256+
\fBRUST_TEST_NOCAPTURE\fR
257+
A synonym for the --nocapture flag.
258+
259+
.TP
260+
\fBRUST_MIN_STACK\fR
261+
Sets the minimum stack size for new threads.
262+
263+
.TP
264+
\fBRUST_BACKTRACE\fR
265+
If set, produces a backtrace in the output of a program which panics.
266+
245267
.SH "EXAMPLES"
246268
To build an executable from a source file with a main function:
247269
$ rustc \-o hello hello.rs

trunk/src/compiletest/compiletest.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,15 @@ pub fn run_tests(config: &Config) {
224224
// android debug-info test uses remote debugger
225225
// so, we test 1 task at once.
226226
// also trying to isolate problems with adb_run_wrapper.sh ilooping
227-
env::set_var("RUST_TEST_TASKS","1");
227+
env::set_var("RUST_TEST_THREADS","1");
228228
}
229229

230230
match config.mode {
231231
DebugInfoLldb => {
232232
// Some older versions of LLDB seem to have problems with multiple
233233
// instances running in parallel, so only run one test task at a
234234
// time.
235-
env::set_var("RUST_TEST_TASKS", "1");
235+
env::set_var("RUST_TEST_THREADS", "1");
236236
}
237237
_ => { /* proceed */ }
238238
}

trunk/src/compiletest/header.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ pub fn load_props(testfile: &Path) -> TestProps {
131131
true
132132
});
133133

134-
for key in vec!["RUST_TEST_NOCAPTURE", "RUST_TEST_TASKS"] {
134+
for key in vec!["RUST_TEST_NOCAPTURE", "RUST_TEST_THREADS"] {
135135
match env::var(key) {
136136
Ok(val) =>
137137
if exec_env.iter().find(|&&(ref x, _)| *x == key.to_string()).is_none() {
@@ -163,6 +163,9 @@ pub fn is_test_ignored(config: &Config, testfile: &Path) -> bool {
163163
fn ignore_target(config: &Config) -> String {
164164
format!("ignore-{}", util::get_os(&config.target))
165165
}
166+
fn ignore_architecture(config: &Config) -> String {
167+
format!("ignore-{}", util::get_arch(&config.target))
168+
}
166169
fn ignore_stage(config: &Config) -> String {
167170
format!("ignore-{}",
168171
config.stage_id.split('-').next().unwrap())
@@ -226,6 +229,7 @@ pub fn is_test_ignored(config: &Config, testfile: &Path) -> bool {
226229
let val = iter_header(testfile, &mut |ln| {
227230
!parse_name_directive(ln, "ignore-test") &&
228231
!parse_name_directive(ln, &ignore_target(config)) &&
232+
!parse_name_directive(ln, &ignore_architecture(config)) &&
229233
!parse_name_directive(ln, &ignore_stage(config)) &&
230234
!(config.mode == common::Pretty && parse_name_directive(ln, "ignore-pretty")) &&
231235
!(config.target != config.host && parse_name_directive(ln, "ignore-cross-compile")) &&

trunk/src/compiletest/procsrv.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111
#![allow(deprecated)] // for old path, for dynamic_lib
1212

13-
use std::process::{ExitStatus, Command, Child, Output, Stdio};
14-
use std::io::prelude::*;
1513
use std::dynamic_lib::DynamicLibrary;
14+
use std::io::prelude::*;
15+
use std::old_path::Path;
16+
use std::process::{ExitStatus, Command, Child, Output, Stdio};
1617

1718
fn add_target_env(cmd: &mut Command, lib_path: &str, aux_path: Option<&str>) {
1819
// Need to be sure to put both the lib_path and the aux path in the dylib

trunk/src/compiletest/util.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,23 @@ const OS_TABLE: &'static [(&'static str, &'static str)] = &[
2525
("openbsd", "openbsd"),
2626
];
2727

28+
const ARCH_TABLE: &'static [(&'static str, &'static str)] = &[
29+
("i386", "x86"),
30+
("i686", "x86"),
31+
("amd64", "x86_64"),
32+
("x86_64", "x86_64"),
33+
("sparc", "sparc"),
34+
("powerpc", "powerpc"),
35+
("arm64", "aarch64"),
36+
("arm", "arm"),
37+
("aarch64", "aarch64"),
38+
("mips", "mips"),
39+
("xcore", "xcore"),
40+
("msp430", "msp430"),
41+
("hexagon", "hexagon"),
42+
("s390x", "systemz"),
43+
];
44+
2845
pub fn get_os(triple: &str) -> &'static str {
2946
for &(triple_os, os) in OS_TABLE {
3047
if triple.contains(triple_os) {
@@ -33,6 +50,14 @@ pub fn get_os(triple: &str) -> &'static str {
3350
}
3451
panic!("Cannot determine OS from triple");
3552
}
53+
pub fn get_arch(triple: &str) -> &'static str {
54+
for &(triple_arch, arch) in ARCH_TABLE {
55+
if triple.contains(triple_arch) {
56+
return arch
57+
}
58+
}
59+
panic!("Cannot determine Architecture from triple");
60+
}
3661

3762
pub fn make_new_path(path: &str) -> String {
3863
assert!(cfg!(windows));

trunk/src/doc/reference.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1982,7 +1982,7 @@ the namespace hierarchy as it normally would.
19821982
## Attributes
19831983

19841984
```{.ebnf .gram}
1985-
attribute : "#!" ? '[' meta_item ']' ;
1985+
attribute : '#' '!' ? '[' meta_item ']' ;
19861986
meta_item : ident [ '=' literal
19871987
| '(' meta_seq ')' ] ? ;
19881988
meta_seq : meta_item [ ',' meta_seq ] ? ;
@@ -3158,7 +3158,7 @@ ten_times(|j| println!("hello, {}", j));
31583158
### While loops
31593159

31603160
```{.ebnf .gram}
3161-
while_expr : "while" no_struct_literal_expr '{' block '}' ;
3161+
while_expr : [ lifetime ':' ] "while" no_struct_literal_expr '{' block '}' ;
31623162
```
31633163

31643164
A `while` loop begins by evaluating the boolean loop conditional expression.
@@ -3223,7 +3223,7 @@ A `continue` expression is only permitted in the body of a loop.
32233223
### For expressions
32243224

32253225
```{.ebnf .gram}
3226-
for_expr : "for" pat "in" no_struct_literal_expr '{' block '}' ;
3226+
for_expr : [ lifetime ':' ] "for" pat "in" no_struct_literal_expr '{' block '}' ;
32273227
```
32283228

32293229
A `for` expression is a syntactic construct for looping over elements provided

trunk/src/doc/trpl/SUMMARY.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Summary
22

3-
* [I: The Basics](basic.md)
3+
* [The Basics](basic.md)
44
* [Installing Rust](installing-rust.md)
55
* [Hello, world!](hello-world.md)
66
* [Hello, Cargo!](hello-cargo.md)
@@ -14,8 +14,7 @@
1414
* [Strings](strings.md)
1515
* [Arrays, Vectors, and Slices](arrays-vectors-and-slices.md)
1616
* [Standard Input](standard-input.md)
17-
* [Guessing Game](guessing-game.md)
18-
* [II: Intermediate Rust](intermediate.md)
17+
* [Intermediate Rust](intermediate.md)
1918
* [Crates and Modules](crates-and-modules.md)
2019
* [Testing](testing.md)
2120
* [Pointers](pointers.md)
@@ -32,7 +31,7 @@
3231
* [Concurrency](concurrency.md)
3332
* [Error Handling](error-handling.md)
3433
* [Documentation](documentation.md)
35-
* [III: Advanced Topics](advanced.md)
34+
* [Advanced Topics](advanced.md)
3635
* [FFI](ffi.md)
3736
* [Unsafe Code](unsafe.md)
3837
* [Advanced Macros](advanced-macros.md)

trunk/src/doc/trpl/advanced-macros.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ off.
66
# Syntactic requirements
77

88
Even when Rust code contains un-expanded macros, it can be parsed as a full
9-
syntax tree. This property can be very useful for editors and other tools that
10-
process code. It also has a few consequences for the design of Rust's macro
11-
system.
9+
[syntax tree][ast]. This property can be very useful for editors and other
10+
tools that process code. It also has a few consequences for the design of
11+
Rust's macro system.
12+
13+
[ast]: glossary.html#abstract-syntax-tree
1214

1315
One consequence is that Rust must determine, when it parses a macro invocation,
1416
whether the macro stands in for

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

0 commit comments

Comments
 (0)