Skip to content

Commit 9f75a16

Browse files
committed
---
yaml --- r: 235253 b: refs/heads/stable c: d5629e9 h: refs/heads/master i: 235251: daf7ecc v: v3
1 parent 9710dd5 commit 9f75a16

Some content is hidden

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

70 files changed

+1763
-592
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/heads/tmp: afae2ff723393b3ab4ccffef6ac7c6d1809e2da0
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: f859507de8c410b648d934d8f5ec1c52daac971d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: df73abedd585a0f797eb393264fc01ff5a442c40
32+
refs/heads/stable: d5629e9e3556a35e2a9bc2f5bd1bee30d7966e0d
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b
3535
refs/tags/1.2.0: f557861f822c34f07270347b94b5280de20a597e

branches/stable/CONTRIBUTING.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,21 @@ feature. We use the 'fork and pull' model described there.
8383

8484
Please make pull requests against the `master` branch.
8585

86+
Compiling all of `make check` can take a while. When testing your pull request,
87+
consider using one of the more specialized `make` targets to cut down on the
88+
amount of time you have to wait. You need to have built the compiler at least
89+
once before running these will work, but that’s only one full build rather than
90+
one each time.
91+
92+
$ make -j8 rustc-stage1 && make check-stage1
93+
94+
is one such example, which builds just `rustc`, and then runs the tests. If
95+
you’re adding something to the standard library, try
96+
97+
$ make -j8 check-stage1-std NO_REBUILD=1
98+
99+
This will not rebuild the compiler, but will run the tests.
100+
86101
All pull requests are reviewed by another person. We have a bot,
87102
@rust-highfive, that will automatically assign a random person to review your
88103
request.
@@ -108,6 +123,10 @@ will run all the tests on every platform we support. If it all works out,
108123

109124
[merge-queue]: http://buildbot.rust-lang.org/homu/queue/rust
110125

126+
Speaking of tests, Rust has a comprehensive test suite. More information about
127+
it can be found
128+
[here](https://github.com/rust-lang/rust-wiki-backup/blob/master/Note-testsuite.md).
129+
111130
## Writing Documentation
112131

113132
Documentation improvements are very welcome. The source of `doc.rust-lang.org`

branches/stable/mk/main.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ LLVM_BINDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --bindir)
295295
LLVM_INCDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --includedir)
296296
LLVM_LIBDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libdir)
297297
LLVM_LIBDIR_RUSTFLAGS_$(1)=-L "$$(LLVM_LIBDIR_$(1))"
298-
LLVM_LIBS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libs $$(LLVM_COMPONENTS))
299298
LLVM_LDFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --ldflags)
300299
ifeq ($$(findstring freebsd,$(1)),freebsd)
301300
# On FreeBSD, it may search wrong headers (that are for pre-installed LLVM),

branches/stable/mk/target.mk

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,9 @@ endef
249249

250250
$(foreach host,$(CFG_HOST), \
251251
$(foreach target,$(CFG_TARGET), \
252-
$(foreach stage,$(STAGES), \
253-
$(foreach crate,$(CRATES), \
254-
$(eval $(call SETUP_LIB_MSVC_ENV_VARS,$(stage),$(target),$(host),$(crate)))))))
252+
$(foreach crate,$(CRATES), \
253+
$(eval $(call SETUP_LIB_MSVC_ENV_VARS,0,$(target),$(host),$(crate))))))
255254
$(foreach host,$(CFG_HOST), \
256255
$(foreach target,$(CFG_TARGET), \
257-
$(foreach stage,$(STAGES), \
258-
$(foreach tool,$(TOOLS), \
259-
$(eval $(call SETUP_TOOL_MSVC_ENV_VARS,$(stage),$(target),$(host),$(tool)))))))
256+
$(foreach tool,$(TOOLS), \
257+
$(eval $(call SETUP_TOOL_MSVC_ENV_VARS,0,$(target),$(host),$(tool))))))

branches/stable/src/compiletest/runtest.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,16 +1126,10 @@ impl fmt::Display for Status {
11261126

11271127
fn compile_test(config: &Config, props: &TestProps,
11281128
testfile: &Path) -> ProcRes {
1129-
compile_test_(config, props, testfile, &[])
1130-
}
1131-
1132-
fn compile_test_(config: &Config, props: &TestProps,
1133-
testfile: &Path, extra_args: &[String]) -> ProcRes {
11341129
let aux_dir = aux_output_dir_name(config, testfile);
11351130
// FIXME (#9639): This needs to handle non-utf8 paths
1136-
let mut link_args = vec!("-L".to_string(),
1137-
aux_dir.to_str().unwrap().to_string());
1138-
link_args.extend(extra_args.iter().cloned());
1131+
let link_args = vec!("-L".to_string(),
1132+
aux_dir.to_str().unwrap().to_string());
11391133
let args = make_compile_args(config,
11401134
props,
11411135
link_args,
@@ -1144,7 +1138,7 @@ fn compile_test_(config: &Config, props: &TestProps,
11441138
}
11451139

11461140
fn document(config: &Config, props: &TestProps,
1147-
testfile: &Path, extra_args: &[String]) -> (ProcRes, PathBuf) {
1141+
testfile: &Path) -> (ProcRes, PathBuf) {
11481142
let aux_dir = aux_output_dir_name(config, testfile);
11491143
let out_dir = output_base_name(config, testfile);
11501144
let _ = fs::remove_dir_all(&out_dir);
@@ -1154,7 +1148,6 @@ fn document(config: &Config, props: &TestProps,
11541148
"-o".to_string(),
11551149
out_dir.to_str().unwrap().to_string(),
11561150
testfile.to_str().unwrap().to_string()];
1157-
args.extend(extra_args.iter().cloned());
11581151
args.extend(split_maybe_args(&props.compile_flags));
11591152
let args = ProcArgs {
11601153
prog: config.rustdoc_path.to_str().unwrap().to_string(),
@@ -1717,7 +1710,7 @@ fn charset() -> &'static str {
17171710
}
17181711

17191712
fn run_rustdoc_test(config: &Config, props: &TestProps, testfile: &Path) {
1720-
let (proc_res, out_dir) = document(config, props, testfile, &[]);
1713+
let (proc_res, out_dir) = document(config, props, testfile);
17211714
if !proc_res.status.success() {
17221715
fatal_proc_rec("rustdoc failed!", &proc_res);
17231716
}

branches/stable/src/doc/complement-design-faq.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ Second, it makes cost explicit. In general, the only safe way to have a
9999
non-exhaustive match would be to panic the thread if nothing is matched, though
100100
it could fall through if the type of the `match` expression is `()`. This sort
101101
of hidden cost and special casing is against the language's philosophy. It's
102-
easy to ignore certain cases by using the `_` wildcard:
102+
easy to ignore all unspecified cases by using the `_` wildcard:
103103

104104
```rust,ignore
105105
match val.do_something() {

branches/stable/src/doc/reference.md

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -338,12 +338,16 @@ type of the literal. The integer suffix must be the name of one of the
338338
integral types: `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64`,
339339
`isize`, or `usize`.
340340

341-
The type of an _unsuffixed_ integer literal is determined by type inference.
342-
If an integer type can be _uniquely_ determined from the surrounding program
343-
context, the unsuffixed integer literal has that type. If the program context
344-
underconstrains the type, it defaults to the signed 32-bit integer `i32`; if
345-
the program context overconstrains the type, it is considered a static type
346-
error.
341+
The type of an _unsuffixed_ integer literal is determined by type inference:
342+
343+
* If an integer type can be _uniquely_ determined from the surrounding
344+
program context, the unsuffixed integer literal has that type.
345+
346+
* If the program context underconstrains the type, it defaults to the
347+
signed 32-bit integer `i32`.
348+
349+
* If the program context overconstrains the type, it is considered a
350+
static type error.
347351

348352
Examples of integer literals of various forms:
349353

@@ -371,12 +375,17 @@ The suffix forcibly sets the type of the literal. There are two valid
371375
_floating-point suffixes_, `f32` and `f64` (the 32-bit and 64-bit floating point
372376
types), which explicitly determine the type of the literal.
373377

374-
The type of an _unsuffixed_ floating-point literal is determined by type
375-
inference. If a floating-point type can be _uniquely_ determined from the
376-
surrounding program context, the unsuffixed floating-point literal has that type.
377-
If the program context underconstrains the type, it defaults to double-precision `f64`;
378-
if the program context overconstrains the type, it is considered a static type
379-
error.
378+
The type of an _unsuffixed_ floating-point literal is determined by
379+
type inference:
380+
381+
* If a floating-point type can be _uniquely_ determined from the
382+
surrounding program context, the unsuffixed floating-point literal
383+
has that type.
384+
385+
* If the program context underconstrains the type, it defaults to `f64`.
386+
387+
* If the program context overconstrains the type, it is considered a
388+
static type error.
380389

381390
Examples of floating-point literals of various forms:
382391

@@ -2506,9 +2515,8 @@ Here are some examples:
25062515
#### Moved and copied types
25072516

25082517
When a [local variable](#variables) is used as an
2509-
[rvalue](#lvalues,-rvalues-and-temporaries) the variable will either be moved
2510-
or copied, depending on its type. All values whose type implements `Copy` are
2511-
copied, all others are moved.
2518+
[rvalue](#lvalues,-rvalues-and-temporaries), the variable will be copied
2519+
if its type implements `Copy`. All others are moved.
25122520

25132521
### Literal expressions
25142522

@@ -2873,7 +2881,6 @@ operand.
28732881
```
28742882
# let mut x = 0;
28752883
# let y = 0;
2876-
28772884
x = y;
28782885
```
28792886

@@ -2963,14 +2970,12 @@ move values (depending on their type) from the environment into the lambda
29632970
expression's captured environment.
29642971

29652972
In this example, we define a function `ten_times` that takes a higher-order
2966-
function argument, and call it with a lambda expression as an argument:
2973+
function argument, and we then call it with a lambda expression as an argument:
29672974

29682975
```
29692976
fn ten_times<F>(f: F) where F: Fn(i32) {
2970-
let mut i = 0i32;
2971-
while i < 10 {
2972-
f(i);
2973-
i += 1;
2977+
for index in 0..10 {
2978+
f(index);
29742979
}
29752980
}
29762981
@@ -3319,10 +3324,13 @@ An example of a tuple type and its use:
33193324

33203325
```
33213326
type Pair<'a> = (i32, &'a str);
3322-
let p: Pair<'static> = (10, "hello");
3327+
let p: Pair<'static> = (10, "ten");
33233328
let (a, b) = p;
3324-
assert!(b != "world");
3325-
assert!(p.0 == 10);
3329+
3330+
assert_eq!(a, 10);
3331+
assert_eq!(b, "ten");
3332+
assert_eq!(p.0, 10);
3333+
assert_eq!(p.1, "ten");
33263334
```
33273335

33283336
For historical reasons and convenience, the tuple type with no elements (`()`)
@@ -3332,27 +3340,32 @@ is often called ‘unit’ or ‘the unit type’.
33323340

33333341
Rust has two different types for a list of items:
33343342

3335-
* `[T; N]`, an 'array'.
3336-
* `&[T]`, a 'slice'.
3343+
* `[T; N]`, an 'array'
3344+
* `&[T]`, a 'slice'
33373345

33383346
An array has a fixed size, and can be allocated on either the stack or the
33393347
heap.
33403348

33413349
A slice is a 'view' into an array. It doesn't own the data it points
33423350
to, it borrows it.
33433351

3344-
An example of each kind:
3352+
Examples:
33453353

33463354
```{rust}
3347-
let vec: Vec<i32> = vec![1, 2, 3];
3348-
let arr: [i32; 3] = [1, 2, 3];
3349-
let s: &[i32] = &vec[..];
3355+
// A stack-allocated array
3356+
let array: [i32; 3] = [1, 2, 3];
3357+
3358+
// A heap-allocated array
3359+
let vector: Vec<i32> = vec![1, 2, 3];
3360+
3361+
// A slice into an array
3362+
let slice: &[i32] = &vector[..];
33503363
```
33513364

33523365
As you can see, the `vec!` macro allows you to create a `Vec<T>` easily. The
33533366
`vec!` macro is also part of the standard library, rather than the language.
33543367

3355-
All in-bounds elements of arrays, and slices are always initialized, and access
3368+
All in-bounds elements of arrays and slices are always initialized, and access
33563369
to an array or slice is always bounds-checked.
33573370

33583371
### Structure types
@@ -3486,7 +3499,7 @@ x = bo(5,7);
34863499

34873500
#### Function types for specific items
34883501

3489-
Internally to the compiler, there are also function types that are specific to a particular
3502+
Internal to the compiler, there are also function types that are specific to a particular
34903503
function item. In the following snippet, for example, the internal types of the functions
34913504
`foo` and `bar` are different, despite the fact that they have the same signature:
34923505

@@ -3514,13 +3527,14 @@ more of the closure traits:
35143527

35153528
* `FnMut`
35163529
: The closure can be called multiple times as mutable. A closure called as
3517-
`FnMut` can mutate values from its environment. `FnMut` implies
3518-
`FnOnce`.
3530+
`FnMut` can mutate values from its environment. `FnMut` inherits from
3531+
`FnOnce` (i.e. anything implementing `FnMut` also implements `FnOnce`).
35193532

35203533
* `Fn`
35213534
: The closure can be called multiple times through a shared reference.
35223535
A closure called as `Fn` can neither move out from nor mutate values
3523-
from its environment. `Fn` implies `FnMut` and `FnOnce`.
3536+
from its environment. `Fn` inherits from `FnMut`, which itself
3537+
inherits from `FnOnce`.
35243538

35253539

35263540
### Trait objects
@@ -3643,7 +3657,7 @@ Coercions are defined in [RFC401]. A coercion is implicit and has no syntax.
36433657
### Coercion sites
36443658

36453659
A coercion can only occur at certain coercion sites in a program; these are
3646-
typically places where the desired type is explicit or can be dervied by
3660+
typically places where the desired type is explicit or can be derived by
36473661
propagation from explicit types (without type inference). Possible coercion
36483662
sites are:
36493663

branches/stable/src/doc/trpl/comments.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,17 @@ fn add_one(x: i32) -> i32 {
3838
}
3939
```
4040

41+
There is another style of doc comment, `//!`, to comment containing items (e.g.
42+
crates, modules or functions), instead of the items following it. Commonly used
43+
inside crates root (lib.rs) or modules root (mod.rs):
44+
45+
```
46+
//! # The Rust Standard Library
47+
//!
48+
//! The Rust Standard Library provides the essential runtime
49+
//! functionality for building portable Rust software.
50+
```
51+
4152
When writing doc comments, providing some examples of usage is very, very
4253
helpful. You’ll notice we’ve used a new macro here: `assert_eq!`. This compares
4354
two values, and `panic!`s if they’re not equal to each other. It’s very helpful

branches/stable/src/doc/trpl/concurrency.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ system is up to the task, and gives you powerful ways to reason about
1010
concurrent code at compile time.
1111

1212
Before we talk about the concurrency features that come with Rust, it's important
13-
to understand something: Rust is low-level enough that all of this is provided
14-
by the standard library, not by the language. This means that if you don't like
15-
some aspect of the way Rust handles concurrency, you can implement an alternative
16-
way of doing things. [mio](https://github.com/carllerche/mio) is a real-world
17-
example of this principle in action.
13+
to understand something: Rust is low-level enough that the vast majority of
14+
this is provided by the standard library, not by the language. This means that
15+
if you don't like some aspect of the way Rust handles concurrency, you can
16+
implement an alternative way of doing things.
17+
[mio](https://github.com/carllerche/mio) is a real-world example of this
18+
principle in action.
1819

1920
## Background: `Send` and `Sync`
2021

branches/stable/src/doc/trpl/ffi.md

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -533,19 +533,10 @@ attribute turns off Rust's name mangling, so that it is easier to link to.
533533

534534
# FFI and panics
535535

536-
It’s important to be mindful of `panic!`s when working with FFI. This code,
537-
when called from C, will `abort`:
538-
539-
```rust
540-
#[no_mangle]
541-
pub extern fn oh_no() -> ! {
542-
panic!("Oops!");
543-
}
544-
# fn main() {}
545-
```
546-
547-
If you’re writing code that may panic, you should run it in another thread,
548-
so that the panic doesn’t bubble up to C:
536+
It’s important to be mindful of `panic!`s when working with FFI. A `panic!`
537+
across an FFI boundary is undefined behavior. If you’re writing code that may
538+
panic, you should run it in another thread, so that the panic doesn’t bubble up
539+
to C:
549540

550541
```rust
551542
use std::thread;

0 commit comments

Comments
 (0)