Skip to content

Commit 03be5b9

Browse files
committed
---
yaml --- r: 130878 b: refs/heads/auto c: b625d43 h: refs/heads/master v: v3
1 parent 289f24c commit 03be5b9

Some content is hidden

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

101 files changed

+2469
-2485
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1313
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1414
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1515
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
16-
refs/heads/auto: cdfa637dadbd3c6f760ecaaf412b06fdc9893f98
16+
refs/heads/auto: b625d43f8fd2e9a800ca8a419f7d3f5f52604205
1717
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1818
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1919
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/Makefile.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
#
6666
# * `VERBOSE=1` - Print all commands. Use this to see what's going on.
6767
# * `RUSTFLAGS=...` - Add compiler flags to all `rustc` invocations
68+
# * `JEMALLOC_FLAGS=...` - Pass flags to jemalloc's configure script
6869
#
6970
# * `TESTNAME=...` - Specify the name of tests to run
7071
# * `CHECK_IGNORED=1` - Run normally-ignored tests

branches/auto/mk/main.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,19 @@ endif
9090
CFG_RUSTC_FLAGS := $(RUSTFLAGS)
9191
CFG_GCCISH_CFLAGS :=
9292
CFG_GCCISH_LINK_FLAGS :=
93+
CFG_JEMALLOC_FLAGS :=
9394

9495
ifdef CFG_DISABLE_OPTIMIZE
9596
$(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
9697
CFG_RUSTC_FLAGS +=
98+
CFG_JEMALLOC_FLAGS += --enable-debug
9799
else
98100
# The rtopt cfg turns off runtime sanity checks
99101
CFG_RUSTC_FLAGS += -O --cfg rtopt
100102
endif
101103

104+
CFG_JEMALLOC_FLAGS += $(JEMALLOC_FLAGS)
105+
102106
ifdef CFG_DISABLE_DEBUG
103107
CFG_RUSTC_FLAGS += --cfg ndebug
104108
CFG_GCCISH_CFLAGS += -DRUST_NDEBUG

branches/auto/mk/rt.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ JEMALLOC_LOCAL_$(1) := $$(JEMALLOC_BUILD_DIR_$(1))/lib/$$(JEMALLOC_REAL_NAME_$(1
301301
$$(JEMALLOC_LOCAL_$(1)): $$(JEMALLOC_DEPS) $$(MKFILE_DEPS)
302302
@$$(call E, make: jemalloc)
303303
cd "$$(JEMALLOC_BUILD_DIR_$(1))"; "$(S)src/jemalloc/configure" \
304-
$$(JEMALLOC_ARGS_$(1)) --with-jemalloc-prefix=je_ \
304+
$$(JEMALLOC_ARGS_$(1)) --with-jemalloc-prefix=je_ $(CFG_JEMALLOC_FLAGS) \
305305
--build=$(CFG_BUILD) --host=$(1) \
306306
CC="$$(CC_$(1))" \
307307
AR="$$(AR_$(1))" \

branches/auto/src/doc/index.md

Lines changed: 73 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,55 @@
11
% Rust Documentation
22

3-
<!-- Completely hide the TOC and the section numbers -->
4-
<style type="text/css">
5-
#TOC { display: none; }
6-
.header-section-number { display: none; }
7-
li {list-style-type: none; }
8-
</style>
3+
Welcome to the Rust documentation! You can use the section headings above
4+
to jump to any particular section.
5+
6+
# Getting Started
7+
8+
If you haven't seen Rust at all yet, the first thing you should read is the [30
9+
minute intro](intro.html). It will give you an overview of the basic ideas of Rust
10+
at a high level.
11+
12+
Once you know you really want to learn Rust, the next step is reading [the
13+
guide](guide.html). It is a lengthy explanation of Rust, its syntax, and its
14+
concepts. Upon completing the guide, you'll be an intermediate Rust developer,
15+
and will have a good grasp of the fundamental ideas behind Rust.
16+
17+
# Community & Getting Help
18+
19+
If you need help with something, or just want to talk about Rust with others,
20+
there's a few places you can do that:
21+
22+
The Rust IRC channels on [irc.mozilla.org](http://irc.mozilla.org/) are the
23+
fastest way to get help.
24+
[`#rust`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust) is
25+
the general discussion channel, and you'll find people willing to help you with
26+
any questions you may have.
27+
28+
There are also three specialty channels:
29+
[`#rust-gamedev`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-gamedev)
30+
and
31+
[`#rust-osdev`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-osdev)
32+
are for game development and operating system development, respectively.
33+
There's also
34+
[`#rust-internals`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals), which is for discussion of the development of Rust itself.
35+
36+
You can also get help on [Stack
37+
Overflow](http://stackoverflow.com/questions/tagged/rust). Searching for your
38+
problem might reveal someone who has asked it before!
39+
40+
There is an active [subreddit](http://reddit.com/r/rust) with lots of
41+
discussion about Rust.
42+
43+
There is also a [developer forum](http://discuss.rust-lang.org/), where the
44+
development of Rust itself is discussed.
945

10-
* [A 30-minute Intro to Rust](intro.html)
11-
* [The Rust tutorial](tutorial.html) (* [PDF](tutorial.pdf))
12-
* [The Rust reference manual](rust.html) (* [PDF](rust.pdf))
1346

1447
# Guides
1548

49+
Rust Guides are in-depth looks at a particular topic that's relevant to Rust
50+
development. If you're trying to figure out how to do something, there may be
51+
a guide that can help you out:
52+
1653
* [Strings](guide-strings.html)
1754
* [Pointers](guide-pointers.html)
1855
* [References and Lifetimes](guide-lifetimes.html)
@@ -24,70 +61,43 @@ li {list-style-type: none; }
2461
* [Testing](guide-testing.html)
2562
* [Rust's Runtime](guide-runtime.html)
2663

64+
# Tools
65+
66+
Rust's still a young language, so there isn't a ton of tooling yet, but the
67+
tools we have are really nice.
68+
69+
[Cargo](http://crates.io) is Rust's package manager, and its website contains
70+
lots of good documentation.
71+
72+
[The `rustdoc` manual](rustdoc.html) contains information about Rust's
73+
documentation tool.
74+
2775
# FAQs
2876

77+
There are questions that are asked quite often, and so we've made FAQs for them:
78+
2979
* [Language Design FAQ](complement-design-faq.html)
3080
* [Language FAQ](complement-lang-faq.html)
3181
* [Project FAQ](complement-project-faq.html)
3282
* [How to submit a bug report](complement-bugreport.html)
3383

34-
# Libraries
35-
36-
* [The standard library, `std`](std/index.html)
37-
38-
<!-- force the two lists to be separate -->
39-
40-
* [The `arena` allocation library](arena/index.html)
41-
* [The `collections` library](collections/index.html)
42-
* [The `flate` compression library](flate/index.html)
43-
* [The `fourcc` four-character code library](fourcc/index.html)
44-
* [The `getopts` argument parsing library](getopts/index.html)
45-
* [The `glob` file path matching library](glob/index.html)
46-
* [The `green` M:N runtime library](green/index.html)
47-
* [The `hexfloat` library for hexadecimal floating-point literals](hexfloat/index.html)
48-
* [The `libc` bindings](libc/index.html)
49-
* [The `native` 1:1 threading runtime](native/index.html)
50-
* [The `num` arbitrary precision numerics library](num/index.html)
51-
* [The `rand` library for random numbers and distributions](rand/index.html)
52-
* [The `regex` library for regular expressions](regex/index.html)
53-
* [The `rustc` compiler](rustc/index.html)
54-
* [The `rustuv` M:N I/O library](rustuv/index.html)
55-
* [The `semver` version collation library](semver/index.html)
56-
* [The `serialize` value encoding/decoding library](serialize/index.html)
57-
* [The `sync` library for concurrency-enabled mechanisms and primitives](sync/index.html)
58-
* [The `syntax` library, the Rust parser](syntax/index.html)
59-
* [The `term` terminal-handling library](term/index.html)
60-
* [The `test` library containing the unit-testing & micro-benchmark framework](test/index.html)
61-
* [The `time` library](time/index.html)
62-
* [The `uuid` 128-bit universally unique identifier library](uuid/index.html)
63-
* [The `url` library](url/index.html)
64-
* [The `log` library](log/index.html)
65-
66-
# Tooling
67-
68-
* [The `rustdoc` manual](rustdoc.html)
84+
# The standard library
85+
86+
You can find function-level documentation for the entire standard library
87+
[here](std/index.html). There's a list of crates on the left with more specific
88+
sections, or you can use the search bar at the top to search for something if
89+
you know its name.
6990

7091
# External documentation
7192

72-
*Note: While these are great resources for learning Rust, they may
73-
track a particular version of Rust that is likely not exactly the same
74-
as that for which this documentation was generated.*
93+
*Note: While these are great resources for learning Rust, they may track a
94+
particular version of Rust that is likely not exactly the same as that for
95+
which this documentation was generated.*
7596

76-
* [Rust for Rubyists] - An excellent introduction for Rust; not just for Rubyists (tracks the most recent release).
77-
* [Rust by Example] - Short examples of common tasks in Rust (tracks the master branch).
78-
* [The Rust wiki](http://github.com/rust-lang/rust/wiki)
97+
* [Rust by Example] - Short examples of common tasks in Rust (tracks the master
98+
branch).
99+
* [Rust for Rubyists] - The first community tutorial for Rust. Tracks the last
100+
stable release. Not just for Ruby programmers.
79101

80-
[Rust for Rubyists]: http://www.rustforrubyists.com/
81102
[Rust by Example]: http://rustbyexample.com/
82-
83-
# Community
84-
85-
* [Reddit](http://reddit.com/r/rust)
86-
* [Stack Overflow](http://stackoverflow.com/questions/tagged/rust)
87-
* [Developer Forum](http://discuss.rust-lang.org/)
88-
* The Rust IRC channels on [irc.mozilla.org](http://irc.mozilla.org/):
89-
* [`#rust`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust) - general discussion
90-
* [`#rust-gamedev`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-gamedev) - game development
91-
* [`#rust-internals`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals) - compiler and libraries
92-
* [`#rust-osdev`](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-osdev) - operating system development
93-
103+
[Rust for Rubyists]: http://www.rustforrubyists.com/

branches/auto/src/doc/rust.md

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3564,34 +3564,36 @@ let (a, b) = p;
35643564
assert!(b != "world");
35653565
~~~~
35663566

3567-
### Vector types
3567+
### Vector, Array, and Slice types
35683568

3569-
The vector type constructor represents a homogeneous array of values of a given type.
3570-
A vector has a fixed size.
3571-
(Operations like `vec.push` operate solely on owned vectors.)
3572-
A vector type can be annotated with a _definite_ size, such as `[int, ..10]`.
3573-
Such a definite-sized vector type is a first-class type, since its size is known statically.
3574-
A vector without such a size is said to be of _indefinite_ size,
3575-
and is therefore not a _first-class_ type.
3576-
An indefinite-size vector can only be instantiated through a pointer type,
3577-
such as `&[T]` or `Vec<T>`.
3578-
The kind of a vector type depends on the kind of its element type,
3579-
as with other simple structural types.
3569+
Rust has three different types for a list of items:
35803570

3581-
Expressions producing vectors of definite size cannot be evaluated in a
3582-
context expecting a vector of indefinite size; one must copy the
3583-
definite-sized vector contents into a distinct vector of indefinite size.
3571+
* `Vec<T>`, a 'vector'
3572+
* `[T ..N]`, an 'array'
3573+
* `&[T]`, a 'slice'.
35843574

3585-
An example of a vector type and its use:
3575+
A vector is a heap-allocated list of `T`. A vector has ownership over the data
3576+
inside of it. It is also able to grow and change in size. It's important to note
3577+
that `Vec<T>` is a library type, it's not actually part of the core language.
35863578

3587-
~~~~
3588-
let v: &[int] = &[7, 5, 3];
3589-
let i: int = v[2];
3590-
assert!(i == 3);
3591-
~~~~
3579+
An array has a fixed size, and can be allocated on either the stack or the heap.
3580+
3581+
A slice is a 'view' into a vector or array. It doesn't own the data it points
3582+
to, it borrows it.
3583+
3584+
An example of each kind:
3585+
3586+
```{rust}
3587+
let vec: Vec<int> = vec![1, 2, 3];
3588+
let arr: [int, ..3] = [1, 2, 3];
3589+
let s: &[int] = vec.as_slice();
3590+
```
3591+
3592+
As you can see, the `vec!` macro allows you to create a `Vec<T>` easily. The
3593+
`vec!` macro is also part of the standard library, rather than the language.
35923594

3593-
All in-bounds elements of a vector are always initialized,
3594-
and access to a vector is always bounds-checked.
3595+
All in-bounds elements of vectors, arrays, and slices are always initialized,
3596+
and access to a vector, array, or slice is always bounds-checked.
35953597

35963598
### Structure types
35973599

branches/auto/src/libcollections/vec.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,19 @@ pub struct MoveItems<T> {
16181618
iter: Items<'static, T>
16191619
}
16201620

1621+
impl<T> MoveItems<T> {
1622+
#[inline]
1623+
/// Drops all items that have not yet been moved and returns the empty vector.
1624+
pub fn unwrap(mut self) -> Vec<T> {
1625+
unsafe {
1626+
for _x in self { }
1627+
let MoveItems { allocation, cap, iter: _iter } = self;
1628+
mem::forget(self);
1629+
Vec { ptr: allocation, cap: cap, len: 0 }
1630+
}
1631+
}
1632+
}
1633+
16211634
impl<T> Iterator<T> for MoveItems<T> {
16221635
#[inline]
16231636
fn next<'a>(&'a mut self) -> Option<T> {
@@ -2016,6 +2029,18 @@ mod tests {
20162029
assert_eq!(vec.swap_remove(0), None);
20172030
}
20182031

2032+
#[test]
2033+
fn test_move_iter_unwrap() {
2034+
let mut vec: Vec<uint> = Vec::with_capacity(7);
2035+
vec.push(1);
2036+
vec.push(2);
2037+
let ptr = vec.as_ptr();
2038+
vec = vec.move_iter().unwrap();
2039+
assert_eq!(vec.as_ptr(), ptr);
2040+
assert_eq!(vec.capacity(), 7);
2041+
assert_eq!(vec.len(), 0);
2042+
}
2043+
20192044
#[bench]
20202045
fn bench_new(b: &mut Bencher) {
20212046
b.iter(|| {

branches/auto/src/librand/isaac.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,19 @@ impl Rng for IsaacRng {
185185
self.isaac();
186186
}
187187
self.cnt -= 1;
188-
self.rsl[self.cnt as uint]
188+
189+
// self.cnt is at most RAND_SIZE, but that is before the
190+
// subtraction above. We want to index without bounds
191+
// checking, but this could lead to incorrect code if someone
192+
// misrefactors, so we check, sometimes.
193+
//
194+
// (Changes here should be reflected in Isaac64Rng.next_u64.)
195+
debug_assert!(self.cnt < RAND_SIZE);
196+
197+
// (the % is cheaply telling the optimiser that we're always
198+
// in bounds, without unsafe. NB. this is a power of two, so
199+
// it optimises to a bitwise mask).
200+
self.rsl[(self.cnt % RAND_SIZE) as uint]
189201
}
190202
}
191203

@@ -416,7 +428,11 @@ impl Rng for Isaac64Rng {
416428
self.isaac64();
417429
}
418430
self.cnt -= 1;
419-
unsafe { *self.rsl.unsafe_get(self.cnt) }
431+
432+
// See corresponding location in IsaacRng.next_u32 for
433+
// explanation.
434+
debug_assert!(self.cnt < RAND_SIZE_64)
435+
self.rsl[(self.cnt % RAND_SIZE_64) as uint]
420436
}
421437
}
422438

branches/auto/src/librustc/back/link.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,12 @@ fn link_args(cmd: &mut Command,
10151015

10161016
// Mark all dynamic libraries and executables as compatible with ASLR
10171017
cmd.arg("-Wl,--dynamicbase");
1018+
1019+
// Mark all dynamic libraries and executables as compatible with the larger 4GiB address
1020+
// space available to x86 Windows binaries on x86_64.
1021+
if sess.targ_cfg.arch == abi::X86 {
1022+
cmd.arg("-Wl,--large-address-aware");
1023+
}
10181024
}
10191025

10201026
if sess.targ_cfg.os == abi::OsAndroid {

0 commit comments

Comments
 (0)