Skip to content

Commit 9c9eede

Browse files
committed
---
yaml --- r: 60343 b: refs/heads/master c: 5af8646 h: refs/heads/master i: 60341: 371ef8b 60339: 4a4746c 60335: b25ae8c v: v3
1 parent 865438d commit 9c9eede

File tree

299 files changed

+3397
-4114
lines changed

Some content is hidden

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

299 files changed

+3397
-4114
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 729708d1124bc7318b98b69aadca987e7fe80a8d
2+
refs/heads/master: 5af8646a8b6caf0bc71fb258225ba4f814152c1d
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 2d28d645422c1617be58c8ca7ad9a457264ca850
55
refs/heads/try: c50a9d5b664478e533ba1d1d353213d70c8ad589

trunk/configure

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -695,9 +695,6 @@ do
695695
# host lib dir
696696
make_dir $h/stage$i/$CFG_LIBDIR
697697

698-
# host test dir
699-
make_dir $h/stage$i/test
700-
701698
# target bin dir
702699
make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/bin
703700

trunk/doc/rust.md

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ each of which may have some number of [attributes](#attributes) attached to it.
618618

619619
~~~~~~~~ {.ebnf .gram}
620620
item : mod_item | fn_item | type_item | struct_item | enum_item
621-
| static_item | trait_item | impl_item | extern_block ;
621+
| static_item | trait_item | impl_item | foreign_mod_item ;
622622
~~~~~~~~
623623

624624
An _item_ is a component of a crate; some module items can be defined in crate
@@ -752,11 +752,10 @@ link_attr : ident '=' literal ;
752752
~~~~~~~~
753753

754754
An _`extern mod` declaration_ specifies a dependency on an external crate.
755-
The external crate is then bound into the declaring scope
756-
as the `ident` provided in the `extern_mod_decl`.
755+
The external crate is then bound into the declaring scope as the `ident` provided in the `extern_mod_decl`.
757756

758-
The external crate is resolved to a specific `soname` at compile time,
759-
and a runtime linkage requirement to that `soname` is passed to the linker for
757+
The external crate is resolved to a specific `soname` at compile time, and a
758+
runtime linkage requirement to that `soname` is passed to the linker for
760759
loading at runtime. The `soname` is resolved at compile time by scanning the
761760
compiler's library path and matching the `link_attrs` provided in the
762761
`use_decl` against any `#link` attributes that were declared on the external
@@ -993,10 +992,10 @@ Thus the return type on `f` only needs to reflect the `if` branch of the conditi
993992
#### Extern functions
994993

995994
Extern functions are part of Rust's foreign function interface,
996-
providing the opposite functionality to [external blocks](#external-blocks).
997-
Whereas external blocks allow Rust code to call foreign code,
998-
extern functions with bodies defined in Rust code _can be called by foreign
999-
code_. They are defined in the same way as any other Rust function,
995+
providing the opposite functionality to [foreign modules](#foreign-modules).
996+
Whereas foreign modules allow Rust code to call foreign code,
997+
extern functions with bodies defined in Rust code _can be called by foreign code_.
998+
They are defined in the same way as any other Rust function,
1000999
except that they have the `extern` modifier.
10011000

10021001
~~~
@@ -1012,8 +1011,7 @@ let fptr: *u8 = new_vec;
10121011
~~~
10131012

10141013
The primary motivation for extern functions is
1015-
to create callbacks for foreign functions that expect to receive function
1016-
pointers.
1014+
to create callbacks for foreign functions that expect to receive function pointers.
10171015

10181016
### Type definitions
10191017

@@ -1310,61 +1308,64 @@ impl Seq<bool> for u32 {
13101308
}
13111309
~~~~
13121310

1313-
### External blocks
1311+
### Foreign modules
13141312

13151313
~~~ {.ebnf .gram}
1316-
extern_block_item : "extern" '{' extern_block '} ;
1317-
extern_block : [ foreign_fn ] * ;
1314+
foreign_mod_item : "extern mod" ident '{' foreign_mod '} ;
1315+
foreign_mod : [ foreign_fn ] * ;
13181316
~~~
13191317

1320-
External blocks form the basis for Rust's foreign function interface.
1321-
Declarations in an external block describe symbols
1322-
in external, non-Rust libraries.
1323-
1324-
Functions within external blocks
1325-
are declared in the same way as other Rust functions,
1326-
with the exception that they may not have a body
1327-
and are instead terminated by a semicolon.
1318+
Foreign modules form the basis for Rust's foreign function interface. A
1319+
foreign module describes functions in external, non-Rust
1320+
libraries.
1321+
Functions within foreign modules are declared in the same way as other Rust functions,
1322+
with the exception that they may not have a body and are instead terminated by a semicolon.
13281323

13291324
~~~
13301325
# use core::libc::{c_char, FILE};
13311326
# #[nolink]
13321327
1333-
extern {
1328+
extern mod c {
13341329
fn fopen(filename: *c_char, mode: *c_char) -> *FILE;
13351330
}
13361331
~~~
13371332

1338-
Functions within external blocks may be called by Rust code,
1339-
just like functions defined in Rust.
1340-
The Rust compiler automatically translates
1341-
between the Rust ABI and the foreign ABI.
1333+
Functions within foreign modules may be called by Rust code, just like functions defined in Rust.
1334+
The Rust compiler automatically translates between the Rust ABI and the foreign ABI.
1335+
1336+
The name of the foreign module has special meaning to the Rust compiler in
1337+
that it will treat the module name as the name of a library to link to,
1338+
performing the linking as appropriate for the target platform. The name
1339+
given for the foreign module will be transformed in a platform-specific way
1340+
to determine the name of the library. For example, on Linux the name of the
1341+
foreign module is prefixed with 'lib' and suffixed with '.so', so the
1342+
foreign mod 'rustrt' would be linked to a library named 'librustrt.so'.
13421343

1343-
A number of [attributes](#attributes) control the behavior of external
1344-
blocks.
1344+
A number of [attributes](#attributes) control the behavior of foreign
1345+
modules.
13451346

1346-
By default external blocks assume
1347-
that the library they are calling uses the standard C "cdecl" ABI.
1348-
Other ABIs may be specified using the `abi` attribute as in
1347+
By default foreign modules assume that the library they are calling use the
1348+
standard C "cdecl" ABI. Other ABIs may be specified using the `abi`
1349+
attribute as in
13491350

13501351
~~~{.xfail-test}
13511352
// Interface to the Windows API
13521353
#[abi = "stdcall"]
1353-
extern { }
1354+
extern mod kernel32 { }
13541355
~~~
13551356

1356-
The `link_name` attribute allows the name of the library to be specified.
1357+
The `link_name` attribute allows the default library naming behavior to
1358+
be overridden by explicitly specifying the name of the library.
13571359

13581360
~~~{.xfail-test}
13591361
#[link_name = "crypto"]
1360-
extern { }
1362+
extern mod mycrypto { }
13611363
~~~
13621364

1363-
The `nolink` attribute tells the Rust compiler
1364-
not to do any linking for the external block.
1365-
This is particularly useful for creating external blocks for libc,
1366-
which tends to not follow standard library naming conventions
1367-
and is linked to all Rust programs anyway.
1365+
The `nolink` attribute tells the Rust compiler not to do any linking for the foreign module.
1366+
This is particularly useful for creating foreign
1367+
modules for libc, which tends to not follow standard library naming
1368+
conventions and is linked to all Rust programs anyway.
13681369

13691370
## Attributes
13701371

@@ -2386,9 +2387,9 @@ enum List<X> { Nil, Cons(X, @List<X>) }
23862387
let x: List<int> = Cons(10, @Cons(11, @Nil));
23872388
23882389
match x {
2389-
Cons(_, @Nil) => fail!("singleton list"),
2390+
Cons(_, @Nil) => fail!(~"singleton list"),
23902391
Cons(*) => return,
2391-
Nil => fail!("empty list")
2392+
Nil => fail!(~"empty list")
23922393
}
23932394
~~~~
23942395

trunk/doc/tutorial-borrowed-ptr.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ point, but allocated in a different place:
4242
~~~
4343
# struct Point {x: float, y: float}
4444
let on_the_stack : Point = Point {x: 3.0, y: 4.0};
45-
let managed_box : @Point = @Point {x: 5.0, y: 1.0};
46-
let owned_box : ~Point = ~Point {x: 7.0, y: 9.0};
45+
let shared_box : @Point = @Point {x: 5.0, y: 1.0};
46+
let unique_box : ~Point = ~Point {x: 7.0, y: 9.0};
4747
~~~
4848

4949
Suppose we wanted to write a procedure that computed the distance between any
5050
two points, no matter where they were stored. For example, we might like to
51-
compute the distance between `on_the_stack` and `managed_box`, or between
52-
`managed_box` and `owned_box`. One option is to define a function that takes
51+
compute the distance between `on_the_stack` and `shared_box`, or between
52+
`shared_box` and `unique_box`. One option is to define a function that takes
5353
two arguments of type `Point`—that is, it takes the points by value. But if we
5454
define it this way, calling the function will cause the points to be
5555
copied. For points, this is probably not so bad, but often copies are
@@ -73,11 +73,11 @@ Now we can call `compute_distance()` in various ways:
7373
~~~
7474
# struct Point {x: float, y: float}
7575
# let on_the_stack : Point = Point{x: 3.0, y: 4.0};
76-
# let managed_box : @Point = @Point{x: 5.0, y: 1.0};
77-
# let owned_box : ~Point = ~Point{x: 7.0, y: 9.0};
76+
# let shared_box : @Point = @Point{x: 5.0, y: 1.0};
77+
# let unique_box : ~Point = ~Point{x: 7.0, y: 9.0};
7878
# fn compute_distance(p1: &Point, p2: &Point) -> float { 0f }
79-
compute_distance(&on_the_stack, managed_box);
80-
compute_distance(managed_box, owned_box);
79+
compute_distance(&on_the_stack, shared_box);
80+
compute_distance(shared_box, unique_box);
8181
~~~
8282

8383
Here, the `&` operator takes the address of the variable
@@ -87,11 +87,11 @@ value. We also call this _borrowing_ the local variable
8787
`on_the_stack`, because we have created an alias: that is, another
8888
name for the same data.
8989

90-
In contrast, we can pass the boxes `managed_box` and `owned_box` to
90+
In contrast, we can pass the boxes `shared_box` and `unique_box` to
9191
`compute_distance` directly. The compiler automatically converts a box like
9292
`@Point` or `~Point` to a borrowed pointer like `&Point`. This is another form
93-
of borrowing: in this case, the caller lends the contents of the managed or
94-
owned box to the callee.
93+
of borrowing: in this case, the caller lends the contents of the shared or
94+
unique box to the callee.
9595

9696
Whenever a caller lends data to a callee, there are some limitations on what
9797
the caller can do with the original. For example, if the contents of a
@@ -155,7 +155,7 @@ let rect_stack = &Rectangle {origin: Point {x: 1f, y: 2f},
155155
size: Size {w: 3f, h: 4f}};
156156
let rect_managed = @Rectangle {origin: Point {x: 3f, y: 4f},
157157
size: Size {w: 3f, h: 4f}};
158-
let rect_owned = ~Rectangle {origin: Point {x: 5f, y: 6f},
158+
let rect_unique = ~Rectangle {origin: Point {x: 5f, y: 6f},
159159
size: Size {w: 3f, h: 4f}};
160160
~~~
161161

@@ -168,7 +168,7 @@ operator. For example, I could write:
168168
# struct Rectangle {origin: Point, size: Size}
169169
# let rect_stack = &Rectangle {origin: Point {x: 1f, y: 2f}, size: Size {w: 3f, h: 4f}};
170170
# let rect_managed = @Rectangle {origin: Point {x: 3f, y: 4f}, size: Size {w: 3f, h: 4f}};
171-
# let rect_owned = ~Rectangle {origin: Point {x: 5f, y: 6f}, size: Size {w: 3f, h: 4f}};
171+
# let rect_unique = ~Rectangle {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
~~~
@@ -179,7 +179,7 @@ as well as from the managed box, and then compute the distance between them.
179179
# Borrowing managed boxes and rooting
180180

181181
We’ve seen a few examples so far of borrowing heap boxes, both managed
182-
and owned. Up till this point, we’ve glossed over issues of
182+
and unique. Up till this point, we’ve glossed over issues of
183183
safety. As stated in the introduction, at runtime a borrowed pointer
184184
is simply a pointer, nothing more. Therefore, avoiding C's problems
185185
with dangling pointers requires a compile-time safety check.
@@ -258,18 +258,18 @@ fn example2() {
258258
Now if `x` is reassigned, the pointer `y` will still remain valid. This
259259
process is called *rooting*.
260260

261-
# Borrowing owned boxes
261+
# Borrowing unique boxes
262262

263263
The previous example demonstrated *rooting*, the process by which the
264264
compiler ensures that managed boxes remain live for the duration of a
265-
borrow. Unfortunately, rooting does not work for borrows of owned
266-
boxes, because it is not possible to have two references to a owned
265+
borrow. Unfortunately, rooting does not work for borrows of unique
266+
boxes, because it is not possible to have two references to a unique
267267
box.
268268

269-
For owned boxes, therefore, the compiler will only allow a borrow *if
270-
the compiler can guarantee that the owned box will not be reassigned
269+
For unique boxes, therefore, the compiler will only allow a borrow *if
270+
the compiler can guarantee that the unique box will not be reassigned
271271
or moved for the lifetime of the pointer*. This does not necessarily
272-
mean that the owned box is stored in immutable memory. For example,
272+
mean that the unique box is stored in immutable memory. For example,
273273
the following function is legal:
274274

275275
~~~
@@ -294,7 +294,7 @@ and `x` is declared as mutable. However, the compiler can prove that
294294
and in fact is mutated later in the function.
295295

296296
It may not be clear why we are so concerned about mutating a borrowed
297-
variable. The reason is that the runtime system frees any owned box
297+
variable. The reason is that the runtime system frees any unique box
298298
_as soon as its owning reference changes or goes out of
299299
scope_. Therefore, a program like this is illegal (and would be
300300
rejected by the compiler):
@@ -342,7 +342,7 @@ which has been freed.
342342

343343
In fact, the compiler can apply the same kind of reasoning to any
344344
memory that is _(uniquely) owned by the stack frame_. So we could
345-
modify the previous example to introduce additional owned pointers
345+
modify the previous example to introduce additional unique pointers
346346
and structs, and the compiler will still be able to detect possible
347347
mutations:
348348

@@ -366,7 +366,7 @@ invalidate the pointer `y`.
366366
# Borrowing and enums
367367

368368
The previous example showed that the type system forbids any borrowing
369-
of owned boxes found in aliasable, mutable memory. This restriction
369+
of unique boxes found in aliasable, mutable memory. This restriction
370370
prevents pointers from pointing into freed memory. There is one other
371371
case where the compiler must be very careful to ensure that pointers
372372
remain valid: pointers into the interior of an `enum`.
@@ -462,14 +462,14 @@ of a `float` as if it were a struct with two fields would be a memory
462462
safety violation.
463463

464464
So, in fact, for every `ref` binding, the compiler will impose the
465-
same rules as the ones we saw for borrowing the interior of a owned
465+
same rules as the ones we saw for borrowing the interior of a unique
466466
box: it must be able to guarantee that the `enum` will not be
467467
overwritten for the duration of the borrow. In fact, the compiler
468468
would accept the example we gave earlier. The example is safe because
469469
the shape pointer has type `&Shape`, which means "borrowed pointer to
470470
immutable memory containing a `shape`". If, however, the type of that
471471
pointer were `&mut Shape`, then the ref binding would be ill-typed.
472-
Just as with owned boxes, the compiler will permit `ref` bindings
472+
Just as with unique boxes, the compiler will permit `ref` bindings
473473
into data owned by the stack frame even if the data are mutable,
474474
but otherwise it requires that the data reside in immutable memory.
475475

@@ -550,7 +550,7 @@ guarantees; in fact, it cannot guarantee that the pointer will remain
550550
valid at all once it returns, as the parameter `p` may or may not be
551551
live in the caller. Therefore, the compiler will report an error here.
552552

553-
In general, if you borrow a managed (or owned) box to create a
553+
In general, if you borrow a managed (or unique) box to create a
554554
borrowed pointer, the pointer will only be valid within the function
555555
and cannot be returned. This is why the typical way to return borrowed
556556
pointers is to take borrowed pointers as input (the only other case in

trunk/doc/tutorial-ffi.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,7 @@ convention to use:
237237
~~~~
238238
#[cfg(target_os = "win32")]
239239
#[abi = "stdcall"]
240-
#[link_name = "kernel32"]
241-
extern {
240+
extern mod kernel32 {
242241
fn SetEnvironmentVariableA(n: *u8, v: *u8) -> int;
243242
}
244243
~~~~

trunk/doc/tutorial-macros.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ match x {
223223
// complicated stuff goes here
224224
return result + val;
225225
},
226-
_ => fail!("Didn't get good_2")
226+
_ => fail!(~"Didn't get good_2")
227227
}
228228
}
229229
_ => return 0 // default value
@@ -265,7 +265,7 @@ macro_rules! biased_match (
265265
biased_match!((x) ~ (good_1(g1, val)) else { return 0 };
266266
binds g1, val )
267267
biased_match!((g1.body) ~ (good_2(result) )
268-
else { fail!("Didn't get good_2") };
268+
else { fail!(~"Didn't get good_2") };
269269
binds result )
270270
// complicated stuff goes here
271271
return result + val;
@@ -366,7 +366,7 @@ macro_rules! biased_match (
366366
# fn f(x: t1) -> uint {
367367
biased_match!(
368368
(x) ~ (good_1(g1, val)) else { return 0 };
369-
(g1.body) ~ (good_2(result) ) else { fail!("Didn't get good_2") };
369+
(g1.body) ~ (good_2(result) ) else { fail!(~"Didn't get good_2") };
370370
binds val, result )
371371
// complicated stuff goes here
372372
return result + val;

trunk/doc/tutorial-tasks.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ let result: Result<int, ()> = do task::try {
325325
if some_condition() {
326326
calculate_result()
327327
} else {
328-
fail!("oops!");
328+
fail!(~"oops!");
329329
}
330330
};
331331
assert!(result.is_err());

trunk/doc/tutorial.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1779,7 +1779,7 @@ to a borrowed pointer.
17791779
# fn draw_value(self) { ... }
17801780
# }
17811781
# let s = Circle(Point { x: 1f, y: 2f }, 3f);
1782-
// As with typical function arguments, managed and owned pointers
1782+
// As with typical function arguments, managed and unique pointers
17831783
// are automatically converted to borrowed pointers
17841784
17851785
(@s).draw_borrowed();

0 commit comments

Comments
 (0)