Skip to content

Commit 6d6aba0

Browse files
committed
---
yaml --- r: 151340 b: refs/heads/try2 c: 1f6db7f h: refs/heads/master v: v3
1 parent 1396ca4 commit 6d6aba0

File tree

201 files changed

+3209
-1259
lines changed

Some content is hidden

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

201 files changed

+3209
-1259
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: a8da4f7309f1684d7c229de494c2527b6089b314
8+
refs/heads/try2: 1f6db7f4f6399628eaaca5d38cc5fb38e71b4c23
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/AUTHORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ Raphael Speyer <[email protected]>
362362
reedlepee <[email protected]>
363363
Reuben Morais <[email protected]>
364364
Richard Diamond <[email protected]>
365+
Richo Healey <[email protected]>
365366
Rick Waldron <[email protected]>
366367
Rob Arnold <[email protected]>
367368
Rob Hoelz <[email protected]>

branches/try2/CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ message explaining why.
3333

3434
In the licensing header at the beginning of any files you change,
3535
please make sure the listed date range includes the current year. For
36-
example, if it's 2013, and you change a Rust file that was created in
36+
example, if it's 2014, and you change a Rust file that was created in
3737
2010, it should begin:
3838

3939
```
40-
// Copyright 2010-2013 The Rust Project Developers.
40+
// Copyright 2010-2014 The Rust Project Developers.
4141
```
4242

4343
For more details, please refer to

branches/try2/LICENSE-MIT

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
Copyright (c) 2006-2009 Graydon Hoare
2-
Copyright (c) 2009-2014 Mozilla Foundation
1+
Copyright (c) 2014 The Rust Project Developers
32

43
Permission is hereby granted, free of charge, to any
54
person obtaining a copy of this software and associated

branches/try2/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ documentation.
2020
## Building from Source
2121

2222
1. Make sure you have installed the dependencies:
23-
* `g++` 4.4 or `clang++` 3.x
23+
* `g++` 4.7 or `clang++` 3.x
2424
* `python` 2.6 or later (but not 3.x)
2525
* `perl` 5.0 or later
2626
* GNU `make` 3.81 or later

branches/try2/mk/crates.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
TARGET_CRATES := libc std green rustuv native flate arena glob term semver \
5353
uuid serialize sync getopts collections num test time rand \
54-
workcache url log regex
54+
workcache url log regex graphviz
5555
HOST_CRATES := syntax rustc rustdoc fourcc hexfloat regex_macros
5656
CRATES := $(TARGET_CRATES) $(HOST_CRATES)
5757
TOOLS := compiletest rustdoc rustc
@@ -67,6 +67,7 @@ DEPS_rustdoc := rustc native:sundown serialize sync getopts collections \
6767
test time
6868
DEPS_flate := std native:miniz
6969
DEPS_arena := std collections
70+
DEPS_graphviz := std
7071
DEPS_glob := std
7172
DEPS_serialize := std collections log
7273
DEPS_term := std collections

branches/try2/mk/platform.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
330330
CFG_LDPATH_arm-unknown-linux-gnueabihf :=
331331
CFG_RUN_arm-unknown-linux-gnueabihf=$(2)
332332
CFG_RUN_TARG_arm-unknown-linux-gnueabihf=$(call CFG_RUN_arm-unknown-linux-gnueabihf,,$(2))
333-
RUSTC_FLAGS_arm-unknown-linux-gnueabihf := -C target-feature=+v7,+vfp3
333+
RUSTC_FLAGS_arm-unknown-linux-gnueabihf := -C target-feature=+v6,+vfp2
334334
RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabihf :=
335335

336336
# arm-unknown-linux-gnueabi configuration

branches/try2/src/doc/guide-pointers.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ enum List<T> {
186186
Nil,
187187
Cons(T, ~List<T>),
188188
}
189-
189+
190190
fn main() {
191191
let list: List<int> = Cons(1, ~Cons(2, ~Cons(3, ~Nil)));
192192
println!("{:?}", list);
@@ -251,7 +251,7 @@ struct.
251251

252252
> **Note**: the `@` form of managed pointers is deprecated and behind a
253253
> feature gate (it requires a `#![feature(managed_pointers)]` attribute on
254-
> the crate root; remember the semicolon!). There are replacements, currently
254+
> the crate root). There are replacements, currently
255255
> there is `std::rc::Rc` and `std::gc::Gc` for shared ownership via reference
256256
> counting and garbage collection respectively.
257257
@@ -266,7 +266,7 @@ struct Point {
266266
x: int,
267267
y: int,
268268
}
269-
269+
270270
fn main() {
271271
let a = ~Point { x: 10, y: 20 };
272272
let b = a;
@@ -297,7 +297,7 @@ struct Point {
297297
x: int,
298298
y: int,
299299
}
300-
300+
301301
fn main() {
302302
let a = @Point { x: 10, y: 20 };
303303
let b = a;
@@ -361,7 +361,7 @@ So how is this hard? Well, because we're ignoring ownership, the compiler needs
361361
to take great care to make sure that everything is safe. Despite their complete
362362
safety, a reference's representation at runtime is the same as that of
363363
an ordinary pointer in a C program. They introduce zero overhead. The compiler
364-
does all safety checks at compile time.
364+
does all safety checks at compile time.
365365

366366
This theory is called 'region pointers,' and involve a concept called
367367
'lifetimes'. Here's the simple explanation: would you expect this code to
@@ -477,7 +477,7 @@ fn main() {
477477
You may think that this gives us terrible performance: return a value and then
478478
immediately box it up?!?! Isn't that the worst of both worlds? Rust is smarter
479479
than that. There is no copy in this code. `main` allocates enough room for the
480-
`@int`, passes a pointer to that memory into `foo` as `x`, and then `foo` writes
480+
`@int`, passes a pointer to that memory into `foo` as `x`, and then `foo` writes
481481
the value straight into that pointer. This writes the return value directly into
482482
the allocated box.
483483

branches/try2/src/doc/guide-tasks.md

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,7 @@ concurrency at this writing:
4848
* [`std::task`] - All code relating to tasks and task scheduling,
4949
* [`std::comm`] - The message passing interface,
5050
* [`sync::DuplexStream`] - An extension of `pipes::stream` that allows both sending and receiving,
51-
* [`sync::SyncSender`] - An extension of `pipes::stream` that provides synchronous message sending,
52-
* [`sync::SyncReceiver`] - An extension of `pipes::stream` that acknowledges each message received,
53-
* [`sync::rendezvous`] - Creates a stream whose channel, upon sending a message, blocks until the
54-
message is received.
5551
* [`sync::Arc`] - The Arc (atomically reference counted) type, for safely sharing immutable data,
56-
* [`sync::RWArc`] - A dual-mode Arc protected by a reader-writer lock,
57-
* [`sync::MutexArc`] - An Arc with mutable data protected by a blocking mutex,
5852
* [`sync::Semaphore`] - A counting, blocking, bounded-waiting semaphore,
5953
* [`sync::Mutex`] - A blocking, bounded-waiting, mutual exclusion lock with an associated
6054
FIFO condition variable,
@@ -70,13 +64,8 @@ concurrency at this writing:
7064
[`std::task`]: std/task/index.html
7165
[`std::comm`]: std/comm/index.html
7266
[`sync::DuplexStream`]: sync/struct.DuplexStream.html
73-
[`sync::SyncSender`]: sync/struct.SyncSender.html
74-
[`sync::SyncReceiver`]: sync/struct.SyncReceiver.html
75-
[`sync::rendezvous`]: sync/fn.rendezvous.html
7667
[`sync::Arc`]: sync/struct.Arc.html
77-
[`sync::RWArc`]: sync/struct.RWArc.html
78-
[`sync::MutexArc`]: sync/struct.MutexArc.html
79-
[`sync::Semaphore`]: sync/struct.Semaphore.html
68+
[`sync::Semaphore`]: sync/raw/struct.Semaphore.html
8069
[`sync::Mutex`]: sync/struct.Mutex.html
8170
[`sync::RWLock`]: sync/struct.RWLock.html
8271
[`sync::Barrier`]: sync/struct.Barrier.html
@@ -100,7 +89,10 @@ closure in the new task.
10089
fn print_message() { println!("I am running in a different task!"); }
10190
spawn(print_message);
10291
103-
// Print something more profound in a different task using a lambda expression
92+
// Print something profound in a different task using a `proc` expression
93+
// The `proc` expression evaluates to an (unnamed) owned closure.
94+
// That closure will call `println!(...)` when the spawned task runs.
95+
10496
spawn(proc() println!("I am also running in a different task!") );
10597
~~~~
10698

branches/try2/src/doc/intro.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ fn main() {
370370
```
371371

372372
This example is starting to get more subtle,
373-
but it hints at the powerful compositionality of Rust's concurrent types.
373+
but it hints at the powerful composability of Rust's concurrent types.
374374
This time we've put our array of numbers inside a `Mutex` and then put *that* inside the `Arc`.
375375
Like immutable data,
376376
`Mutex`es are sharable,

branches/try2/src/doc/tutorial.md

Lines changed: 102 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ supported build environments that are most likely to work.
9090
To build from source you will also need the following prerequisite
9191
packages:
9292

93-
* g++ 4.4 or clang++ 3.x
93+
* g++ 4.7 or clang++ 3.x
9494
* python 2.6 or later (but not 3.x)
9595
* perl 5.0 or later
9696
* gnu make 3.81 or later
@@ -468,19 +468,16 @@ Unlike in C, there is no "falling through" between arms: only one arm
468468
executes, and it doesn't have to explicitly `break` out of the
469469
construct when it is finished.
470470

471-
A `match` arm consists of a *pattern*, then an arrow `=>`, followed by
472-
an *action* (expression). Literals are valid patterns and match only
473-
their own value. A single arm may match multiple different patterns by
474-
combining them with the pipe operator (`|`), so long as every pattern
475-
binds the same set of variables. Ranges of numeric literal patterns
476-
can be expressed with two dots, as in `M..N`. The underscore (`_`) is
477-
a wildcard pattern that matches any single value. (`..`) is a different
478-
wildcard that can match one or more fields in an `enum` variant.
479-
480-
The patterns in a match arm are followed by a fat arrow, `=>`, then an
481-
expression to evaluate. Each case is separated by commas. It's often
482-
convenient to use a block expression for each case, in which case the
483-
commas are optional.
471+
A `match` arm consists of a *pattern*, then a fat arrow `=>`, followed
472+
by an *action* (expression). Each case is separated by commas. It is
473+
often convenient to use a block expression for each case, in which case
474+
the commas are optional as shown below. Literals are valid patterns and
475+
match only their own value. A single arm may match multiple different
476+
patterns by combining them with the pipe operator (`|`), so long as every
477+
pattern binds the same set of variables. Ranges of numeric literal
478+
patterns can be expressed with two dots, as in `M..N`. The underscore
479+
(`_`) is a wildcard pattern that matches any single value. (`..`) is a
480+
different wildcard that can match one or more fields in an `enum` variant.
484481

485482
~~~
486483
# let my_number = 1;
@@ -1416,7 +1413,7 @@ contains a point, but allocated in a different location:
14161413
14171414
~~~
14181415
# struct Point { x: f64, y: f64 }
1419-
let on_the_stack : Point = Point { x: 3.0, y: 4.0 };
1416+
let on_the_stack : Point = Point { x: 3.0, y: 4.0 };
14201417
let owned_box : ~Point = ~Point { x: 7.0, y: 9.0 };
14211418
~~~
14221419
@@ -1720,38 +1717,103 @@ environment (sometimes referred to as "capturing" variables in their
17201717
environment). For example, you couldn't write the following:
17211718
17221719
~~~~ {.ignore}
1723-
let foo = 10;
1720+
let x = 3;
17241721
1725-
fn bar() -> int {
1726-
return foo; // `bar` cannot refer to `foo`
1727-
}
1722+
// `fun` cannot refer to `x`
1723+
fn fun() -> () { println!("{}", x); }
17281724
~~~~
17291725
1730-
Rust also supports _closures_, functions that can access variables in
1731-
the enclosing scope.
1726+
A _closure_ does support accessing the enclosing scope; below we will create
1727+
2 _closures_ (nameless functions). Compare how `||` replaces `()` and how
1728+
they try to access `x`:
17321729
1733-
~~~~
1734-
fn call_closure_with_ten(b: |int|) { b(10); }
1730+
~~~~ {.ignore}
1731+
let x = 3;
17351732
1736-
let captured_var = 20;
1737-
let closure = |arg| println!("captured_var={}, arg={}", captured_var, arg);
1733+
// `fun` is an invalid definition
1734+
fn fun () -> () { println!("{}", x) } // cannot capture from enclosing scope
1735+
let closure = || -> () { println!("{}", x) }; // can capture from enclosing scope
17381736
1739-
call_closure_with_ten(closure);
1737+
// `fun_arg` is an invalid definition
1738+
fn fun_arg (arg: int) -> () { println!("{}", arg + x) } // cannot capture
1739+
let closure_arg = |arg: int| -> () { println!("{}", arg + x) }; // can capture
1740+
// ^
1741+
// Requires a type because the implementation needs to know which `+` to use.
1742+
// In the future, the implementation may not need the help.
1743+
1744+
fun(); // Still won't work
1745+
closure(); // Prints: 3
1746+
1747+
fun_arg(7); // Still won't work
1748+
closure_arg(7); // Prints: 10
17401749
~~~~
17411750
17421751
Closures begin with the argument list between vertical bars and are followed by
17431752
a single expression. Remember that a block, `{ <expr1>; <expr2>; ... }`, is
17441753
considered a single expression: it evaluates to the result of the last
17451754
expression it contains if that expression is not followed by a semicolon,
1746-
otherwise the block evaluates to `()`.
1755+
otherwise the block evaluates to `()`, the unit value.
1756+
1757+
In general, return types and all argument types must be specified
1758+
explicitly for function definitions. (As previously mentioned in the
1759+
[Functions section](#functions), omitting the return type from a
1760+
function declaration is synonymous with an explicit declaration of
1761+
return type unit, `()`.)
17471762
1748-
The types of the arguments are generally omitted, as is the return type,
1749-
because the compiler can almost always infer them. In the rare case where the
1750-
compiler needs assistance, though, the arguments and return types may be
1751-
annotated.
1763+
~~~~ {.ignore}
1764+
fn fun (x: int) { println!("{}", x) } // this is same as saying `-> ()`
1765+
fn square(x: int) -> uint { (x * x) as uint } // other return types are explicit
17521766
1767+
// Error: mismatched types: expected `()` but found `uint`
1768+
fn badfun(x: int) { (x * x) as uint }
17531769
~~~~
1754-
let square = |x: int| -> uint { (x * x) as uint };
1770+
1771+
On the other hand, the compiler can usually infer both the argument
1772+
and return types for a closure expression; therefore they are often
1773+
omitted, since both a human reader and the compiler can deduce the
1774+
types from the immediate context. This is in contrast to function
1775+
declarations, which require types to be specified and are not subject
1776+
to type inference. Compare:
1777+
1778+
~~~~ {.ignore}
1779+
// `fun` as a function declaration cannot infer the type of `x`, so it must be provided
1780+
fn fun (x: int) { println!("{}", x) }
1781+
let closure = |x | { println!("{}", x) }; // infers `x: int`, return type `()`
1782+
1783+
// For closures, omitting a return type is *not* synonymous with `-> ()`
1784+
let add_3 = |y | { 3i + y }; // infers `y: int`, return type `int`.
1785+
1786+
fun(10); // Prints 10
1787+
closure(20); // Prints 20
1788+
closure(add_3(30)); // Prints 33
1789+
1790+
fun("String"); // Error: mismatched types
1791+
1792+
// Error: mismatched types
1793+
// inference already assigned `closure` the type `|int| -> ()`
1794+
closure("String");
1795+
~~~~
1796+
1797+
In cases where the compiler needs assistance, the arguments and return
1798+
types may be annotated on closures, using the same notation as shown
1799+
earlier. In the example below, since different types provide an
1800+
implementation for the operator `*`, the argument type for the `x`
1801+
parameter must be explicitly provided.
1802+
1803+
~~~~{.ignore}
1804+
// Error: the type of `x` must be known to be used with `x * x`
1805+
let square = |x | -> uint { (x * x) as uint };
1806+
~~~~
1807+
1808+
In the corrected version, the argument type is explicitly annotated,
1809+
while the return type can still be inferred.
1810+
1811+
~~~~
1812+
let square_explicit = |x: int| -> uint { (x * x) as uint };
1813+
let square_infer = |x: int| { (x * x) as uint };
1814+
1815+
println!("{}", square_explicit(20)); // 400
1816+
println!("{}", square_infer(-20)); // 400
17551817
~~~~
17561818
17571819
There are several forms of closure, each with its own role. The most
@@ -2522,11 +2584,18 @@ for `Eq` and can be used with the equality operators, and that a value
25222584
of type `ABC` can be randomly generated and converted to a string:
25232585

25242586
~~~
2587+
extern crate rand;
2588+
25252589
#[deriving(Eq)]
25262590
struct Circle { radius: f64 }
25272591
2528-
#[deriving(Clone, Show)]
2592+
#[deriving(Rand, Show)]
25292593
enum ABC { A, B, C }
2594+
2595+
fn main() {
2596+
// Use the Show trait to print "A, B, C."
2597+
println!("{}, {}, {}", A, B, C);
2598+
}
25302599
~~~
25312600

25322601
The full list of derivable traits is `Eq`, `TotalEq`, `Ord`,

branches/try2/src/etc/emacs/README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ To install manually, check out this repository and add this to your
1212

1313
```lisp
1414
(add-to-list 'load-path "/path/to/rust-mode/")
15-
(require 'rust-mode)
15+
(autoload 'rust-mode "rust-mode" nil t)
16+
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))
1617
```
1718

18-
`rust-mode` will automatically be associated with `.rs` files. To enable it
19-
explicitly, do <kbd>M-x rust-mode</kbd>.
19+
This associates `rust-mode` with `.rs` files. To enable it explicitly, do
20+
<kbd>M-x rust-mode</kbd>.
2021

2122
### `package.el` installation via Marmalade or MELPA
2223

branches/try2/src/etc/emacs/rust-mode.el

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@
169169
;; Font-locking definitions and helpers
170170
(defconst rust-mode-keywords
171171
'("as"
172-
"break"
172+
"box" "break"
173173
"continue" "crate"
174174
"do"
175175
"else" "enum" "extern"

0 commit comments

Comments
 (0)