Skip to content

Commit ea17c9e

Browse files
committed
---
yaml --- r: 164858 b: refs/heads/try c: 42f4d63 h: refs/heads/master v: v3
1 parent 18cb1d4 commit ea17c9e

File tree

541 files changed

+17984
-13546
lines changed

Some content is hidden

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

541 files changed

+17984
-13546
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: f8f2c7a9537c7f333b242f616aefb75a83860927
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 8443b09e361b96d1f9b7f45a65ed0d31c0e86e70
5-
refs/heads/try: 3c9d8983bee2f8db20948e8a9fcd7172bba9b3e7
5+
refs/heads/try: 42f4d636fa84fed18ab47c04edae97a2ca176f87
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
88
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try/mk/crates.mk

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ TARGET_CRATES := libc std flate arena term \
5353
serialize getopts collections test time rand \
5454
log regex graphviz core rbml alloc rustrt \
5555
unicode
56-
RUSTC_CRATES := rustc rustc_typeck rustc_driver rustc_trans rustc_back rustc_llvm
56+
RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_driver rustc_trans rustc_back rustc_llvm
5757
HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc regex_macros fmt_macros
5858
CRATES := $(TARGET_CRATES) $(HOST_CRATES)
5959
TOOLS := compiletest rustdoc rustc
@@ -67,11 +67,12 @@ DEPS_std := core libc rand alloc collections rustrt unicode \
6767
native:rust_builtin native:backtrace
6868
DEPS_graphviz := std
6969
DEPS_syntax := std term serialize log fmt_macros arena libc
70-
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back \
70+
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
7171
rustc_typeck log syntax serialize rustc_llvm rustc_trans
7272
DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back \
7373
log syntax serialize rustc_llvm
7474
DEPS_rustc_typeck := rustc syntax
75+
DEPS_rustc_borrowck := rustc log graphviz syntax
7576
DEPS_rustc := syntax flate arena serialize getopts rbml \
7677
time log graphviz rustc_llvm rustc_back
7778
DEPS_rustc_llvm := native:rustllvm libc std
@@ -117,9 +118,10 @@ ONLY_RLIB_unicode := 1
117118
DOC_CRATES := $(filter-out rustc, \
118119
$(filter-out rustc_trans, \
119120
$(filter-out rustc_typeck, \
121+
$(filter-out rustc_borrowck, \
120122
$(filter-out rustc_driver, \
121-
$(filter-out syntax, $(CRATES))))))
122-
COMPILER_DOC_CRATES := rustc rustc_trans rustc_typeck rustc_driver syntax
123+
$(filter-out syntax, $(CRATES)))))))
124+
COMPILER_DOC_CRATES := rustc rustc_trans rustc_borrowck rustc_typeck rustc_driver syntax
123125

124126
# This macro creates some simple definitions for each crate being built, just
125127
# some munging of all of the parameters above.

branches/try/mk/dist.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ PKG_FILES := \
4848
$(S)configure $(S)Makefile.in \
4949
$(S)man \
5050
$(addprefix $(S)src/, \
51-
README.md \
5251
compiletest \
5352
doc \
5453
driver \

branches/try/mk/rustllvm.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ LLVM_EXTRA_INCDIRS_$(1)= -iquote $(S)src/llvm/include \
2222
-iquote $$(CFG_LLVM_BUILD_DIR_$(1))/include
2323
endif
2424

25-
RUSTLLVM_OBJS_CS_$(1) := $$(addprefix rustllvm/, RustWrapper.cpp PassWrapper.cpp)
25+
RUSTLLVM_OBJS_CS_$(1) := $$(addprefix rustllvm/, \
26+
ExecutionEngineWrapper.cpp RustWrapper.cpp PassWrapper.cpp)
2627

2728
RUSTLLVM_DEF_$(1) := $(1)/rustllvm/rustllvm$(CFG_DEF_SUFFIX_$(1))
2829

branches/try/mk/tests.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ $(eval $(call RUST_CRATE,coretest))
2121

2222
TEST_TARGET_CRATES = $(filter-out core unicode,$(TARGET_CRATES)) coretest
2323
TEST_DOC_CRATES = $(DOC_CRATES)
24-
TEST_HOST_CRATES = $(filter-out rustc_typeck rustc_trans,$(HOST_CRATES))
24+
TEST_HOST_CRATES = $(filter-out rustc_typeck rustc_borrowck rustc_trans,$(HOST_CRATES))
2525
TEST_CRATES = $(TEST_TARGET_CRATES) $(TEST_HOST_CRATES)
2626

2727
######################################################################

branches/try/src/compiletest/compiletest.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111
#![crate_type = "bin"]
12-
#![feature(phase, slicing_syntax, globs)]
12+
#![feature(phase, slicing_syntax, globs, unboxed_closures)]
1313

1414
#![deny(warnings)]
1515

@@ -23,6 +23,7 @@ use std::os;
2323
use std::io;
2424
use std::io::fs;
2525
use std::str::FromStr;
26+
use std::thunk::{Thunk};
2627
use getopts::{optopt, optflag, reqopt};
2728
use common::Config;
2829
use common::{Pretty, DebugInfoGdb, DebugInfoLldb, Codegen};
@@ -369,16 +370,16 @@ pub fn make_test_closure(config: &Config, testfile: &Path) -> test::TestFn {
369370
let config = (*config).clone();
370371
// FIXME (#9639): This needs to handle non-utf8 paths
371372
let testfile = testfile.as_str().unwrap().to_string();
372-
test::DynTestFn(proc() {
373+
test::DynTestFn(Thunk::new(move || {
373374
runtest::run(config, testfile)
374-
})
375+
}))
375376
}
376377

377378
pub fn make_metrics_test_closure(config: &Config, testfile: &Path) -> test::TestFn {
378379
let config = (*config).clone();
379380
// FIXME (#9639): This needs to handle non-utf8 paths
380381
let testfile = testfile.as_str().unwrap().to_string();
381-
test::DynMetricFn(proc(mm) {
382+
test::DynMetricFn(box move |: mm: &mut test::MetricMap| {
382383
runtest::run_metrics(config, testfile, mm)
383384
})
384385
}

branches/try/src/compiletest/runtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ fn run_debuginfo_gdb_test(config: &Config, props: &TestProps, testfile: &Path) {
445445
loop {
446446
//waiting 1 second for gdbserver start
447447
timer::sleep(Duration::milliseconds(1000));
448-
let result = task::try(proc() {
448+
let result = task::try(move || {
449449
tcp::TcpStream::connect("127.0.0.1:5039").unwrap();
450450
});
451451
if result.is_err() {

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

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,37 @@ with a closure argument. `spawn` executes the closure in the new task.
2929
fn print_message() { println!("I am running in a different task!"); }
3030
spawn(print_message);
3131
32-
// Alternatively, use a `proc` expression instead of a named function.
33-
// The `proc` expression evaluates to an (unnamed) proc.
34-
// That proc will call `println!(...)` when the spawned task runs.
35-
spawn(proc() println!("I am also running in a different task!") );
32+
// Alternatively, use a `move ||` expression instead of a named function.
33+
// `||` expressions evaluate to an unnamed closure. The `move` keyword
34+
// indicates that the closure should take ownership of any variables it
35+
// touches.
36+
spawn(move || println!("I am also running in a different task!"));
3637
```
3738

3839
In Rust, a task is not a concept that appears in the language semantics.
3940
Instead, Rust's type system provides all the tools necessary to implement safe
4041
concurrency: particularly, ownership. The language leaves the implementation
4142
details to the standard library.
4243

43-
The `spawn` function has a very simple type signature: `fn spawn(f: proc():
44-
Send)`. Because it accepts only procs, and procs contain only owned data,
45-
`spawn` can safely move the entire proc and all its associated state into an
46-
entirely different task for execution. Like any closure, the function passed to
47-
`spawn` may capture an environment that it carries across tasks.
44+
The `spawn` function has the type signature: `fn
45+
spawn<F:FnOnce()+Send>(f: F)`. This indicates that it takes as
46+
argument a closure (of type `F`) that it will run exactly once. This
47+
closure is limited to capturing `Send`-able data from its environment
48+
(that is, data which is deeply owned). Limiting the closure to `Send`
49+
ensures that `spawn` can safely move the entire closure and all its
50+
associated state into an entirely different task for execution.
4851

4952
```{rust}
5053
# use std::task::spawn;
5154
# fn generate_task_number() -> int { 0 }
5255
// Generate some state locally
5356
let child_task_number = generate_task_number();
5457
55-
spawn(proc() {
56-
// Capture it in the remote task
58+
spawn(move || {
59+
// Capture it in the remote task. The `move` keyword indicates
60+
// that this closure should move `child_task_number` into its
61+
// environment, rather than capturing a reference into the
62+
// enclosing stack frame.
5763
println!("I am child number {}", child_task_number);
5864
});
5965
```
@@ -74,7 +80,7 @@ example of calculating two results concurrently:
7480
7581
let (tx, rx): (Sender<int>, Receiver<int>) = channel();
7682
77-
spawn(proc() {
83+
spawn(move || {
7884
let result = some_expensive_computation();
7985
tx.send(result);
8086
});
@@ -102,7 +108,7 @@ task.
102108
# use std::task::spawn;
103109
# fn some_expensive_computation() -> int { 42 }
104110
# let (tx, rx) = channel();
105-
spawn(proc() {
111+
spawn(move || {
106112
let result = some_expensive_computation();
107113
tx.send(result);
108114
});
@@ -135,13 +141,13 @@ results across a number of tasks? The following program is ill-typed:
135141
# fn some_expensive_computation() -> int { 42 }
136142
let (tx, rx) = channel();
137143
138-
spawn(proc() {
144+
spawn(move || {
139145
tx.send(some_expensive_computation());
140146
});
141147
142148
// ERROR! The previous spawn statement already owns the sender,
143149
// so the compiler will not allow it to be captured again
144-
spawn(proc() {
150+
spawn(move || {
145151
tx.send(some_expensive_computation());
146152
});
147153
```
@@ -154,7 +160,7 @@ let (tx, rx) = channel();
154160
for init_val in range(0u, 3) {
155161
// Create a new channel handle to distribute to the child task
156162
let child_tx = tx.clone();
157-
spawn(proc() {
163+
spawn(move || {
158164
child_tx.send(some_expensive_computation(init_val));
159165
});
160166
}
@@ -179,7 +185,7 @@ reference, written with multiple streams, it might look like the example below.
179185
// Create a vector of ports, one for each child task
180186
let rxs = Vec::from_fn(3, |init_val| {
181187
let (tx, rx) = channel();
182-
spawn(proc() {
188+
spawn(move || {
183189
tx.send(some_expensive_computation(init_val));
184190
});
185191
rx
@@ -207,7 +213,7 @@ fn fib(n: u64) -> u64 {
207213
12586269025
208214
}
209215
210-
let mut delayed_fib = Future::spawn(proc() fib(50));
216+
let mut delayed_fib = Future::spawn(move || fib(50));
211217
make_a_sandwich();
212218
println!("fib(50) = {}", delayed_fib.get())
213219
# }
@@ -236,7 +242,7 @@ fn partial_sum(start: uint) -> f64 {
236242
}
237243
238244
fn main() {
239-
let mut futures = Vec::from_fn(200, |ind| Future::spawn( proc() { partial_sum(ind) }));
245+
let mut futures = Vec::from_fn(200, |ind| Future::spawn(move || partial_sum(ind)));
240246
241247
let mut final_res = 0f64;
242248
for ft in futures.iter_mut() {
@@ -278,7 +284,7 @@ fn main() {
278284
for num in range(1u, 10) {
279285
let task_numbers = numbers_arc.clone();
280286
281-
spawn(proc() {
287+
spawn(move || {
282288
println!("{}-norm = {}", num, pnorm(task_numbers.as_slice(), num));
283289
});
284290
}
@@ -312,7 +318,7 @@ if it were local.
312318
# let numbers_arc = Arc::new(numbers);
313319
# let num = 4;
314320
let task_numbers = numbers_arc.clone();
315-
spawn(proc() {
321+
spawn(move || {
316322
// Capture task_numbers and use it as if it was the underlying vector
317323
println!("{}-norm = {}", num, pnorm(task_numbers.as_slice(), num));
318324
});
@@ -344,7 +350,7 @@ result with an `int` field (representing a successful result) or an `Err` result
344350
# use std::task;
345351
# fn some_condition() -> bool { false }
346352
# fn calculate_result() -> int { 0 }
347-
let result: Result<int, Box<std::any::Any + Send>> = task::try(proc() {
353+
let result: Result<int, Box<std::any::Any + Send>> = task::try(move || {
348354
if some_condition() {
349355
calculate_result()
350356
} else {

0 commit comments

Comments
 (0)