Skip to content

Commit 318e814

Browse files
committed
---
yaml --- r: 234745 b: refs/heads/tmp c: a0f214e h: refs/heads/master i: 234743: 13f0fd0 v: v3
1 parent 664280a commit 318e814

File tree

123 files changed

+603
-2043
lines changed

Some content is hidden

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

123 files changed

+603
-2043
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
2626
refs/heads/beta: d2e13e822a73e0ea46ae9e21afdd3155fc997f6d
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
28-
refs/heads/tmp: fd38a75077a4c5efc87413b7f9f7f1b6bc9db9af
28+
refs/heads/tmp: a0f214e25780702a6273af8735c0de5c48cc206d
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: ab792abf1fcc28afbd315426213f6428da25c085
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828

branches/tmp/COMPILER_TESTS.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Compiler Test Documentation
22

3-
In the Rust project, we use a special set of comands embedded in
3+
In the Rust project, we use a special set of comands imbedded in
44
comments to test the Rust compiler. There are two groups of commands:
55

66
1. Header commands
@@ -29,11 +29,11 @@ The error levels that you can have are:
2929
3. `NOTE`
3030
4. `HELP` and `SUGGESTION`*
3131

32-
\* **Note**: `SUGGESTION` must follow immediately after `HELP`.
32+
\* **Note**: `SUGGESTION` must follow emediatly after `HELP`.
3333

3434
## Summary of Header Commands
3535

36-
Header commands specify something about the entire test file as a
36+
Header commands specify something about the entire test file, as a
3737
whole, instead of just a few lines inside the test.
3838

3939
* `ignore-X` where `X` is an architecture, OS or stage will ignore the test accordingly

branches/tmp/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#
2727
# * check - Run the complete test suite
2828
#
29-
# * clean - Clean the build repository. It is advised to run this
29+
# * clean - Clean the build repertory. It is advised to run this
3030
# command if you want to build Rust again, after an update
3131
# of the git repository.
3232
#

branches/tmp/RELEASES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Version 1.3.0 (2015-09-17)
1+
Version 1.3.0 (September 2015)
22
==============================
33

44
* ~900 changes, numerous bugfixes

branches/tmp/configure

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,12 +1095,6 @@ envopt CPP
10951095
envopt CFLAGS
10961096
envopt CXXFLAGS
10971097

1098-
# stdc++ name in use
1099-
# used to manage non-standard name (on OpenBSD for example)
1100-
program_transform_name=$($CFG_CC -v 2>&1 | sed -n "s/.*--program-transform-name='\([^']*\)'.*/\1/p")
1101-
CFG_STDCPP_NAME=$(echo "stdc++" | sed "${program_transform_name}")
1102-
putvar CFG_STDCPP_NAME
1103-
11041098
# a little post-processing of various config values
11051099
CFG_PREFIX=${CFG_PREFIX%/}
11061100
CFG_MANDIR=${CFG_MANDIR%/}

branches/tmp/mk/dist.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ $(PKG_TAR): $(PKG_FILES)
7777
-C $(S) \
7878
--exclude-vcs \
7979
--exclude=*~ \
80-
--exclude=*.pyc \
8180
--exclude=*/llvm/test/*/*.ll \
8281
--exclude=*/llvm/test/*/*.td \
8382
--exclude=*/llvm/test/*/*.s \

branches/tmp/mk/llvm.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ $$(LLVM_STAMP_$(1)): $(S)src/rustllvm/llvm-auto-clean-trigger
7373

7474
ifeq ($$(CFG_ENABLE_LLVM_STATIC_STDCPP),1)
7575
LLVM_STDCPP_RUSTFLAGS_$(1) = -L "$$(dir $$(shell $$(CC_$(1)) $$(CFG_GCCISH_CFLAGS_$(1)) \
76-
-print-file-name=lib$(CFG_STDCPP_NAME).a))"
76+
-print-file-name=libstdc++.a))"
7777
else
7878
LLVM_STDCPP_RUSTFLAGS_$(1) =
7979
endif
@@ -83,7 +83,7 @@ endif
8383
LLVM_LINKAGE_PATH_$(1):=$$(abspath $$(RT_OUTPUT_DIR_$(1))/llvmdeps.rs)
8484
$$(LLVM_LINKAGE_PATH_$(1)): $(S)src/etc/mklldeps.py $$(LLVM_CONFIG_$(1))
8585
$(Q)$(CFG_PYTHON) "$$<" "$$@" "$$(LLVM_COMPONENTS)" "$$(CFG_ENABLE_LLVM_STATIC_STDCPP)" \
86-
$$(LLVM_CONFIG_$(1)) "$(CFG_STDCPP_NAME)"
86+
$$(LLVM_CONFIG_$(1))
8787
endef
8888

8989
$(foreach host,$(CFG_HOST), \

branches/tmp/mk/tests.mk

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,10 +1046,6 @@ $$(call TEST_OK_FILE,$(1),$(2),$(3),rmake): \
10461046
$$(RMAKE_TESTS:%=$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok)
10471047
@touch $$@
10481048

1049-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1050-
export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(3)))
1051-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1052-
export LIB := $$(CFG_MSVC_LIB_PATH_$$(HOST_$(3)))
10531049
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
10541050
$(S)src/test/run-make/%/Makefile \
10551051
$$(CSREQ$(1)_T_$(2)_H_$(3))
@@ -1060,16 +1056,15 @@ $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
10601056
$$(MAKE) \
10611057
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
10621058
$(3)/test/run-make/$$* \
1063-
'$$(CC_$(3))' \
1059+
$$(CC_$(3)) \
10641060
"$$(CFG_GCCISH_CFLAGS_$(3))" \
10651061
$$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) \
10661062
"$$(TESTNAME)" \
10671063
$$(LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3)) \
10681064
"$$(LD_LIBRARY_PATH_ENV_HOSTDIR$(1)_T_$(2)_H_$(3))" \
10691065
"$$(LD_LIBRARY_PATH_ENV_TARGETDIR$(1)_T_$(2)_H_$(3))" \
10701066
$(1) \
1071-
$$(S) \
1072-
$(3)
1067+
$$(S)
10731068
@touch -r [email protected]_time $$@ && rm [email protected]_time
10741069
else
10751070
# FIXME #11094 - The above rule doesn't work right for multiple targets

branches/tmp/src/doc/reference.md

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,22 +1178,11 @@ let px: i32 = match p { Point(x, _) => x };
11781178
```
11791179

11801180
A _unit-like struct_ is a structure without any fields, defined by leaving off
1181-
the list of fields entirely. Such a structure implicitly defines a constant of
1182-
its type with the same name. For example:
1181+
the list of fields entirely. Such types will have a single value. For example:
11831182

11841183
```
1185-
# #![feature(braced_empty_structs)]
11861184
struct Cookie;
1187-
let c = [Cookie, Cookie {}, Cookie, Cookie {}];
1188-
```
1189-
1190-
is equivalent to
1191-
1192-
```
1193-
# #![feature(braced_empty_structs)]
1194-
struct Cookie {}
1195-
const Cookie: Cookie = Cookie {};
1196-
let c = [Cookie, Cookie {}, Cookie, Cookie {}];
1185+
let c = [Cookie, Cookie, Cookie, Cookie];
11971186
```
11981187

11991188
The precise memory layout of a structure is not specified. One can specify a
@@ -2422,7 +2411,6 @@ The currently implemented features of the reference compiler are:
24222411
terms of encapsulation).
24232412
* - `default_type_parameter_fallback` - Allows type parameter defaults to
24242413
influence type inference.
2425-
* - `braced_empty_structs` - Allows use of empty structs with braces.
24262414

24272415
If a feature is promoted to a language feature, then all existing programs will
24282416
start to receive compilation warnings about `#![feature]` directives which enabled
@@ -2774,7 +2762,7 @@ The following expressions are equivalent.
27742762
let x = std::ops::Range {start: 0, end: 10};
27752763
let y = 0..10;
27762764
2777-
assert_eq!(x, y);
2765+
assert_eq!(x,y);
27782766
```
27792767

27802768
### Unary operator expressions
@@ -3047,18 +3035,18 @@ A `loop` expression may optionally have a _label_. The label is written as
30473035
a lifetime preceding the loop expression, as in `'foo: loop{ }`. If a
30483036
label is present, then labeled `break` and `continue` expressions nested
30493037
within this loop may exit out of this loop or return control to its head.
3050-
See [break expressions](#break-expressions) and [continue
3038+
See [Break expressions](#break-expressions) and [Continue
30513039
expressions](#continue-expressions).
30523040

3053-
### `break` expressions
3041+
### Break expressions
30543042

30553043
A `break` expression has an optional _label_. If the label is absent, then
30563044
executing a `break` expression immediately terminates the innermost loop
30573045
enclosing it. It is only permitted in the body of a loop. If the label is
30583046
present, then `break 'foo` terminates the loop with label `'foo`, which need not
30593047
be the innermost label enclosing the `break` expression, but must enclose it.
30603048

3061-
### `continue` expressions
3049+
### Continue expressions
30623050

30633051
A `continue` expression has an optional _label_. If the label is absent, then
30643052
executing a `continue` expression immediately terminates the current iteration
@@ -3071,7 +3059,7 @@ innermost label enclosing the `break` expression, but must enclose it.
30713059

30723060
A `continue` expression is only permitted in the body of a loop.
30733061

3074-
### `while` loops
3062+
### While loops
30753063

30763064
A `while` loop begins by evaluating the boolean loop conditional expression.
30773065
If the loop conditional expression evaluates to `true`, the loop body block
@@ -3094,12 +3082,12 @@ Like `loop` expressions, `while` loops can be controlled with `break` or
30943082
loops](#infinite-loops), [break expressions](#break-expressions), and
30953083
[continue expressions](#continue-expressions) for more information.
30963084

3097-
### `for` expressions
3085+
### For expressions
30983086

30993087
A `for` expression is a syntactic construct for looping over elements provided
31003088
by an implementation of `std::iter::IntoIterator`.
31013089

3102-
An example of a `for` loop over the contents of an array:
3090+
An example of a for loop over the contents of an array:
31033091

31043092
```
31053093
# type Foo = i32;
@@ -3129,7 +3117,7 @@ Like `loop` expressions, `for` loops can be controlled with `break` or
31293117
loops](#infinite-loops), [break expressions](#break-expressions), and
31303118
[continue expressions](#continue-expressions) for more information.
31313119

3132-
### `if` expressions
3120+
### If expressions
31333121

31343122
An `if` expression is a conditional branch in program control. The form of an
31353123
`if` expression is a condition expression, followed by a consequent block, any
@@ -3141,7 +3129,7 @@ evaluates to `false`, the consequent block is skipped and any subsequent `else
31413129
if` condition is evaluated. If all `if` and `else if` conditions evaluate to
31423130
`false` then any `else` block is executed.
31433131

3144-
### `match` expressions
3132+
### Match expressions
31453133

31463134
A `match` expression branches on a *pattern*. The exact form of matching that
31473135
occurs depends on the pattern. Patterns consist of some combination of
@@ -3247,7 +3235,7 @@ let message = match maybe_digit {
32473235
};
32483236
```
32493237

3250-
### `if let` expressions
3238+
### If let expressions
32513239

32523240
An `if let` expression is semantically identical to an `if` expression but in place
32533241
of a condition expression it expects a refutable let statement. If the value of the
@@ -3268,15 +3256,15 @@ if let ("Ham", b) = dish {
32683256
}
32693257
```
32703258

3271-
### `while let` loops
3259+
### While let loops
32723260

32733261
A `while let` loop is semantically identical to a `while` loop but in place of a
32743262
condition expression it expects a refutable let statement. If the value of the
32753263
expression on the right hand side of the let statement matches the pattern, the
32763264
loop body block executes and control returns to the pattern matching statement.
32773265
Otherwise, the while expression completes.
32783266

3279-
### `return` expressions
3267+
### Return expressions
32803268

32813269
Return expressions are denoted with the keyword `return`. Evaluating a `return`
32823270
expression moves its argument into the designated output location for the

branches/tmp/src/doc/trpl/concurrency.md

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ to help us make sense of code that can possibly be concurrent.
2626
### `Send`
2727

2828
The first trait we're going to talk about is
29-
[`Send`](../std/marker/trait.Send.html). When a type `T` implements `Send`, it indicates
30-
to the compiler that something of this type is able to have ownership transferred
29+
[`Send`](../std/marker/trait.Send.html). When a type `T` implements `Send`, it
30+
indicates that something of this type is able to have ownership transferred
3131
safely between threads.
3232

3333
This is important to enforce certain restrictions. For example, if we have a
@@ -42,13 +42,19 @@ us enforce that it can't leave the current thread.
4242
### `Sync`
4343

4444
The second of these traits is called [`Sync`](../std/marker/trait.Sync.html).
45-
When a type `T` implements `Sync`, it indicates to the compiler that something
45+
When a type `T` implements `Sync`, it indicates that something
4646
of this type has no possibility of introducing memory unsafety when used from
47-
multiple threads concurrently.
48-
49-
For example, sharing immutable data with an atomic reference count is
50-
threadsafe. Rust provides a type like this, `Arc<T>`, and it implements `Sync`,
51-
so it is safe to share between threads.
47+
multiple threads concurrently through shared references. This implies that
48+
types which don't have [interior mutability](mutability.html) are inherently
49+
`Sync`, which includes simple primitive types (like `u8`) and aggregate types
50+
containing them.
51+
52+
For sharing references across threads, Rust provides a wrapper type called
53+
`Arc<T>`. `Arc<T>` implements `Send` and `Sync` if and only if `T` implements
54+
both `Send` and `Sync`. For example, an object of type `Arc<RefCell<U>>` cannot
55+
be transferred across threads because
56+
[`RefCell`](choosing-your-guarantees.html#refcell%3Ct%3E) does not implement
57+
`Sync`, consequently `Arc<RefCell<U>>` would not implement `Send`.
5258

5359
These two traits allow you to use the type system to make strong guarantees
5460
about the properties of your code under concurrency. Before we demonstrate
@@ -70,7 +76,7 @@ fn main() {
7076
}
7177
```
7278

73-
The `thread::spawn()` method accepts a closure, which is executed in a
79+
The `thread::spawn()` method accepts a [closure](closures.html), which is executed in a
7480
new thread. It returns a handle to the thread, that can be used to
7581
wait for the child thread to finish and extract its result:
7682

@@ -215,29 +221,18 @@ fn main() {
215221
}
216222
```
217223

224+
Note that the value of `i` is bound (copied) to the closure and not shared
225+
among the threads.
218226

219-
If we'd tried to use `Mutex<T>` without wrapping it in an `Arc<T>` we would have
220-
seen another error like:
221-
222-
```text
223-
error: the trait `core::marker::Send` is not implemented for the type `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` [E0277]
224-
thread::spawn(move || {
225-
^~~~~~~~~~~~~
226-
note: `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` cannot be sent between threads safely
227-
thread::spawn(move || {
228-
^~~~~~~~~~~~~
229-
```
230-
231-
You see, [`Mutex`](../std/sync/struct.Mutex.html) has a
232-
[`lock`](../std/sync/struct.Mutex.html#method.lock)
233-
method which has this signature:
227+
Also note that [`lock`](../std/sync/struct.Mutex.html#method.lock) method of
228+
[`Mutex`](../std/sync/struct.Mutex.html) has this signature:
234229

235230
```ignore
236231
fn lock(&self) -> LockResult<MutexGuard<T>>
237232
```
238233

239-
and because `Send` is not implemented for `MutexGuard<T>`, we couldn't have
240-
transferred the guard across thread boundaries on it's own.
234+
and because `Send` is not implemented for `MutexGuard<T>`, the guard cannot
235+
cross thread boundaries, ensuring thread-locality of lock acquire and release.
241236

242237
Let's examine the body of the thread more closely:
243238

@@ -317,22 +312,24 @@ use std::sync::mpsc;
317312
fn main() {
318313
let (tx, rx) = mpsc::channel();
319314

320-
for _ in 0..10 {
315+
for i in 0..10 {
321316
let tx = tx.clone();
322317

323318
thread::spawn(move || {
324-
let answer = 42;
319+
let answer = i * i;
325320

326321
tx.send(answer);
327322
});
328323
}
329324

330-
rx.recv().ok().expect("Could not receive answer");
325+
for _ in 0..10 {
326+
println!("{}", rx.recv().unwrap());
327+
}
331328
}
332329
```
333330

334-
A `u32` is `Send` because we can make a copy. So we create a thread, ask it to calculate
335-
the answer, and then it `send()`s us the answer over the channel.
331+
Here we create 10 threads, asking each to calculate the square of a number (`i`
332+
at the time of `spawn()`), and then `send()` back the answer over the channel.
336333

337334

338335
## Panics

0 commit comments

Comments
 (0)