Skip to content

Commit ba20495

Browse files
committed
---
yaml --- r: 151319 b: refs/heads/try2 c: 7583544 h: refs/heads/master i: 151317: b4144b4 151315: 24b7442 151311: 9171acb v: v3
1 parent f3d7691 commit ba20495

File tree

199 files changed

+2955
-1254
lines changed

Some content is hidden

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

199 files changed

+2955
-1254
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: ceb29314a7e6fc2d9f3527e36534b2d1608394d8
8+
refs/heads/try2: 7583544fb541b9822dd658e5bf7aae1233cb5794
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

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/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: 3 additions & 12 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
@@ -101,6 +90,8 @@ fn print_message() { println!("I am running in a different task!"); }
10190
spawn(print_message);
10291
10392
// Print something more profound in a different task using a lambda expression
93+
// This uses the proc() keyword to assign to spawn a function with no name
94+
// That function will call println!(...) as requested
10495
spawn(proc() println!("I am also running in a different task!") );
10596
~~~~
10697

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"

branches/try2/src/libarena/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ mod tests {
517517
#[bench]
518518
pub fn bench_copy_nonarena(b: &mut Bencher) {
519519
b.iter(|| {
520-
~Point {
520+
box Point {
521521
x: 1,
522522
y: 2,
523523
z: 3,
@@ -569,7 +569,7 @@ mod tests {
569569
#[bench]
570570
pub fn bench_noncopy_nonarena(b: &mut Bencher) {
571571
b.iter(|| {
572-
~Noncopy {
572+
box Noncopy {
573573
string: "hello world".to_owned(),
574574
array: vec!( 1, 2, 3, 4, 5 ),
575575
}

0 commit comments

Comments
 (0)