Skip to content

Commit abd08d7

Browse files
committed
---
yaml --- r: 143357 b: refs/heads/try2 c: 63c9b11 h: refs/heads/master i: 143355: 1de7bf1 v: v3
1 parent 950542d commit abd08d7

File tree

332 files changed

+7320
-5344
lines changed

Some content is hidden

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

332 files changed

+7320
-5344
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: 6f4e2b2147bbe91218c5836109011af4fc66e38c
8+
refs/heads/try2: 63c9b112b52b31f511b08438fc7f812108688804
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/doc/po/tutorial-tasks.md.pot

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ msgstr ""
135135
#. type: Bullet: '* '
136136
#: doc/tutorial-tasks.md:56
137137
msgid ""
138-
"[`extra::arc`] - The ARC (atomically reference counted) type, for safely "
138+
"[`extra::arc`] - The Arc (atomically reference counted) type, for safely "
139139
"sharing immutable data,"
140140
msgstr ""
141141

@@ -597,7 +597,7 @@ msgstr ""
597597

598598
#. type: Plain text
599599
#: doc/tutorial-tasks.md:338
600-
msgid "## Sharing immutable data without copy: ARC"
600+
msgid "## Sharing immutable data without copy: Arc"
601601
msgstr ""
602602

603603
#. type: Plain text
@@ -613,18 +613,18 @@ msgstr ""
613613
#: doc/tutorial-tasks.md:347
614614
msgid ""
615615
"To tackle this issue, one can use an Atomically Reference Counted wrapper "
616-
"(`ARC`) as implemented in the `extra` library of Rust. With an ARC, the data "
617-
"will no longer be copied for each task. The ARC acts as a reference to the "
616+
"(`Arc`) as implemented in the `extra` library of Rust. With an Arc, the data "
617+
"will no longer be copied for each task. The Arc acts as a reference to the "
618618
"shared data and only this reference is shared and cloned."
619619
msgstr ""
620620

621621
#. type: Plain text
622622
#: doc/tutorial-tasks.md:355
623623
msgid ""
624-
"Here is a small example showing how to use ARCs. We wish to run concurrently "
624+
"Here is a small example showing how to use Arcs. We wish to run concurrently "
625625
"several computations on a single large vector of floats. Each task needs the "
626626
"full vector to perform its duty. ~~~ # use std::vec; # use std::uint; # use "
627-
"std::rand; use extra::arc::ARC;"
627+
"std::rand; use extra::arc::Arc;"
628628
msgstr ""
629629

630630
#. type: Plain text
@@ -648,7 +648,7 @@ msgstr ""
648648
#. type: Plain text
649649
#: doc/tutorial-tasks.md:365
650650
#, no-wrap
651-
msgid " let numbers_arc = ARC(numbers);\n"
651+
msgid " let numbers_arc = Arc::new(numbers);\n"
652652
msgstr ""
653653

654654
#. type: Plain text
@@ -665,7 +665,7 @@ msgstr ""
665665
#, no-wrap
666666
msgid ""
667667
" do spawn {\n"
668-
" let local_arc : ARC<~[float]> = port.recv();\n"
668+
" let local_arc : Arc<~[float]> = port.recv();\n"
669669
" let task_numbers = local_arc.get();\n"
670670
" println(fmt!(\"%u-norm = %?\", num, pnorm(task_numbers, num)));\n"
671671
" }\n"
@@ -679,31 +679,31 @@ msgstr ""
679679
msgid ""
680680
"The function `pnorm` performs a simple computation on the vector (it "
681681
"computes the sum of its items at the power given as argument and takes the "
682-
"inverse power of this value). The ARC on the vector is created by the line "
683-
"~~~ # use extra::arc::ARC; # use std::vec; # use std::rand; # let numbers = "
682+
"inverse power of this value). The Arc on the vector is created by the line "
683+
"~~~ # use extra::arc::Arc; # use std::vec; # use std::rand; # let numbers = "
684684
"vec::from_fn(1000000, |_| rand::random::<float>()); let "
685-
"numbers_arc=ARC(numbers); ~~~ and a clone of it is sent to each task ~~~ # "
686-
"use extra::arc::ARC; # use std::vec; # use std::rand; # let numbers=vec::"
685+
"numbers_arc=Arc::new(numbers); ~~~ and a clone of it is sent to each task ~~~ # "
686+
"use extra::arc::Arc; # use std::vec; # use std::rand; # let numbers=vec::"
687687
"from_fn(1000000, |_| rand::random::<float>()); # let numbers_arc = "
688-
"ARC(numbers); # let (port, chan) = stream(); chan.send(numbers_arc."
688+
"Arc::new(numbers); # let (port, chan) = stream(); chan.send(numbers_arc."
689689
"clone()); ~~~ copying only the wrapper and not its contents."
690690
msgstr ""
691691

692692
#. type: Plain text
693693
#: doc/tutorial-tasks.md:414
694694
msgid ""
695-
"Each task recovers the underlying data by ~~~ # use extra::arc::ARC; # use "
695+
"Each task recovers the underlying data by ~~~ # use extra::arc::Arc; # use "
696696
"std::vec; # use std::rand; # let numbers=vec::from_fn(1000000, |_| rand::"
697-
"random::<float>()); # let numbers_arc=ARC(numbers); # let (port, chan) = "
698-
"stream(); # chan.send(numbers_arc.clone()); # let local_arc : ARC<~[float]> "
697+
"random::<float>()); # let numbers_arc=Arc::new(numbers); # let (port, chan) = "
698+
"stream(); # chan.send(numbers_arc.clone()); # let local_arc : Arc<~[float]> "
699699
"= port.recv(); let task_numbers = local_arc.get(); ~~~ and can use it as if "
700700
"it were local."
701701
msgstr ""
702702

703703
#. type: Plain text
704704
#: doc/tutorial-tasks.md:416
705705
msgid ""
706-
"The `arc` module also implements ARCs around mutable data that are not "
706+
"The `arc` module also implements Arcs around mutable data that are not "
707707
"covered here."
708708
msgstr ""
709709

branches/try2/doc/rust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1494,7 +1494,7 @@ mod m1 {
14941494
This example shows how one can use `allow` and `warn` to toggle
14951495
a particular check on and off.
14961496

1497-
~~~
1497+
~~~{.xfail-test}
14981498
#[warn(missing_doc)]
14991499
mod m2{
15001500
#[allow(missing_doc)]

branches/try2/doc/tutorial-container.md

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@ impl Iterator<int> for ZeroStream {
108108
## Container iterators
109109
110110
Containers implement iteration over the contained elements by returning an
111-
iterator object. For example, vector slices have four iterators available:
111+
iterator object. For example, vector slices several iterators available:
112112
113-
* `vector.iter()`, for immutable references to the elements
114-
* `vector.mut_iter()`, for mutable references to the elements
115-
* `vector.rev_iter()`, for immutable references to the elements in reverse order
116-
* `vector.mut_rev_iter()`, for mutable references to the elements in reverse order
113+
* `iter()` and `rev_iter()`, for immutable references to the elements
114+
* `mut_iter()` and `mut_rev_iter()`, for mutable references to the elements
115+
* `consume_iter()` and `consume_rev_iter`, to move the elements out by-value
116+
117+
A typical mutable container will implement at least `iter()`, `mut_iter()` and
118+
`consume_iter()` along with the reverse variants if it maintains an order.
117119
118120
### Freezing
119121
@@ -192,15 +194,15 @@ let mut it = xs.iter().zip(ys.iter());
192194

193195
// print out the pairs of elements up to (&3, &"baz")
194196
for it.advance |(x, y)| {
195-
println(fmt!("%d %s", *x, *y));
197+
printfln!("%d %s", *x, *y);
196198

197199
if *x == 3 {
198200
break;
199201
}
200202
}
201203

202204
// yield and print the last pair from the iterator
203-
println(fmt!("last: %?", it.next()));
205+
printfln!("last: %?", it.next());
204206

205207
// the iterator is now fully consumed
206208
assert!(it.next().is_none());
@@ -294,15 +296,59 @@ another `DoubleEndedIterator` with `next` and `next_back` exchanged.
294296
~~~
295297
let xs = [1, 2, 3, 4, 5, 6];
296298
let mut it = xs.iter();
297-
println(fmt!("%?", it.next())); // prints `Some(&1)`
298-
println(fmt!("%?", it.next())); // prints `Some(&2)`
299-
println(fmt!("%?", it.next_back())); // prints `Some(&6)`
299+
printfln!("%?", it.next()); // prints `Some(&1)`
300+
printfln!("%?", it.next()); // prints `Some(&2)`
301+
printfln!("%?", it.next_back()); // prints `Some(&6)`
300302

301303
// prints `5`, `4` and `3`
302304
for it.invert().advance |&x| {
303-
println(fmt!("%?", x))
305+
printfln!("%?", x)
304306
}
305307
~~~
306308
307309
The `rev_iter` and `mut_rev_iter` methods on vectors just return an inverted
308310
version of the standard immutable and mutable vector iterators.
311+
312+
The `chain_`, `transform`, `filter`, `filter_map` and `peek` adaptors are
313+
`DoubleEndedIterator` implementations if the underlying iterators are.
314+
315+
~~~
316+
let xs = [1, 2, 3, 4];
317+
let ys = [5, 6, 7, 8];
318+
let mut it = xs.iter().chain_(ys.iter()).transform(|&x| x * 2);
319+
320+
printfln!("%?", it.next()); // prints `Some(2)`
321+
322+
// prints `16`, `14`, `12`, `10`, `8`, `6`, `4`
323+
for it.invert().advance |x| {
324+
printfln!("%?", x);
325+
}
326+
~~~
327+
328+
## Random-access iterators
329+
330+
The `RandomAccessIterator` trait represents an iterator offering random access
331+
to the whole range. The `indexable` method retrieves the number of elements
332+
accessible with the `idx` method.
333+
334+
The `chain_` adaptor is an implementation of `RandomAccessIterator` if the
335+
underlying iterators are.
336+
337+
~~~
338+
let xs = [1, 2, 3, 4, 5];
339+
let ys = ~[7, 9, 11];
340+
let mut it = xs.iter().chain_(ys.iter());
341+
printfln!("%?", it.idx(0)); // prints `Some(&1)`
342+
printfln!("%?", it.idx(5)); // prints `Some(&7)`
343+
printfln!("%?", it.idx(7)); // prints `Some(&11)`
344+
printfln!("%?", it.idx(8)); // prints `None`
345+
346+
// yield two elements from the beginning, and one from the end
347+
it.next();
348+
it.next();
349+
it.next_back();
350+
351+
printfln!("%?", it.idx(0)); // prints `Some(&3)`
352+
printfln!("%?", it.idx(4)); // prints `Some(&9)`
353+
printfln!("%?", it.idx(6)); // prints `None`
354+
~~~

branches/try2/doc/tutorial-tasks.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ concurrency at this writing:
5050
* [`std::pipes`] - The underlying messaging infrastructure,
5151
* [`extra::comm`] - Additional messaging types based on `std::pipes`,
5252
* [`extra::sync`] - More exotic synchronization tools, including locks,
53-
* [`extra::arc`] - The ARC (atomically reference counted) type,
53+
* [`extra::arc`] - The Arc (atomically reference counted) type,
5454
for safely sharing immutable data,
5555
* [`extra::future`] - A type representing values that may be computed concurrently and retrieved at a later time.
5656

@@ -334,24 +334,24 @@ fn main() {
334334
}
335335
~~~
336336

337-
## Sharing immutable data without copy: ARC
337+
## Sharing immutable data without copy: Arc
338338

339339
To share immutable data between tasks, a first approach would be to only use pipes as we have seen
340340
previously. A copy of the data to share would then be made for each task. In some cases, this would
341341
add up to a significant amount of wasted memory and would require copying the same data more than
342342
necessary.
343343

344-
To tackle this issue, one can use an Atomically Reference Counted wrapper (`ARC`) as implemented in
345-
the `extra` library of Rust. With an ARC, the data will no longer be copied for each task. The ARC
344+
To tackle this issue, one can use an Atomically Reference Counted wrapper (`Arc`) as implemented in
345+
the `extra` library of Rust. With an Arc, the data will no longer be copied for each task. The Arc
346346
acts as a reference to the shared data and only this reference is shared and cloned.
347347

348-
Here is a small example showing how to use ARCs. We wish to run concurrently several computations on
348+
Here is a small example showing how to use Arcs. We wish to run concurrently several computations on
349349
a single large vector of floats. Each task needs the full vector to perform its duty.
350350
~~~
351351
# use std::vec;
352352
# use std::uint;
353353
# use std::rand;
354-
use extra::arc::ARC;
354+
use extra::arc::Arc;
355355
356356
fn pnorm(nums: &~[float], p: uint) -> float {
357357
nums.iter().fold(0.0, |a,b| a+(*b).pow(&(p as float)) ).pow(&(1f / (p as float)))
@@ -361,14 +361,14 @@ fn main() {
361361
let numbers = vec::from_fn(1000000, |_| rand::random::<float>());
362362
println(fmt!("Inf-norm = %?", *numbers.iter().max().unwrap()));
363363
364-
let numbers_arc = ARC(numbers);
364+
let numbers_arc = Arc::new(numbers);
365365
366366
for uint::range(1,10) |num| {
367367
let (port, chan) = stream();
368368
chan.send(numbers_arc.clone());
369369
370370
do spawn {
371-
let local_arc : ARC<~[float]> = port.recv();
371+
let local_arc : Arc<~[float]> = port.recv();
372372
let task_numbers = local_arc.get();
373373
println(fmt!("%u-norm = %?", num, pnorm(task_numbers, num)));
374374
}
@@ -377,42 +377,42 @@ fn main() {
377377
~~~
378378

379379
The function `pnorm` performs a simple computation on the vector (it computes the sum of its items
380-
at the power given as argument and takes the inverse power of this value). The ARC on the vector is
380+
at the power given as argument and takes the inverse power of this value). The Arc on the vector is
381381
created by the line
382382
~~~
383-
# use extra::arc::ARC;
383+
# use extra::arc::Arc;
384384
# use std::vec;
385385
# use std::rand;
386386
# let numbers = vec::from_fn(1000000, |_| rand::random::<float>());
387-
let numbers_arc=ARC(numbers);
387+
let numbers_arc=Arc::new(numbers);
388388
~~~
389389
and a clone of it is sent to each task
390390
~~~
391-
# use extra::arc::ARC;
391+
# use extra::arc::Arc;
392392
# use std::vec;
393393
# use std::rand;
394394
# let numbers=vec::from_fn(1000000, |_| rand::random::<float>());
395-
# let numbers_arc = ARC(numbers);
395+
# let numbers_arc = Arc::new(numbers);
396396
# let (port, chan) = stream();
397397
chan.send(numbers_arc.clone());
398398
~~~
399399
copying only the wrapper and not its contents.
400400

401401
Each task recovers the underlying data by
402402
~~~
403-
# use extra::arc::ARC;
403+
# use extra::arc::Arc;
404404
# use std::vec;
405405
# use std::rand;
406406
# let numbers=vec::from_fn(1000000, |_| rand::random::<float>());
407-
# let numbers_arc=ARC(numbers);
407+
# let numbers_arc=Arc::new(numbers);
408408
# let (port, chan) = stream();
409409
# chan.send(numbers_arc.clone());
410-
# let local_arc : ARC<~[float]> = port.recv();
410+
# let local_arc : Arc<~[float]> = port.recv();
411411
let task_numbers = local_arc.get();
412412
~~~
413413
and can use it as if it were local.
414414

415-
The `arc` module also implements ARCs around mutable data that are not covered here.
415+
The `arc` module also implements Arcs around mutable data that are not covered here.
416416

417417
# Handling task failure
418418

0 commit comments

Comments
 (0)