Skip to content

Commit 91eb3ba

Browse files
committed
---
yaml --- r: 138654 b: refs/heads/try2 c: a4175c3 h: refs/heads/master v: v3
1 parent a0d571e commit 91eb3ba

File tree

153 files changed

+3338
-4077
lines changed

Some content is hidden

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

153 files changed

+3338
-4077
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: 347d19934db06f0467377ec138e7415a119f2a3c
8+
refs/heads/try2: a4175c34c3e7ebeee69417abb03953fb81875165
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ You're not off the hook even if you just stick to documentation; code examples i
1111
Pull requests will be treated as "review requests",
1212
and we will give feedback we expect to see corrected on [style](https://github.com/mozilla/rust/wiki/Note-style-guide) and substance before pulling.
1313
Changes contributed via pull request should focus on a single issue at a time, like any other.
14-
We will not accept pull-requests that try to "sneak" unrelated changes in.
14+
We will not look accept pull-requests that try to "sneak" unrelated changes in.
1515

1616
Normally, all pull requests must include regression tests (see [Note-testsuite](https://github.com/mozilla/rust/wiki/Note-testsuite)) that test your change.
1717
Occasionally, a change will be very difficult to test for.

branches/try2/doc/rust.md

Lines changed: 99 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -908,11 +908,6 @@ function defined above on `[1, 2]` will instantiate type parameter `T`
908908
with `int`, and require the closure parameter to have type
909909
`fn(int)`.
910910

911-
The type parameters can also be explicitly supplied in a trailing
912-
[path](#paths) component after the function name. This might be necessary
913-
if there is not sufficient context to determine the type parameters. For
914-
example, `sys::size_of::<u32>() == 4`.
915-
916911
Since a parameter type is opaque to the generic function, the set of
917912
operations that can be performed on it is limited. Values of parameter
918913
type can always be moved, but they can only be copied when the
@@ -1090,15 +1085,6 @@ let p = Point(10, 11);
10901085
let px: int = match p { Point(x, _) => x };
10911086
~~~~
10921087

1093-
A _unit-like struct_ is a structure without any fields, defined by leaving off the fields list entirely.
1094-
Such types will have a single value, just like the [unit value `()`](#unit-and-boolean-literals) of the unit type.
1095-
For example:
1096-
1097-
~~~~
1098-
struct Cookie;
1099-
let c = [Cookie, Cookie, Cookie, Cookie];
1100-
~~~~
1101-
11021088
### Enumerations
11031089

11041090
An _enumeration_ is a simultaneous definition of a nominal [enumerated type](#enumerated-types) as well as a set of *constructors*,
@@ -1299,22 +1285,19 @@ An _implementation_ is an item that implements a [trait](#traits) for a specific
12991285
Implementations are defined with the keyword `impl`.
13001286

13011287
~~~~
1302-
# struct Point {x: float, y: float};
1288+
# type Point = {x: float, y: float};
13031289
# type Surface = int;
1304-
# struct BoundingBox {x: float, y: float, width: float, height: float};
1290+
# type BoundingBox = {x: float, y: float, width: float, height: float};
13051291
# trait Shape { fn draw(Surface); fn bounding_box() -> BoundingBox; }
13061292
# fn do_draw_circle(s: Surface, c: Circle) { }
13071293
1308-
struct Circle {
1309-
radius: float,
1310-
center: Point,
1311-
}
1294+
type Circle = {radius: float, center: Point};
13121295
13131296
impl Shape for Circle {
13141297
fn draw(s: Surface) { do_draw_circle(s, self); }
13151298
fn bounding_box() -> BoundingBox {
13161299
let r = self.radius;
1317-
BoundingBox{x: self.center.x - r, y: self.center.y - r,
1300+
{x: self.center.x - r, y: self.center.y - r,
13181301
width: 2.0 * r, height: 2.0 * r}
13191302
}
13201303
}
@@ -1607,8 +1590,7 @@ struct_expr : expr_path '{' ident ':' expr
16071590
[ ',' ident ':' expr ] *
16081591
[ ".." expr ] '}' |
16091592
expr_path '(' expr
1610-
[ ',' expr ] * ')' |
1611-
expr_path
1593+
[ ',' expr ] * ')'
16121594
~~~~~~~~
16131595

16141596
There are several forms of structure expressions.
@@ -1618,28 +1600,23 @@ providing the field values of a new instance of the structure.
16181600
A field name can be any identifier, and is separated from its value expression by a colon.
16191601
To indicate that a field is mutable, the `mut` keyword is written before its name.
16201602

1621-
A _tuple structure expression_ consists of the [path](#paths) of a [structure item](#structures),
1603+
A _tuple structure expression_ constists of the [path](#paths) of a [structure item](#structures),
16221604
followed by a parenthesized list of one or more comma-separated expressions
16231605
(in other words, the path of a structured item followed by a tuple expression).
16241606
The structure item must be a tuple structure item.
16251607

1626-
A _unit-like structure expression_ consists only of the [path](#paths) of a [structure item](#structures).
1627-
16281608
The following are examples of structure expressions:
16291609

16301610
~~~~
16311611
# struct Point { x: float, y: float }
16321612
# struct TuplePoint(float, float);
16331613
# mod game { pub struct User { name: &str, age: uint, score: uint } }
1634-
# struct Cookie; fn some_fn<T>(t: T) {}
16351614
Point {x: 10f, y: 20f};
16361615
TuplePoint(10f, 20f);
16371616
let u = game::User {name: "Joe", age: 35u, score: 100_000};
1638-
some_fn::<Cookie>(Cookie);
16391617
~~~~
16401618

16411619
A structure expression forms a new value of the named structure type.
1642-
Note that for a given *unit-like* structure type, this will always be the same value.
16431620

16441621
A structure expression can terminate with the syntax `..` followed by an expression to denote a functional update.
16451622
The expression following `..` (the base) must be of the same structure type as the new structure type being formed.
@@ -1660,6 +1637,38 @@ rec_expr : '{' ident ':' expr
16601637
[ ".." expr ] '}'
16611638
~~~~~~~~
16621639

1640+
> **Note:** In future versions of Rust, record expressions and [record types](#record-types) will be removed.
1641+
1642+
A [_record_](#record-types) _expression_ is one or more comma-separated
1643+
name-value pairs enclosed by braces. A fieldname can be any identifier,
1644+
and is separated from its value expression by a
1645+
colon. To indicate that a field is mutable, the `mut` keyword is
1646+
written before its name.
1647+
1648+
~~~~
1649+
{x: 10f, y: 20f};
1650+
{name: "Joe", age: 35u, score: 100_000};
1651+
{ident: "X", mut count: 0u};
1652+
~~~~
1653+
1654+
The order of the fields in a record expression is significant, and
1655+
determines the type of the resulting value. `{a: u8, b: u8}` and `{b:
1656+
u8, a: u8}` are two different fields.
1657+
1658+
A record expression can terminate with the syntax `..` followed by an
1659+
expression to denote a functional update. The expression following
1660+
`..` (the base) must be of a record type that includes at least all the
1661+
fields mentioned in the record expression. A new record will be
1662+
created, of the same type as the base expression, with the given
1663+
values for the fields that were explicitly specified, and the values
1664+
in the base record for all other fields. The ordering of the fields in
1665+
such a record expression is not significant.
1666+
1667+
~~~~
1668+
let base = {x: 1, y: 2, z: 3};
1669+
{y: 0, z: 10, .. base};
1670+
~~~~
1671+
16631672
### Method-call expressions
16641673

16651674
~~~~~~~~{.ebnf .gram}
@@ -1680,7 +1689,7 @@ field_expr : expr '.' ident
16801689

16811690
A _field expression_ consists of an expression followed by a single dot and an identifier,
16821691
when not immediately followed by a parenthesized expression-list (the latter is a [method call expression](#method-call-expressions)).
1683-
A field expression denotes a field of a [structure](#structure-types).
1692+
A field expression denotes a field of a [structure](#structure-types) or [record](#record-types).
16841693

16851694
~~~~~~~~ {.field}
16861695
myrecord.myfield;
@@ -1896,10 +1905,8 @@ An example of three different swap expressions:
18961905
# let mut x = &mut [0];
18971906
# let mut a = &mut [0];
18981907
# let i = 0;
1899-
# struct S1 { z: int };
1900-
# struct S2 { c: int };
1901-
# let mut y = S1{z: 0};
1902-
# let mut b = S2{c: 0};
1908+
# let y = {mut z: 0};
1909+
# let b = {mut c: 0};
19031910
19041911
x <-> a;
19051912
x[i] <-> a[i];
@@ -2033,14 +2040,12 @@ an optional reference slot to serve as the function's output, bound to the
20332040
`lval` on the right hand side of the call. If the function eventually returns,
20342041
then the expression completes.
20352042

2036-
Some examples of call expressions:
2043+
An example of a call expression:
20372044

20382045
~~~~
20392046
# fn add(x: int, y: int) -> int { 0 }
2040-
# use core::from_str::FromStr::from_str;
20412047
20422048
let x: int = add(1, 2);
2043-
let pi = from_str::<f32>("3.14");
20442049
~~~~
20452050

20462051
### Lambda expressions
@@ -2323,6 +2328,42 @@ match x {
23232328
}
23242329
~~~~
23252330

2331+
Records and structures can also be pattern-matched and their fields bound to variables.
2332+
When matching fields of a record,
2333+
the fields being matched are specified first,
2334+
then a placeholder (`_`) represents the remaining fields.
2335+
2336+
~~~~
2337+
# type options = {choose: bool, size: ~str};
2338+
# type player = {player: ~str, stats: (), options: options};
2339+
# fn load_stats() { }
2340+
# fn choose_player(r: &player) { }
2341+
# fn next_player() { }
2342+
2343+
fn main() {
2344+
let r = {
2345+
player: ~"ralph",
2346+
stats: load_stats(),
2347+
options: {
2348+
choose: true,
2349+
size: ~"small"
2350+
}
2351+
};
2352+
2353+
match r {
2354+
{options: {choose: true, _}, _} => {
2355+
choose_player(&r)
2356+
}
2357+
{player: ref p, options: {size: ~"small", _}, _} => {
2358+
log(info, (copy *p) + ~" is small");
2359+
}
2360+
_ => {
2361+
next_player();
2362+
}
2363+
}
2364+
}
2365+
~~~~
2366+
23262367
Patterns that bind variables default to binding to a copy of the matched value. This can be made
23272368
explicit using the ```copy``` keyword, changed to bind to a borrowed pointer by using the ```ref```
23282369
keyword, or to a mutable borrowed pointer using ```ref mut```, or the value can be moved into
@@ -2602,10 +2643,7 @@ the resulting `struct` value will always be laid out in memory in the order spec
26022643
The fields of a `struct` may be qualified by [visibility modifiers](#visibility-modifiers),
26032644
to restrict access to implementation-private data in a structure.
26042645

2605-
A _tuple struct_ type is just like a structure type, except that the fields are anonymous.
2606-
2607-
A _unit-like struct_ type is like a structure type, except that it has no fields.
2608-
The one value constructed by the associated [structure expression](#structure-expression) is the only value that inhabits such a type.
2646+
A `tuple struct` type is just like a structure type, except that the fields are anonymous.
26092647

26102648
### Enumerated types
26112649

@@ -2654,6 +2692,25 @@ let a: List<int> = Cons(7, @Cons(13, @Nil));
26542692
~~~~
26552693

26562694

2695+
### Record types
2696+
2697+
> **Note:** Records are not nominal types, thus do not directly support recursion, visibility control,
2698+
> out-of-order field initialization, or coherent trait implementation.
2699+
> Records are therefore deprecated and will be removed in future versions of Rust.
2700+
> [Structure types](#structure-types) should be used instead.
2701+
2702+
The record type-constructor forms a new heterogeneous product of values.
2703+
Fields of a record type are accessed by name and are arranged in memory in the order specified by the record type.
2704+
2705+
An example of a record type and its use:
2706+
2707+
~~~~
2708+
type Point = {x: int, y: int};
2709+
let p: Point = {x: 10, y: 11};
2710+
let px: int = p.x;
2711+
~~~~
2712+
2713+
26572714
### Pointer types
26582715

26592716
All pointers in Rust are explicit first-class values.
@@ -2983,8 +3040,7 @@ Some operations (such as field selection) implicitly dereference boxes. An
29833040
example of an _implicit dereference_ operation performed on box values:
29843041

29853042
~~~~~~~~
2986-
struct Foo { y: int }
2987-
let x = @Foo{y: 10};
3043+
let x = @{y: 10};
29883044
assert x.y == 10;
29893045
~~~~~~~~
29903046

branches/try2/doc/tutorial-borrowed-ptr.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ operator. For example, I could write:
166166
# struct Point {x: float, y: float} // as before
167167
# struct Size {w: float, h: float} // as before
168168
# struct Rectangle {origin: Point, size: Size}
169-
# let rect_stack = &Rectangle {origin: Point {x: 1f, y: 2f}, size: Size {w: 3f, h: 4f}};
170-
# let rect_managed = @Rectangle {origin: Point {x: 3f, y: 4f}, size: Size {w: 3f, h: 4f}};
171-
# let rect_unique = ~Rectangle {origin: Point {x: 5f, y: 6f}, size: Size {w: 3f, h: 4f}};
169+
# let rect_stack = &{origin: Point {x: 1f, y: 2f}, size: Size {w: 3f, h: 4f}};
170+
# let rect_managed = @{origin: Point {x: 3f, y: 4f}, size: Size {w: 3f, h: 4f}};
171+
# let rect_unique = ~{origin: Point {x: 5f, y: 6f}, size: Size {w: 3f, h: 4f}};
172172
# fn compute_distance(p1: &Point, p2: &Point) -> float { 0f }
173173
compute_distance(&rect_stack.origin, &rect_managed.origin);
174174
~~~
@@ -274,14 +274,13 @@ the following function is legal:
274274

275275
~~~
276276
# fn some_condition() -> bool { true }
277-
# struct Foo { f: int }
278277
fn example3() -> int {
279-
let mut x = ~Foo {f: 3};
278+
let mut x = ~{f: 3};
280279
if some_condition() {
281280
let y = &x.f; // -+ L
282281
return *y; // |
283282
} // -+
284-
x = ~Foo {f: 4};
283+
x = ~{f: 4};
285284
...
286285
# return 0;
287286
}

branches/try2/src/libcore/at_vec.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ pub mod raw {
183183
use at_vec::{capacity, rustrt};
184184
use cast::transmute;
185185
use libc;
186-
use unstable::intrinsics::{move_val_init};
186+
use private::intrinsics::{move_val_init};
187187
use ptr::addr_of;
188188
use ptr;
189189
use sys;

branches/try2/src/libcore/cleanup.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ fn debug_mem() -> bool {
154154
#[cfg(notest)]
155155
#[lang="annihilate"]
156156
pub unsafe fn annihilate() {
157-
use unstable::lang::local_free;
157+
use rt::local_free;
158158
use io::WriterUtil;
159159
use io;
160160
use libc;

0 commit comments

Comments
 (0)