Skip to content

Commit e6094cc

Browse files
committed
---
yaml --- r: 56821 b: refs/heads/try c: 5b457c1 h: refs/heads/master i: 56819: 5ab42b7 v: v3
1 parent 4527a19 commit e6094cc

File tree

244 files changed

+8513
-4882
lines changed

Some content is hidden

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

244 files changed

+8513
-4882
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: c081ffbd1e845687202a975ea2e698b623e5722f
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 79a2b2eafc3c766cecec8a5f76317693bae9ed17
5-
refs/heads/try: 22786d6c5b3fb94ef64295f5b832ed776954db09
5+
refs/heads/try: 5b457c1469704b69a569724e03667f337fcb4749
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/.gitmodules

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[submodule "src/llvm"]
22
path = src/llvm
3-
url = git://github.com/brson/llvm.git
3+
url = https://github.com/brson/llvm.git
44
[submodule "src/libuv"]
55
path = src/libuv
6-
url = git://github.com/brson/libuv.git
6+
url = https://github.com/brson/libuv.git

branches/try/configure

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ need_cmd uname
237237
need_cmd date
238238
need_cmd tr
239239
need_cmd sed
240-
need_cmd file
240+
241241

242242
msg "inspecting environment"
243243

@@ -533,7 +533,7 @@ then
533533
LLVM_VERSION=$($LLVM_CONFIG --version)
534534

535535
case $LLVM_VERSION in
536-
(3.2svn|3.2|3.1svn|3.1|3.0svn|3.0)
536+
(3.3|3.3svn|3.2|3.2svn)
537537
msg "found ok version of LLVM: $LLVM_VERSION"
538538
;;
539539
(*)

branches/try/doc/rust.md

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,10 +441,10 @@ expression context, the final namespace qualifier is omitted.
441441
Two examples of paths with type arguments:
442442

443443
~~~~
444-
# use core::hashmap::linear::LinearMap;
444+
# use core::hashmap::HashMap;
445445
# fn f() {
446446
# fn id<T:Copy>(t: T) -> T { t }
447-
type t = LinearMap<int,~str>; // Type arguments used in a type expression
447+
type t = HashMap<int,~str>; // Type arguments used in a type expression
448448
let x = id::<int>(10); // Type arguments used in a call expression
449449
# }
450450
~~~~
@@ -1653,11 +1653,12 @@ Path expressions are [lvalues](#lvalues-rvalues-and-temporaries).
16531653

16541654
### Tuple expressions
16551655

1656-
Tuples are written by enclosing two or more comma-separated
1656+
Tuples are written by enclosing one or more comma-separated
16571657
expressions in parentheses. They are used to create [tuple-typed](#tuple-types)
16581658
values.
16591659

16601660
~~~~~~~~ {.tuple}
1661+
(0,);
16611662
(0f, 4.5f);
16621663
("a", 4u, true);
16631664
~~~~~~~~
@@ -2578,7 +2579,7 @@ to the record type-constructor. The differences are as follows:
25782579

25792580
Tuple types and values are denoted by listing the types or values of their
25802581
elements, respectively, in a parenthesized, comma-separated
2581-
list. Single-element tuples are not legal; all tuples have two or more values.
2582+
list.
25822583

25832584
The members of a tuple are laid out in memory contiguously, like a record, in
25842585
order specified by the tuple type.
@@ -3251,6 +3252,28 @@ of runtime logging modules follows.
32513252
* `::rt::backtrace` Log a backtrace on task failure
32523253
* `::rt::callback` Unused
32533254

3255+
#### Logging Expressions
3256+
3257+
Rust provides several macros to log information. Here's a simple Rust program
3258+
that demonstrates all four of them:
3259+
3260+
```rust
3261+
fn main() {
3262+
error!("This is an error log")
3263+
warn!("This is a warn log")
3264+
info!("this is an info log")
3265+
debug!("This is a debug log")
3266+
}
3267+
```
3268+
3269+
These four log levels correspond to levels 1-4, as controlled by `RUST_LOG`:
3270+
3271+
```bash
3272+
$ RUST_LOG=rust=3 ./rust
3273+
rust: ~"\"This is an error log\""
3274+
rust: ~"\"This is a warn log\""
3275+
rust: ~"\"this is an info log\""
3276+
```
32543277

32553278
# Appendix: Rationales and design tradeoffs
32563279

branches/try/doc/tutorial-tasks.md

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,74 +2,63 @@
22

33
# Introduction
44

5-
The designers of Rust designed the language from the ground up to support pervasive
6-
and safe concurrency through lightweight, memory-isolated tasks and
7-
message passing.
8-
9-
Rust tasks are not the same as traditional threads: rather, they are more like
10-
_green threads_. The Rust runtime system schedules tasks cooperatively onto a
11-
small number of operating system threads. Because tasks are significantly
5+
Rust provides safe concurrency through a combination
6+
of lightweight, memory-isolated tasks and message passing.
7+
This tutorial will describe the concurrency model in Rust, how it
8+
relates to the Rust type system, and introduce
9+
the fundamental library abstractions for constructing concurrent programs.
10+
11+
Rust tasks are not the same as traditional threads: rather,
12+
they are considered _green threads_, lightweight units of execution that the Rust
13+
runtime schedules cooperatively onto a small number of operating system threads.
14+
On a multi-core system Rust tasks will be scheduled in parallel by default.
15+
Because tasks are significantly
1216
cheaper to create than traditional threads, Rust can create hundreds of
1317
thousands of concurrent tasks on a typical 32-bit system.
18+
In general, all Rust code executes inside a task, including the `main` function.
19+
20+
In order to make efficient use of memory Rust tasks have dynamically sized stacks.
21+
A task begins its life with a small
22+
amount of stack space (currently in the low thousands of bytes, depending on
23+
platform), and acquires more stack as needed.
24+
Unlike in languages such as C, a Rust task cannot accidentally write to
25+
memory beyond the end of the stack, causing crashes or worse.
1426

15-
Tasks provide failure isolation and recovery. When an exception occurs in Rust
16-
code (as a result of an explicit call to `fail!()`, an assertion failure, or
17-
another invalid operation), the runtime system destroys the entire
27+
Tasks provide failure isolation and recovery. When a fatal error occurs in Rust
28+
code as a result of an explicit call to `fail!()`, an assertion failure, or
29+
another invalid operation, the runtime system destroys the entire
1830
task. Unlike in languages such as Java and C++, there is no way to `catch` an
1931
exception. Instead, tasks may monitor each other for failure.
2032

21-
Rust tasks have dynamically sized stacks. A task begins its life with a small
22-
amount of stack space (currently in the low thousands of bytes, depending on
23-
platform), and acquires more stack as needed. Unlike in languages such as C, a
24-
Rust task cannot run off the end of the stack. However, tasks do have a stack
25-
budget. If a Rust task exceeds its stack budget, then it will fail safely:
26-
with a checked exception.
27-
2833
Tasks use Rust's type system to provide strong memory safety guarantees. In
2934
particular, the type system guarantees that tasks cannot share mutable state
3035
with each other. Tasks communicate with each other by transferring _owned_
3136
data through the global _exchange heap_.
3237

33-
This tutorial explains the basics of tasks and communication in Rust,
34-
explores some typical patterns in concurrent Rust code, and finally
35-
discusses some of the more unusual synchronization types in the standard
36-
library.
37-
38-
> ***Warning:*** This tutorial is incomplete
39-
4038
## A note about the libraries
4139

4240
While Rust's type system provides the building blocks needed for safe
4341
and efficient tasks, all of the task functionality itself is implemented
4442
in the core and standard libraries, which are still under development
45-
and do not always present a consistent interface.
46-
47-
In particular, there are currently two independent modules that provide a
48-
message passing interface to Rust code: `core::comm` and `core::pipes`.
49-
`core::comm` is an older, less efficient system that is being phased out in
50-
favor of `pipes`. At some point, we will remove the existing `core::comm` API
51-
and move the user-facing portions of `core::pipes` to `core::comm`. In this
52-
tutorial, we discuss `pipes` and ignore the `comm` API.
43+
and do not always present a consistent or complete interface.
5344

5445
For your reference, these are the standard modules involved in Rust
5546
concurrency at this writing.
5647

5748
* [`core::task`] - All code relating to tasks and task scheduling
58-
* [`core::comm`] - The deprecated message passing API
59-
* [`core::pipes`] - The new message passing infrastructure and API
60-
* [`std::comm`] - Higher level messaging types based on `core::pipes`
49+
* [`core::comm`] - The message passing interface
50+
* [`core::pipes`] - The underlying messaging infrastructure
51+
* [`std::comm`] - Additional messaging types based on `core::pipes`
6152
* [`std::sync`] - More exotic synchronization tools, including locks
62-
* [`std::arc`] - The ARC (atomic reference counted) type, for safely sharing
63-
immutable data
64-
* [`std::par`] - Some basic tools for implementing parallel algorithms
53+
* [`std::arc`] - The ARC (atomically reference counted) type,
54+
for safely sharing immutable data
6555

6656
[`core::task`]: core/task.html
6757
[`core::comm`]: core/comm.html
6858
[`core::pipes`]: core/pipes.html
6959
[`std::comm`]: std/comm.html
7060
[`std::sync`]: std/sync.html
7161
[`std::arc`]: std/arc.html
72-
[`std::par`]: std/par.html
7362

7463
# Basics
7564

branches/try/doc/tutorial.md

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,11 @@ omitted.
495495

496496
A powerful application of pattern matching is *destructuring*:
497497
matching in order to bind names to the contents of data
498-
types. Remember that `(float, float)` is a tuple of two floats:
498+
types.
499+
500+
> ***Note:*** The following code makes use of tuples (`(float, float)`) which
501+
> are explained in section 5.3. For now you can think of tuples as a list of
502+
> items.
499503
500504
~~~~
501505
fn angle(vector: (float, float)) -> float {
@@ -747,7 +751,7 @@ fn area(sh: Shape) -> float {
747751

748752
Tuples in Rust behave exactly like structs, except that their fields
749753
do not have names. Thus, you cannot access their fields with dot notation.
750-
Tuples can have any arity except for 0 or 1 (though you may consider
754+
Tuples can have any arity except for 0 (though you may consider
751755
unit, `()`, as the empty tuple if you like).
752756

753757
~~~~
@@ -988,7 +992,7 @@ custom destructors.
988992

989993
# Boxes
990994

991-
Many modern languages represent values as as pointers to heap memory by
995+
Many modern languages represent values as pointers to heap memory by
992996
default. In contrast, Rust, like C and C++, represents such types directly.
993997
Another way to say this is that aggregate data in Rust are *unboxed*. This
994998
means that if you `let x = Point { x: 1f, y: 1f };`, you are creating a struct
@@ -1067,6 +1071,28 @@ let mut d = @mut 5; // mutable variable, mutable box
10671071
d = @mut 15;
10681072
~~~~
10691073

1074+
A mutable variable and an immutable variable can refer to the same box, given
1075+
that their types are compatible. Mutability of a box is a property of its type,
1076+
however, so for example a mutable handle to an immutable box cannot be
1077+
assigned a reference to a mutable box.
1078+
1079+
~~~~
1080+
let a = @1; // immutable box
1081+
let b = @mut 2; // mutable box
1082+
1083+
let mut c : @int; // declare a variable with type managed immutable int
1084+
let mut d : @mut int; // and one of type managed mutable int
1085+
1086+
c = a; // box type is the same, okay
1087+
d = b; // box type is the same, okay
1088+
~~~~
1089+
1090+
~~~~ {.xfail-test}
1091+
// but b cannot be assigned to c, or a to d
1092+
c = b; // error
1093+
~~~~
1094+
1095+
10701096
# Move semantics
10711097

10721098
Rust uses a shallow copy for parameter passing, assignment and returning values
@@ -1081,6 +1107,16 @@ let y = x.clone(); // y is a newly allocated box
10811107
let z = x; // no new memory allocated, x can no longer be used
10821108
~~~~
10831109

1110+
Since in owned boxes mutability is a property of the owner, not the
1111+
box, mutable boxes may become immutable when they are moved, and vice-versa.
1112+
1113+
~~~~
1114+
let r = ~13;
1115+
let mut s = r; // box becomes mutable
1116+
*s += 1;
1117+
let t = s; // box becomes immutable
1118+
~~~~
1119+
10841120
# Borrowed pointers
10851121

10861122
Rust's borrowed pointers are a general purpose reference type. In contrast with
@@ -1191,7 +1227,7 @@ they are frozen:
11911227
let x = @mut 5;
11921228
let y = x;
11931229
{
1194-
let y = &*y; // the managed box is now frozen
1230+
let z = &*y; // the managed box is now frozen
11951231
// modifying it through x or y will cause a task failure
11961232
}
11971233
// the box is now unfrozen again
@@ -1888,8 +1924,8 @@ illegal to copy and pass by value.
18881924
Generic `type`, `struct`, and `enum` declarations follow the same pattern:
18891925

18901926
~~~~
1891-
# use core::hashmap::linear::LinearMap;
1892-
type Set<T> = LinearMap<T, ()>;
1927+
# use core::hashmap::HashMap;
1928+
type Set<T> = HashMap<T, ()>;
18931929
18941930
struct Stack<T> {
18951931
elements: ~[T]
@@ -2288,7 +2324,7 @@ impl Shape for CircleStruct {
22882324
Notice that methods of `Circle` can call methods on `Shape`, as our
22892325
`radius` implementation calls the `area` method.
22902326
This is a silly way to compute the radius of a circle
2291-
(since we could just return the `circle` field), but you get the idea.
2327+
(since we could just return the `radius` field), but you get the idea.
22922328

22932329
In type-parameterized functions,
22942330
methods of the supertrait may be called on values of subtrait-bound type parameters.

branches/try/man/rustc.1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,5 +170,5 @@ See \fBAUTHORS.txt\fR in the rust source distribution. Graydon Hoare
170170
<\fI[email protected]\fR> is the project leader.
171171

172172
.SH "COPYRIGHT"
173-
This work is licensed under MIT-like terms. See \fBLICENSE.txt\fR
174-
in the rust source distribution.
173+
This work is dual-licensed under Apache 2.0 and MIT terms. See \fBCOPYRIGHT\fR
174+
file in the rust source distribution.

branches/try/mk/dist.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ PKG_FILES := \
1818
$(S)COPYRIGHT \
1919
$(S)LICENSE-APACHE \
2020
$(S)LICENSE-MIT \
21+
$(S)AUTHORS.txt \
2122
$(S)README.md \
2223
$(S)configure $(S)Makefile.in \
2324
$(S)man \

branches/try/mk/install.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ install-host: $(CSREQ$(ISTAGE)_T_$(CFG_BUILD_TRIPLE)_H_$(CFG_BUILD_TRIPLE))
119119
$(Q)$(call INSTALL_LIB,$(HL),$(PHL),$(LIBSYNTAX_GLOB_$(CFG_BUILD_TRIPLE)))
120120
$(Q)$(call INSTALL_LIB,$(HL),$(PHL),$(LIBRUSTI_GLOB_$(CFG_BUILD_TRIPLE)))
121121
$(Q)$(call INSTALL_LIB,$(HL),$(PHL),$(LIBRUST_GLOB_$(CFG_BUILD_TRIPLE)))
122+
$(Q)$(call INSTALL_LIB,$(HL),$(PHL),$(LIBRUSTPKG_GLOB_$(CFG_BUILD_TRIPLE)))
123+
$(Q)$(call INSTALL_LIB,$(HL),$(PHL),$(LIBRUSTDOC_GLOB_$(CFG_BUILD_TRIPLE)))
122124
$(Q)$(call INSTALL,$(HL),$(PHL),$(CFG_RUNTIME_$(CFG_BUILD_TRIPLE)))
123125
$(Q)$(call INSTALL,$(HL),$(PHL),$(CFG_RUSTLLVM_$(CFG_BUILD_TRIPLE)))
124126
$(Q)$(call INSTALL,$(S)/man, \

branches/try/mk/platform.mk

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,31 @@ CFG_RUN_arm-linux-androideabi=
239239
CFG_RUN_TARG_arm-linux-androideabi=
240240
RUSTC_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH)
241241

242+
# mips-unknown-linux-gnu configuration
243+
CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
244+
CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
245+
CPP_mips-unknown-linux-gnu=mips-linux-gnu-gcc -E
246+
AR_mips-unknown-linux-gnu=mips-linux-gnu-ar
247+
CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so
248+
CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so
249+
CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
250+
CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32
251+
CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti
252+
CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-gnu := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32
253+
CFG_GCCISH_DEF_FLAG_mips-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
254+
CFG_GCCISH_PRE_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-whole-archive
255+
CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive -Wl,-znoexecstack
256+
CFG_DEF_SUFFIX_mips-unknown-linux-gnu := .linux.def
257+
CFG_INSTALL_NAME_mips-unknown-linux-gnu =
258+
CFG_LIBUV_LINK_FLAGS_mips-unknown-linux-gnu =
259+
CFG_EXE_SUFFIX_mips-unknown-linux-gnu :=
260+
CFG_WINDOWSY_mips-unknown-linux-gnu :=
261+
CFG_UNIXY_mips-unknown-linux-gnu := 1
262+
CFG_PATH_MUNGE_mips-unknown-linux-gnu := true
263+
CFG_LDPATH_mips-unknown-linux-gnu :=
264+
CFG_RUN_mips-unknown-linux-gnu=
265+
CFG_RUN_TARG_mips-unknown-linux-gnu=
266+
242267
# i686-pc-mingw32 configuration
243268
CC_i686-pc-mingw32=$(CC)
244269
CXX_i686-pc-mingw32=$(CXX)

branches/try/mk/rt.mk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
LIBUV_FLAGS_i386 = -m32 -fPIC
2828
LIBUV_FLAGS_x86_64 = -m64 -fPIC
2929
LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99
30+
LIBUV_FLAGS_mips = -fPIC -mips32r2 -msoft-float -mabi=32
3031

3132
# when we're doing a snapshot build, we intentionally degrade as many
3233
# features in libuv and the runtime as possible, to ease portability.
@@ -180,6 +181,10 @@ else
180181
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
181182
$$(Q)$$(MAKE) -C $$(S)src/libuv/ \
182183
CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
184+
LDFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1)))" \
185+
CC="$$(CC_$(1))" \
186+
CXX="$$(CXX_$(1))" \
187+
AR="$$(AR_$(1))" \
183188
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \
184189
V=$$(VERBOSE)
185190
endif

branches/try/src/compiletest/compiletest.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#[allow(deprecated_mode)];
1818
#[allow(deprecated_pattern)];
1919

20-
extern mod core(vers = "0.6");
21-
extern mod std(vers = "0.6");
20+
extern mod core(vers = "0.7-rc");
21+
extern mod std(vers = "0.7-rc");
2222

2323
use core::*;
2424

0 commit comments

Comments
 (0)