Skip to content

Commit 56654b4

Browse files
committed
---
yaml --- r: 191229 b: refs/heads/try c: 79dd393 h: refs/heads/master i: 191227: 6a73752 v: v3
1 parent 4004f39 commit 56654b4

File tree

200 files changed

+3093
-3388
lines changed

Some content is hidden

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

200 files changed

+3093
-3388
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: 809a554fca2d0ebc2ba50077016fe282a4064752
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: c64d671671aea2e44ee7fc6eb00ee75fc30ed7b9
5-
refs/heads/try: 42c4e481cd98bd392839144c9ac83e55e445a12a
5+
refs/heads/try: 79dd393a4f144fa5e6f81c720c782de3175810d7
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
88
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try/configure

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,9 @@ fi
760760
# Force bitrig to build with clang; gcc doesn't like us there
761761
if [ $CFG_OSTYPE = unknown-bitrig ]
762762
then
763-
step_msg "on Bitrig, forcing use of clang"
763+
step_msg "on Bitrig, forcing use of clang, disabling jemalloc"
764764
CFG_ENABLE_CLANG=1
765+
CFG_ENABLE_JEMALLOC=0
765766
fi
766767

767768
if [ -z "$CFG_ENABLE_CLANG" -a -z "$CFG_GCC" ]

branches/try/mk/main.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ ifdef CFG_DISABLE_DEBUG
130130
CFG_RUSTC_FLAGS += --cfg ndebug
131131
else
132132
$(info cfg: enabling more debugging (CFG_ENABLE_DEBUG))
133-
CFG_RUSTC_FLAGS += --cfg debug
133+
CFG_RUSTC_FLAGS += --cfg debug -C debug-assertions=on
134134
endif
135135

136136
ifdef SAVE_TEMPS

branches/try/mk/tests.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ TEST_SREQ$(1)_T_$(2)_H_$(3) = \
590590

591591
# The tests select when to use debug configuration on their own;
592592
# remove directive, if present, from CFG_RUSTC_FLAGS (issue #7898).
593-
CTEST_RUSTC_FLAGS := $$(subst -C debug-assertions,,$$(CFG_RUSTC_FLAGS))
593+
CTEST_RUSTC_FLAGS := $$(subst -C debug-assertions,,$$(subst -C debug-assertions=on,,$$(CFG_RUSTC_FLAGS)))
594594

595595
# The tests cannot be optimized while the rest of the compiler is optimized, so
596596
# filter out the optimization (if any) from rustc and then figure out if we need

branches/try/src/doc/reference.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,14 +229,14 @@ cases mentioned in [Number literals](#number-literals) below.
229229

230230
##### Characters and strings
231231

232-
| | Example | # sets | Characters | Escapes |
233-
|----------------------------------------------|---------------|--------|-------------|---------------------|
234-
| [Character](#character-literals) | 'H' | N/A | All Unicode | \' & [Byte](#byte-escapes) & [Unicode](#unicode-escapes) |
235-
| [String](#string-literals) | "hello" | N/A | All Unicode | \" & [Byte](#byte-escapes) & [Unicode](#unicode-escapes) |
236-
| [Raw](#raw-string-literals) | r#"hello"# | 0... | All Unicode | N/A |
237-
| [Byte](#byte-literals) | b'H' | N/A | All ASCII | \' & [Byte](#byte-escapes) |
238-
| [Byte string](#byte-string-literals) | b"hello" | N/A | All ASCII | \" & [Byte](#byte-escapes) |
239-
| [Raw byte string](#raw-byte-string-literals) | br#"hello"# | 0... | All ASCII | N/A |
232+
| | Example | `#` sets | Characters | Escapes |
233+
|----------------------------------------------|-----------------|------------|-------------|---------------------|
234+
| [Character](#character-literals) | `'H'` | `N/A` | All Unicode | `\'` & [Byte](#byte-escapes) & [Unicode](#unicode-escapes) |
235+
| [String](#string-literals) | `"hello"` | `N/A` | All Unicode | `\"` & [Byte](#byte-escapes) & [Unicode](#unicode-escapes) |
236+
| [Raw](#raw-string-literals) | `r#"hello"#` | `0...` | All Unicode | `N/A` |
237+
| [Byte](#byte-literals) | `b'H'` | `N/A` | All ASCII | `\'` & [Byte](#byte-escapes) |
238+
| [Byte string](#byte-string-literals) | `b"hello"` | `N/A` | All ASCII | `\"` & [Byte](#byte-escapes) |
239+
| [Raw byte string](#raw-byte-string-literals) | `br#"hello"#` | `0...` | All ASCII | `N/A` |
240240

241241
##### Byte escapes
242242

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ The other kind of comment is a doc comment. Doc comments use `///` instead of
2828
///
2929
/// * `name` - The name of the person you'd like to greet.
3030
///
31-
/// # Example
31+
/// # Examples
3232
///
3333
/// ```rust
3434
/// let name = "Steve";

branches/try/src/doc/trpl/hello-cargo.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ Once you have this file in place, we should be ready to build! Try this:
7878
```bash
7979
$ cargo build
8080
Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
81-
$ ./target/hello_world
81+
$ ./target/debug/hello_world
8282
Hello, world!
8383
```
8484

8585
Bam! We build our project with `cargo build`, and run it with
86-
`./target/hello_world`. This hasn't bought us a whole lot over our simple use
86+
`./target/debug/hello_world`. This hasn't bought us a whole lot over our simple use
8787
of `rustc`, but think about the future: when our project has more than one
8888
file, we would need to call `rustc` more than once, and pass it a bunch of options to
8989
tell it to build everything together. With Cargo, as our project grows, we can
90-
just `cargo build` and it'll work the right way.
90+
just `cargo build` and it'll work the right way. When you're project is finally ready for release, you can use `cargo build --release` to compile your crates with optimizations.
9191

9292
You'll also notice that Cargo has created a new file: `Cargo.lock`.
9393

@@ -163,4 +163,4 @@ much more in-depth guide to Cargo can be found [here](http://doc.crates.io/guide
163163

164164
Now that you've got the tools down, let's actually learn more about the Rust
165165
language itself. These are the basics that will serve you well through the rest
166-
of your time with Rust.
166+
of your time with Rust.

branches/try/src/doc/trpl/installing-rust.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ rustc 1.0.0-nightly (f11f3e7ba 2015-01-04) (built 2015-01-06)
7878

7979
If you did, Rust has been installed successfully! Congrats!
8080

81+
This installer also installs a copy of the documentation locally, so you can
82+
read it offline. On UNIX systems, `/usr/local/share/doc/rust` is the location.
83+
On Windows, it's in a `share/doc` directory, inside wherever you installed Rust
84+
to.
85+
8186
If not, there are a number of places where you can get help. The easiest is
8287
[the #rust IRC channel on irc.mozilla.org](irc://irc.mozilla.org/#rust), which
8388
you can access through

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

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -102,49 +102,88 @@ reason.
102102
Rust provides dynamic dispatch through a feature called 'trait objects.' Trait
103103
objects, like `&Foo` or `Box<Foo>`, are normal values that store a value of
104104
*any* type that implements the given trait, where the precise type can only be
105-
known at runtime. The methods of the trait can be called on a trait object via
106-
a special record of function pointers (created and managed by the compiler).
105+
known at runtime.
107106

108-
A function that takes a trait object is not specialized to each of the types
109-
that implements `Foo`: only one copy is generated, often (but not always)
110-
resulting in less code bloat. However, this comes at the cost of requiring
111-
slower virtual function calls, and effectively inhibiting any chance of
112-
inlining and related optimisations from occurring.
107+
A trait object can be obtained from a pointer to a concrete type that
108+
implements the trait by *casting* it (e.g. `&x as &Foo`) or *coercing* it
109+
(e.g. using `&x` as an argument to a function that takes `&Foo`).
113110

114-
Trait objects are both simple and complicated: their core representation and
115-
layout is quite straight-forward, but there are some curly error messages and
116-
surprising behaviors to discover.
111+
These trait object coercions and casts also work for pointers like `&mut T` to
112+
`&mut Foo` and `Box<T>` to `Box<Foo>`, but that's all at the moment. Coercions
113+
and casts are identical.
117114

118-
### Obtaining a trait object
115+
This operation can be seen as "erasing" the compiler's knowledge about the
116+
specific type of the pointer, and hence trait objects are sometimes referred to
117+
as "type erasure".
119118

120-
There's two similar ways to get a trait object value: casts and coercions. If
121-
`T` is a type that implements a trait `Foo` (e.g. `u8` for the `Foo` above),
122-
then the two ways to get a `Foo` trait object out of a pointer to `T` look
123-
like:
119+
Coming back to the example above, we can use the same trait to perform dynamic
120+
dispatch with trait objects by casting:
124121

125-
```{rust,ignore}
126-
let ref_to_t: &T = ...;
122+
```rust
123+
# trait Foo { fn method(&self) -> String; }
124+
# impl Foo for u8 { fn method(&self) -> String { format!("u8: {}", *self) } }
125+
# impl Foo for String { fn method(&self) -> String { format!("string: {}", *self) } }
127126

128-
// `as` keyword for casting
129-
let cast = ref_to_t as &Foo;
127+
fn do_something(x: &Foo) {
128+
x.method();
129+
}
130130

131-
// using a `&T` in a place that has a known type of `&Foo` will implicitly coerce:
132-
let coerce: &Foo = ref_to_t;
131+
fn main() {
132+
let x = 5u8;
133+
do_something(&x as &Foo);
134+
}
135+
```
133136

134-
fn also_coerce(_unused: &Foo) {}
135-
also_coerce(ref_to_t);
137+
or by coercing:
138+
139+
```rust
140+
# trait Foo { fn method(&self) -> String; }
141+
# impl Foo for u8 { fn method(&self) -> String { format!("u8: {}", *self) } }
142+
# impl Foo for String { fn method(&self) -> String { format!("string: {}", *self) } }
143+
144+
fn do_something(x: &Foo) {
145+
x.method();
146+
}
147+
148+
fn main() {
149+
let x = "Hello".to_string();
150+
do_something(&x);
151+
}
136152
```
137153

138-
These trait object coercions and casts also work for pointers like `&mut T` to
139-
`&mut Foo` and `Box<T>` to `Box<Foo>`, but that's all at the moment. Coercions
140-
and casts are identical.
154+
A function that takes a trait object is not specialized to each of the types
155+
that implements `Foo`: only one copy is generated, often (but not always)
156+
resulting in less code bloat. However, this comes at the cost of requiring
157+
slower virtual function calls, and effectively inhibiting any chance of
158+
inlining and related optimisations from occurring.
141159

142-
This operation can be seen as "erasing" the compiler's knowledge about the
143-
specific type of the pointer, and hence trait objects are sometimes referred to
144-
as "type erasure".
160+
### Why pointers?
161+
162+
Rust does not put things behind a pointer by default, unlike many managed
163+
languages, so types can have different sizes. Knowing the size of the value at
164+
compile time is important for things like passing it as an argument to a
165+
function, moving it about on the stack and allocating (and deallocating) space
166+
on the heap to store it.
167+
168+
For `Foo`, we would need to have a value that could be at least either a
169+
`String` (24 bytes) or a `u8` (1 byte), as well as any other type for which
170+
dependent crates may implement `Foo` (any number of bytes at all). There's no
171+
way to guarantee that this last point can work if the values are stored without
172+
a pointer, because those other types can be arbitrarily large.
173+
174+
Putting the value behind a pointer means the size of the value is not relevant
175+
when we are tossing a trait object around, only the size of the pointer itself.
145176

146177
### Representation
147178

179+
The methods of the trait can be called on a trait object via a special record
180+
of function pointers traditionally called a 'vtable' (created and managed by
181+
the compiler).
182+
183+
Trait objects are both simple and complicated: their core representation and
184+
layout is quite straight-forward, but there are some curly error messages and
185+
surprising behaviors to discover.
186+
148187
Let's start simple, with the runtime representation of a trait object. The
149188
`std::raw` module contains structs with layouts that are the same as the
150189
complicated built-in types, [including trait objects][stdraw]:
@@ -265,23 +304,3 @@ let y = TraitObject {
265304
If `b` or `y` were owning trait objects (`Box<Foo>`), there would be a
266305
`(b.vtable.destructor)(b.data)` (respectively `y`) call when they went out of
267306
scope.
268-
269-
### Why pointers?
270-
271-
The use of language like "fat pointer" implies that a trait object is
272-
always a pointer of some form, but why?
273-
274-
Rust does not put things behind a pointer by default, unlike many managed
275-
languages, so types can have different sizes. Knowing the size of the value at
276-
compile time is important for things like passing it as an argument to a
277-
function, moving it about on the stack and allocating (and deallocating) space
278-
on the heap to store it.
279-
280-
For `Foo`, we would need to have a value that could be at least either a
281-
`String` (24 bytes) or a `u8` (1 byte), as well as any other type for which
282-
dependent crates may implement `Foo` (any number of bytes at all). There's no
283-
way to guarantee that this last point can work if the values are stored without
284-
a pointer, because those other types can be arbitrarily large.
285-
286-
Putting the value behind a pointer means the size of the value is not relevant
287-
when we are tossing a trait object around, only the size of the pointer itself.

branches/try/src/liballoc/arc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ use heap::deallocate;
8888

8989
/// An atomically reference counted wrapper for shared state.
9090
///
91-
/// # Example
91+
/// # Examples
9292
///
9393
/// In this example, a large vector of floats is shared between several tasks.
9494
/// With simple pipes, without `Arc`, a copy would have to be made for each

branches/try/src/liballoc/boxed.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ impl<T : ?Sized> Box<T> {
133133
/// automatically managed that may lead to memory or other resource
134134
/// leak.
135135
///
136-
/// # Example
136+
/// # Examples
137137
/// ```
138138
/// use std::boxed;
139139
///

branches/try/src/liballoc/rc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ pub fn is_unique<T>(rc: &Rc<T>) -> bool {
264264
///
265265
/// If the `Rc<T>` is not unique, an `Err` is returned with the same `Rc<T>`.
266266
///
267-
/// # Example
267+
/// # Examples
268268
///
269269
/// ```
270270
/// use std::rc::{self, Rc};
@@ -298,7 +298,7 @@ pub fn try_unwrap<T>(rc: Rc<T>) -> Result<T, Rc<T>> {
298298
///
299299
/// Returns `None` if the `Rc<T>` is not unique.
300300
///
301-
/// # Example
301+
/// # Examples
302302
///
303303
/// ```
304304
/// use std::rc::{self, Rc};

branches/try/src/libcollections/borrow.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ impl<T> ToOwned for T where T: Clone {
127127
/// is desired, `to_mut` will obtain a mutable references to an owned
128128
/// value, cloning if necessary.
129129
///
130-
/// # Example
130+
/// # Examples
131131
///
132132
/// ```rust
133133
/// use std::borrow::Cow;

branches/try/src/libcollections/btree/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ impl<'a, K: Ord, V> OccupiedEntry<'a, K, V> {
11771177
impl<K, V> BTreeMap<K, V> {
11781178
/// Gets an iterator over the entries of the map.
11791179
///
1180-
/// # Example
1180+
/// # Examples
11811181
///
11821182
/// ```
11831183
/// use std::collections::BTreeMap;

branches/try/src/libcollections/fmt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ use string;
420420
///
421421
/// * args - a structure of arguments generated via the `format_args!` macro.
422422
///
423-
/// # Example
423+
/// # Examples
424424
///
425425
/// ```rust
426426
/// use std::fmt;

branches/try/src/libcollections/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ mod prelude {
175175
}
176176

177177
/// An endpoint of a range of keys.
178+
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
178179
pub enum Bound<T> {
179180
/// An inclusive bound.
180181
Included(T),

branches/try/src/libcollections/macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ macro_rules! vec {
4848
/// Use the syntax described in `std::fmt` to create a value of type `String`.
4949
/// See `std::fmt` for more information.
5050
///
51-
/// # Example
51+
/// # Examples
5252
///
5353
/// ```
5454
/// format!("test");

0 commit comments

Comments
 (0)