Skip to content

Commit c6a2dc9

Browse files
committed
Merge branch 'master' of https://github.com/mozilla/rust
2 parents bea7932 + 5c96369 commit c6a2dc9

File tree

396 files changed

+5508
-9670
lines changed

Some content is hidden

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

396 files changed

+5508
-9670
lines changed

mk/main.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
######################################################################
1414

1515
# The version number
16-
CFG_RELEASE_NUM=1.0.0
16+
CFG_RELEASE_NUM=1.1.0
1717

1818
# An optional number to put after the label, e.g. '.2' -> '-beta.2'
1919
# NB Make sure it starts with a dot to conform to semver pre-release
2020
# versions (section 9)
21-
CFG_PRERELEASE_VERSION=.3
21+
CFG_PRERELEASE_VERSION=.1
2222

2323
CFG_FILENAME_EXTRA=4e7c5e5c
2424

src/doc/reference.md

Lines changed: 22 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -973,8 +973,7 @@ Use declarations support a number of convenient shortcuts:
973973

974974
An example of `use` declarations:
975975

976-
```
977-
# #![feature(core)]
976+
```rust
978977
use std::option::Option::{Some, None};
979978
use std::collections::hash_map::{self, HashMap};
980979

@@ -1031,16 +1030,17 @@ declarations.
10311030
An example of what will and will not work for `use` items:
10321031

10331032
```
1034-
# #![feature(core)]
10351033
# #![allow(unused_imports)]
1036-
use foo::core::iter; // good: foo is at the root of the crate
10371034
use foo::baz::foobaz; // good: foo is at the root of the crate
10381035
10391036
mod foo {
1040-
extern crate core;
10411037
1042-
use foo::core::iter; // good: foo is at crate root
1043-
// use core::iter; // bad: core is not at the crate root
1038+
mod example {
1039+
pub mod iter {}
1040+
}
1041+
1042+
use foo::example::iter; // good: foo is at crate root
1043+
// use example::iter; // bad: core is not at the crate root
10441044
use self::baz::foobaz; // good: self refers to module 'foo'
10451045
use foo::bar::foobar; // good: foo is at crate root
10461046
@@ -1368,17 +1368,14 @@ a = Animal::Cat;
13681368

13691369
Enumeration constructors can have either named or unnamed fields:
13701370

1371-
```
1372-
# #![feature(struct_variant)]
1373-
# fn main() {
1371+
```rust
13741372
enum Animal {
13751373
Dog (String, f64),
13761374
Cat { name: String, weight: f64 }
13771375
}
13781376

13791377
let mut a: Animal = Animal::Dog("Cocoa".to_string(), 37.2);
13801378
a = Animal::Cat { name: "Spotty".to_string(), weight: 2.7 };
1381-
# }
13821379
```
13831380

13841381
In this example, `Cat` is a _struct-like enum variant_,
@@ -1718,17 +1715,6 @@ Functions within external blocks are declared in the same way as other Rust
17181715
functions, with the exception that they may not have a body and are instead
17191716
terminated by a semicolon.
17201717

1721-
```
1722-
# #![feature(libc)]
1723-
extern crate libc;
1724-
use libc::{c_char, FILE};
1725-
1726-
extern {
1727-
fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE;
1728-
}
1729-
# fn main() {}
1730-
```
1731-
17321718
Functions within external blocks may be called by Rust code, just like
17331719
functions defined in Rust. The Rust compiler automatically translates between
17341720
the Rust ABI and the foreign ABI.
@@ -1739,7 +1725,7 @@ By default external blocks assume that the library they are calling uses the
17391725
standard C "cdecl" ABI. Other ABIs may be specified using an `abi` string, as
17401726
shown here:
17411727

1742-
```{.ignore}
1728+
```ignore
17431729
// Interface to the Windows API
17441730
extern "stdcall" { }
17451731
```
@@ -3231,55 +3217,7 @@ expression.
32313217

32323218
In a pattern whose head expression has an `enum` type, a placeholder (`_`)
32333219
stands for a *single* data field, whereas a wildcard `..` stands for *all* the
3234-
fields of a particular variant. For example:
3235-
3236-
```
3237-
#![feature(box_patterns)]
3238-
#![feature(box_syntax)]
3239-
enum List<X> { Nil, Cons(X, Box<List<X>>) }
3240-
3241-
fn main() {
3242-
let x: List<i32> = List::Cons(10, box List::Cons(11, box List::Nil));
3243-
3244-
match x {
3245-
List::Cons(_, box List::Nil) => panic!("singleton list"),
3246-
List::Cons(..) => return,
3247-
List::Nil => panic!("empty list")
3248-
}
3249-
}
3250-
```
3251-
3252-
The first pattern matches lists constructed by applying `Cons` to any head
3253-
value, and a tail value of `box Nil`. The second pattern matches _any_ list
3254-
constructed with `Cons`, ignoring the values of its arguments. The difference
3255-
between `_` and `..` is that the pattern `C(_)` is only type-correct if `C` has
3256-
exactly one argument, while the pattern `C(..)` is type-correct for any enum
3257-
variant `C`, regardless of how many arguments `C` has.
3258-
3259-
Used inside an array pattern, `..` stands for any number of elements, when the
3260-
`advanced_slice_patterns` feature gate is turned on. This wildcard can be used
3261-
at most once for a given array, which implies that it cannot be used to
3262-
specifically match elements that are at an unknown distance from both ends of a
3263-
array, like `[.., 42, ..]`. If preceded by a variable name, it will bind the
3264-
corresponding slice to the variable. Example:
3265-
3266-
```
3267-
# #![feature(advanced_slice_patterns, slice_patterns)]
3268-
fn is_symmetric(list: &[u32]) -> bool {
3269-
match list {
3270-
[] | [_] => true,
3271-
[x, inside.., y] if x == y => is_symmetric(inside),
3272-
_ => false
3273-
}
3274-
}
3275-
3276-
fn main() {
3277-
let sym = &[0, 1, 4, 2, 4, 1, 0];
3278-
let not_sym = &[0, 1, 7, 2, 4, 1, 0];
3279-
assert!(is_symmetric(sym));
3280-
assert!(!is_symmetric(not_sym));
3281-
}
3282-
```
3220+
fields of a particular variant.
32833221

32843222
A `match` behaves differently depending on whether or not the head expression
32853223
is an [lvalue or an rvalue](#lvalues,-rvalues-and-temporaries). If the head
@@ -3298,30 +3236,15 @@ the inside of the match.
32983236
An example of a `match` expression:
32993237

33003238
```
3301-
#![feature(box_patterns)]
3302-
#![feature(box_syntax)]
3303-
# fn process_pair(a: i32, b: i32) { }
3304-
# fn process_ten() { }
3305-
3306-
enum List<X> { Nil, Cons(X, Box<List<X>>) }
3307-
3308-
fn main() {
3309-
let x: List<i32> = List::Cons(10, box List::Cons(11, box List::Nil));
3239+
let x = 1;
33103240
3311-
match x {
3312-
List::Cons(a, box List::Cons(b, _)) => {
3313-
process_pair(a, b);
3314-
}
3315-
List::Cons(10, _) => {
3316-
process_ten();
3317-
}
3318-
List::Nil => {
3319-
return;
3320-
}
3321-
_ => {
3322-
panic!();
3323-
}
3324-
}
3241+
match x {
3242+
1 => println!("one"),
3243+
2 => println!("two"),
3244+
3 => println!("three"),
3245+
4 => println!("four"),
3246+
5 => println!("five"),
3247+
_ => println!("something else"),
33253248
}
33263249
```
33273250

@@ -3334,28 +3257,12 @@ Subpatterns can also be bound to variables by the use of the syntax `variable @
33343257
subpattern`. For example:
33353258

33363259
```
3337-
#![feature(box_patterns)]
3338-
#![feature(box_syntax)]
3339-
3340-
enum List { Nil, Cons(u32, Box<List>) }
3260+
let x = 1;
33413261
3342-
fn is_sorted(list: &List) -> bool {
3343-
match *list {
3344-
List::Nil | List::Cons(_, box List::Nil) => true,
3345-
List::Cons(x, ref r @ box List::Cons(_, _)) => {
3346-
match *r {
3347-
box List::Cons(y, _) => (x <= y) && is_sorted(&**r),
3348-
_ => panic!()
3349-
}
3350-
}
3351-
}
3352-
}
3353-
3354-
fn main() {
3355-
let a = List::Cons(6, box List::Cons(7, box List::Cons(42, box List::Nil)));
3356-
assert!(is_sorted(&a));
3262+
match x {
3263+
e @ 1 ... 5 => println!("got a range element {}", e),
3264+
_ => println!("anything"),
33573265
}
3358-
33593266
```
33603267

33613268
Patterns can also dereference pointers by using the `&`, `&mut` and `box`

src/doc/trpl/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ is the first. After this:
2424
* [Syntax and Semantics][ss] - Each bit of Rust, broken down into small chunks.
2525
* [Nightly Rust][nr] - Cutting-edge features that aren’t in stable builds yet.
2626
* [Glossary][gl] - A reference of terms used in the book.
27+
* [Academic Research][ar] - Literature that influenced Rust.
2728

2829
[gs]: getting-started.html
2930
[lr]: learn-rust.html
3031
[er]: effective-rust.html
3132
[ss]: syntax-and-semantics.html
3233
[nr]: nightly-rust.html
3334
[gl]: glossary.html
35+
[ar]: academic-research.html
3436

3537
After reading this introduction, you’ll want to dive into either ‘Learn Rust’
3638
or ‘Syntax and Semantics’, depending on your preference: ‘Learn Rust’ if you
@@ -165,7 +167,7 @@ fn main() {
165167

166168
Rust has [move semantics][move] by default, so if we want to make a copy of some
167169
data, we call the `clone()` method. In this example, `y` is no longer a reference
168-
to the vector stored in `x`, but a copy of its first element, `"hello"`. Now
170+
to the vector stored in `x`, but a copy of its first element, `"Hello"`. Now
169171
that we don’t have a reference, our `push()` works just fine.
170172

171173
[move]: move-semantics.html

src/doc/trpl/SUMMARY.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
* [Concurrency](concurrency.md)
1515
* [Error Handling](error-handling.md)
1616
* [FFI](ffi.md)
17-
* [Deref coercions](deref-coercions.md)
1817
* [Syntax and Semantics](syntax-and-semantics.md)
1918
* [Variable Bindings](variable-bindings.md)
2019
* [Functions](functions.md)
@@ -30,31 +29,32 @@
3029
* [Move semantics](move-semantics.md)
3130
* [Enums](enums.md)
3231
* [Match](match.md)
33-
* [Patterns](patterns.md)
3432
* [Structs](structs.md)
33+
* [Patterns](patterns.md)
3534
* [Method Syntax](method-syntax.md)
36-
* [Drop](drop.md)
3735
* [Vectors](vectors.md)
3836
* [Strings](strings.md)
37+
* [Generics](generics.md)
3938
* [Traits](traits.md)
4039
* [Operators and Overloading](operators-and-overloading.md)
41-
* [Generics](generics.md)
40+
* [Drop](drop.md)
4241
* [if let](if-let.md)
4342
* [Trait Objects](trait-objects.md)
4443
* [Closures](closures.md)
4544
* [Universal Function Call Syntax](ufcs.md)
4645
* [Crates and Modules](crates-and-modules.md)
47-
* [`static`](static.md)
48-
* [`const`](const.md)
46+
* [`const` and `static`](const-and-static.md)
4947
* [Tuple Structs](tuple-structs.md)
5048
* [Attributes](attributes.md)
5149
* [Conditional Compilation](conditional-compilation.md)
5250
* [`type` aliases](type-aliases.md)
5351
* [Casting between types](casting-between-types.md)
5452
* [Associated Types](associated-types.md)
5553
* [Unsized Types](unsized-types.md)
54+
* [Deref coercions](deref-coercions.md)
5655
* [Macros](macros.md)
57-
* [`unsafe` Code](unsafe-code.md)
56+
* [Raw Pointers](raw-pointers.md)
57+
* [`unsafe`](unsafe.md)
5858
* [Nightly Rust](nightly-rust.md)
5959
* [Compiler Plugins](compiler-plugins.md)
6060
* [Inline Assembly](inline-assembly.md)

src/doc/trpl/associated-types.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
% Associated Types
22

3-
Associated types are a powerful part of Rust's type system. They're related to
4-
the idea of a 'type family', in other words, grouping multiple types together. That
5-
description is a bit abstract, so let's dive right into an example. If you want
3+
Associated types are a powerful part of Rusts type system. Theyre related to
4+
the idea of a type family, in other words, grouping multiple types together. That
5+
description is a bit abstract, so lets dive right into an example. If you want
66
to write a `Graph` trait, you have two types to be generic over: the node type
77
and the edge type. So you might write a trait, `Graph<N, E>`, that looks like
88
this:
@@ -48,11 +48,11 @@ fn distance<G: Graph>(graph: &G, start: &G::N, end: &G::N) -> uint { ... }
4848

4949
No need to deal with the `E`dge type here!
5050

51-
Let's go over all this in more detail.
51+
Lets go over all this in more detail.
5252

5353
## Defining associated types
5454

55-
Let's build that `Graph` trait. Here's the definition:
55+
Lets build that `Graph` trait. Heres the definition:
5656

5757
```rust
5858
trait Graph {
@@ -86,7 +86,7 @@ trait Graph {
8686
## Implementing associated types
8787

8888
Just like any trait, traits that use associated types use the `impl` keyword to
89-
provide implementations. Here's a simple implementation of Graph:
89+
provide implementations. Heres a simple implementation of Graph:
9090

9191
```rust
9292
# trait Graph {
@@ -118,13 +118,13 @@ impl Graph for MyGraph {
118118
This silly implementation always returns `true` and an empty `Vec<Edge>`, but it
119119
gives you an idea of how to implement this kind of thing. We first need three
120120
`struct`s, one for the graph, one for the node, and one for the edge. If it made
121-
more sense to use a different type, that would work as well, we're just going to
121+
more sense to use a different type, that would work as well, were just going to
122122
use `struct`s for all three here.
123123

124124
Next is the `impl` line, which is just like implementing any other trait.
125125

126126
From here, we use `=` to define our associated types. The name the trait uses
127-
goes on the left of the `=`, and the concrete type we're `impl`ementing this
127+
goes on the left of the `=`, and the concrete type were `impl`ementing this
128128
for goes on the right. Finally, we use the concrete types in our function
129129
declarations.
130130

0 commit comments

Comments
 (0)