Skip to content

Commit a5341c5

Browse files
committed
---
yaml --- r: 65067 b: refs/heads/master c: 9b6b0e1 h: refs/heads/master i: 65065: 716dee8 65063: ccac5b4 v: v3
1 parent e3a6056 commit a5341c5

Some content is hidden

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

72 files changed

+1905
-5011
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: 3ee479f3e98474cd8125432f7a0c5c18bc2bd342
2+
refs/heads/master: 9b6b0e1e646b42de7205a21bf73e5c4c2b203a6b
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 18e3db7392d2d0697b7e27d6d986139960144d85
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9

trunk/doc/tutorial-tasks.md

Lines changed: 13 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,22 @@ in the core and standard libraries, which are still under development
4343
and do not always present a consistent or complete interface.
4444

4545
For your reference, these are the standard modules involved in Rust
46-
concurrency at this writing:
46+
concurrency at this writing.
4747

48-
* [`core::task`] - All code relating to tasks and task scheduling,
49-
* [`core::comm`] - The message passing interface,
50-
* [`core::pipes`] - The underlying messaging infrastructure,
51-
* [`std::comm`] - Additional messaging types based on `core::pipes`,
52-
* [`std::sync`] - More exotic synchronization tools, including locks,
48+
* [`core::task`] - All code relating to tasks and task scheduling
49+
* [`core::comm`] - The message passing interface
50+
* [`core::pipes`] - The underlying messaging infrastructure
51+
* [`std::comm`] - Additional messaging types based on `core::pipes`
52+
* [`std::sync`] - More exotic synchronization tools, including locks
5353
* [`std::arc`] - The ARC (atomically reference counted) type,
54-
for safely sharing immutable data,
55-
* [`std::future`] - A type representing values that may be computed concurrently and retrieved at a later time.
54+
for safely sharing immutable data
5655

5756
[`core::task`]: core/task.html
5857
[`core::comm`]: core/comm.html
5958
[`core::pipes`]: core/pipes.html
6059
[`std::comm`]: std/comm.html
6160
[`std::sync`]: std/sync.html
6261
[`std::arc`]: std/arc.html
63-
[`std::future`]: std/future.html
6462

6563
# Basics
6664

@@ -72,7 +70,7 @@ closure in the new task.
7270

7371
~~~~
7472
# use core::io::println;
75-
# use core::task::spawn;
73+
use core::task::spawn;
7674
7775
// Print something profound in a different task using a named function
7876
fn print_message() { println("I am running in a different task!"); }
@@ -147,8 +145,8 @@ endpoint. Consider the following example of calculating two results
147145
concurrently:
148146

149147
~~~~
150-
# use core::task::spawn;
151-
# use core::comm::{stream, Port, Chan};
148+
use core::task::spawn;
149+
use core::comm::{stream, Port, Chan};
152150
153151
let (port, chan): (Port<int>, Chan<int>) = stream();
154152
@@ -235,7 +233,7 @@ Instead we can use a `SharedChan`, a type that allows a single
235233

236234
~~~
237235
# use core::task::spawn;
238-
# use core::comm::{stream, SharedChan};
236+
use core::comm::{stream, SharedChan};
239237
240238
let (port, chan) = stream();
241239
let chan = SharedChan::new(chan);
@@ -284,51 +282,6 @@ let result = ports.foldl(0, |accum, port| *accum + port.recv() );
284282
# fn some_expensive_computation(_i: uint) -> int { 42 }
285283
~~~
286284

287-
## Futures
288-
With `std::future`, rust has a mechanism for requesting a computation and getting the result
289-
later.
290-
291-
The basic example below illustrates this.
292-
~~~
293-
# fn make_a_sandwich() {};
294-
fn fib(n: uint) -> uint {
295-
// lengthy computation returning an uint
296-
12586269025
297-
}
298-
299-
let mut delayed_fib = std::future::spawn (|| fib(50) );
300-
make_a_sandwich();
301-
println(fmt!("fib(50) = %?", delayed_fib.get()))
302-
~~~
303-
304-
The call to `future::spawn` returns immediately a `future` object regardless of how long it
305-
takes to run `fib(50)`. You can then make yourself a sandwich while the computation of `fib` is
306-
running. The result of the execution of the method is obtained by calling `get` on the future.
307-
This call will block until the value is available (*i.e.* the computation is complete). Note that
308-
the future needs to be mutable so that it can save the result for next time `get` is called.
309-
310-
Here is another example showing how futures allow you to background computations. The workload will
311-
be distributed on the available cores.
312-
~~~
313-
fn partial_sum(start: uint) -> f64 {
314-
let mut local_sum = 0f64;
315-
for uint::range(start*100000, (start+1)*100000) |num| {
316-
local_sum += (num as f64 + 1.0).pow(-2.0);
317-
}
318-
local_sum
319-
}
320-
321-
fn main() {
322-
let mut futures = vec::from_fn(1000, |ind| do std::future::spawn { partial_sum(ind) });
323-
324-
let mut final_res = 0f64;
325-
for futures.each_mut |ft| {
326-
final_res += ft.get();
327-
}
328-
println(fmt!("π^2/6 is not far from : %?", final_res));
329-
}
330-
~~~
331-
332285
# Handling task failure
333286

334287
Rust has a built-in mechanism for raising exceptions. The `fail!()` macro
@@ -410,8 +363,8 @@ either task fails, it kills the other one.
410363
~~~
411364
# fn sleep_forever() { loop { task::yield() } }
412365
# do task::try {
413-
do spawn {
414-
do spawn {
366+
do task::spawn {
367+
do task::spawn {
415368
fail!(); // All three tasks will fail.
416369
}
417370
sleep_forever(); // Will get woken up by force, then fail

trunk/src/libcore/bool.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,12 @@ pub fn is_false(v: bool) -> bool { !v }
4949
/// Parse logic value from `s`
5050
impl FromStr for bool {
5151
fn from_str(s: &str) -> Option<bool> {
52-
match s {
53-
"true" => Some(true),
54-
"false" => Some(false),
55-
_ => None,
52+
if s == "true" {
53+
Some(true)
54+
} else if s == "false" {
55+
Some(false)
56+
} else {
57+
None
5658
}
5759
}
5860
}

0 commit comments

Comments
 (0)