Skip to content

Commit 88f3475

Browse files
committed
---
yaml --- r: 145307 b: refs/heads/try2 c: a95604f h: refs/heads/master i: 145305: 99e5482 145303: 4c564f3 v: v3
1 parent 7a7fff9 commit 88f3475

File tree

152 files changed

+3828
-3554
lines changed

Some content is hidden

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

152 files changed

+3828
-3554
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: 88bc11e646c8d1db7ac7894f74e2f660d9a82c54
8+
refs/heads/try2: a95604fcaacf9cbad5f57b8c08e1b3e871462e9c
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ endif
102102

103103
ifdef CFG_ENABLE_DEBUG
104104
$(info cfg: enabling more debugging (CFG_ENABLE_DEBUG))
105-
CFG_RUSTC_FLAGS += --cfg debug
106105
CFG_GCCISH_CFLAGS += -DRUST_DEBUG
107106
else
107+
CFG_RUSTC_FLAGS += --cfg ndebug
108108
CFG_GCCISH_CFLAGS += -DRUST_NDEBUG
109109
endif
110110

branches/try2/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ documentation.
6161

6262
[repo]: https://github.com/mozilla/rust
6363
[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz
64-
[tutorial]: http://static.rust-lang.org/doc/tutorial.html
64+
[tutorial]: http://static.rust-lang.org/doc/0.7/tutorial.html
6565

6666
## Notes
6767

branches/try2/RELEASES.txt

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,148 @@
1+
Version 0.8 (October 2013)
2+
--------------------------
3+
4+
* ~2100 changes, numerous bugfixes
5+
6+
* Language
7+
* The `for` loop syntax has changed to work with the `Iterator` trait.
8+
* At long last, unwinding works on Windows.
9+
* Default methods definitely mostly work.
10+
* Many trait inheritance bugs fixed.
11+
* Owned and borrowed trait objects work more reliably.
12+
* `copy` is no longer a keyword. It has been replaced by the `Clone` trait.
13+
* rustc can omit emission of code for the `debug!` macro if it is passed
14+
`--cfg ndebug`
15+
* mod.rs is now "blessed". When loading `mod foo;`, rustc will now look
16+
for foo.rs, then foo/mod.rs, and will generate an error when both are
17+
present.
18+
* Strings no longer contain trailing nulls. The new `std::c_str` module
19+
provides new mechanisms for converting to C strings.
20+
* The type of foreign functions is now `extern "C" fn` instead of `*u8'.
21+
* The FFI has been overhauled such that foreign functions are called directly,
22+
instead of through a stack-switching wrapper.
23+
* Calling a foreign function must be done through a Rust function with the
24+
`#[fixed_stack_segment]` attribute.
25+
* The `externfn!` macro can be used to declare both a foreign function and
26+
a `#[fixed_stack_segment]` wrapper at once.
27+
* `pub` and `priv` modifiers on `extern` blocks are no longer parsed.
28+
* `unsafe` is no longer allowed on extern fns - they are all unsafe.
29+
* `priv` is disallowed everywhere except for struct fields and enum variants.
30+
* `&T` (besides `&'static T`) is no longer allowed in `@T`.
31+
* `ref` bindings in irrefutable patterns work correctly now.
32+
* `char` is now prevented from containing invalid code points.
33+
* Casting to `bool` is no longer allowed.
34+
* `yield` is a reserved keyword.
35+
* `typeof` is a reserved keyword.
36+
* Crates may be imported by URL with `extern mod foo = "url";`.
37+
* Explicit enum discriminants may be given as uints as in `enum E { V = 0u }`
38+
* Static vectors can be initialized with repeating elements,
39+
e.g. `static foo: [u8, .. 100]: [0, .. 100];`.
40+
* Static structs can be initialized with functional record update,
41+
e.g. `static foo: Foo = Foo { a: 5, .. bar };`.
42+
* `cfg!` can be used to conditionally execute code based on the crate
43+
configuration, similarly to `#[cfg(...)]`.
44+
* The `unnecessary_qualification` lint detects unneeded module
45+
prefixes (default: allow).
46+
* Arithmetic operations have been implemented on the SIMD types in
47+
`std::unstable::simd`.
48+
* Exchange allocation headers were removed, reducing memory usage.
49+
* `format!` implements a completely new, extensible, and higher-performance
50+
string formatting system. It will replace `fmt!`.
51+
* `print!` and `println!` write formatted strings (using the `format!`
52+
extension) to stdout.
53+
* `write!` and `writeln!` write formatted strings (using the `format!`
54+
extension) to the new Writers in `std::rt::io`.
55+
* The library section in which a function or static is placed may
56+
be specified with `#[link_section = "..."]`.
57+
* The `proto!` syntax extension for defining bounded message protocols
58+
was removed.
59+
* `macro_rules!` is hygenic for `let` declarations.
60+
* The `#[export_name]` attribute specifies the name of a symbol.
61+
* `unreachable!` can be used to indicate unreachable code, and fails
62+
if executed.
63+
64+
* Libraries
65+
* std: Transitioned to the new runtime, written in Rust.
66+
* std: Added an experimental I/O library, `rt::io`, based on the new
67+
runtime.
68+
* std: A new generic `range` function was added to the prelude, replacing
69+
`uint::range` and friends.
70+
* std: `range_rev` no longer exists. Since range is an iterator it can be
71+
reversed with `range(lo, hi).invert()`.
72+
* std: The `chain` method on option renamed to `and_then`; `unwrap_or_default`
73+
renamed to `unwrap_or`.
74+
* std: The `iterator` module was renamed to `iter`.
75+
* std: Integral types now support the `checked_add`, `checked_sub`, and
76+
`checked_mul` operations for detecting overflow.
77+
* std: Many methods in `str`, `vec`, `option, `result` were renamed for
78+
consistency.
79+
* std: Methods are standardizing on conventions for casting methods:
80+
`to_foo` for copying, `into_foo` for moving, `as_foo` for temporary
81+
and cheap casts.
82+
* std: The `CString` type in `c_str` provides new ways to convert to and
83+
from C strings.
84+
* std: `DoubleEndedIterator` can yield elements in two directions.
85+
* std: The `mut_split` method on vectors partitions an `&mut [T]` into
86+
two splices.
87+
* std: `str::from_bytes` renamed to `str::from_utf8`.
88+
* std: `pop_opt` and `shift_opt` methods added to vectors.
89+
* std: The task-local data interface no longer uses @, and keys are
90+
no longer function pointers.
91+
* std: The `swap_unwrap` method of `Option` renamed to `take_unwrap`.
92+
* std: Added `SharedPort` to `comm`.
93+
* std: `Eq` has a default method for `ne`; only `eq` is required
94+
in implementations.
95+
* std: `Ord` has default methods for `le`, `gt` and `le`; only `lt`
96+
is required in implementations.
97+
* std: `is_utf8` performance is improved, impacting many string functions.
98+
* std: `os::MemoryMap` provides cross-platform mmap.
99+
* std: `ptr::offset` is now unsafe, but also more optimized. Offsets that
100+
are not 'in-bounds' are considered undefined.
101+
* std: Many freestanding functions in `vec` removed in favor of methods.
102+
* std: Many freestanding functions on scalar types removed in favor of
103+
methods.
104+
* std: Many options to task builders were removed since they don't make
105+
sense in the new scheduler design.
106+
* std: More containers implement `FromIterator` so can be created by the
107+
`collect` method.
108+
* std: More complete atomic types in `unstable::atomics`.
109+
* std: `comm::PortSet` removed.
110+
* std: Mutating methods in the `Set` and `Map` traits have been moved into
111+
the `MutableSet` and `MutableMap` traits. `Container::is_empty`,
112+
`Map::contains_key`, `MutableMap::insert`, and `MutableMap::remove` have
113+
default implementations.
114+
* extra: `dlist`, the doubly-linked list was modernized.
115+
* extra: Added a `hex` module with `ToHex` and `FromHex` traits.
116+
* extra: Added `glob` module, replacing `std::os::glob`.
117+
* extra: `rope` was removed.
118+
* extra: `deque` was renamed to `ringbuf`. `RingBuf` implements `Deque`.
119+
* extra: `net`, and `timer` were removed. The experimental replacements
120+
are `std::rt::io::net` and `std::rt::io::timer`.
121+
* extra: Iterators implemented for `SmallIntMap`.
122+
* extra: Iterators implemented for `Bitv` and `BitvSet`.
123+
* extra: `SmallIntSet` removed. Use `BitvSet`.
124+
* extra: Performance of JSON parsing greatly improved.
125+
* extra: `semver` updated to SemVer 2.0.0.
126+
* extra: `term` handles more terminals correctly.
127+
* extra: `dbg` module removed.
128+
129+
* Other
130+
* rustc's debug info generation (`-Z debug-info`) is greatly improved.
131+
* rustc accepts `--target-cpu` to compile to a specific CPU architecture,
132+
similarly to gcc's `--march` flag.
133+
* rustpkg has received many improvements.
134+
* rustpkg supports git tags as package IDs.
135+
* rustpkg builds into target-specific directories so it can be used for
136+
cross-compiling.
137+
* The number of concurrent test tasks is controlled by the environment
138+
variable RUST_TEST_TASKS.
139+
* The test harness can now report metrics for benchmarks.
140+
* All tools have man pages.
141+
* Programs compiled with `--test` now support the `-h` and `--help` flags.
142+
* The runtime uses jemalloc for allocations.
143+
* Segmented stacks are temporarily disabled as part of the transition to
144+
the new runtime. Stack overflows are possible!
145+
1146
Version 0.7 (July 2013)
2147
-----------------------
3148

branches/try2/configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ opt optimize-cxx 1 "build optimized C++ code"
373373
opt optimize-llvm 1 "build optimized LLVM"
374374
opt optimize-tests 1 "build tests with optimizations"
375375
opt llvm-assertions 1 "build LLVM with assertions"
376-
opt debug 0 "build with extra debug fun"
376+
opt debug 1 "build with extra debug fun"
377377
opt ratchet-bench 0 "ratchet benchmarks"
378378
opt fast-make 0 "use .gitmodules as timestamp for submodule deps"
379379
opt manage-submodules 1 "let the build manage the git submodules"

branches/try2/doc/rust.md

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ string_body : non_double_quote
248248
| '\x5c' [ '\x22' | common_escape ] ;
249249
250250
common_escape : '\x5c'
251-
| 'n' | 'r' | 't'
251+
| 'n' | 'r' | 't' | '0'
252252
| 'x' hex_digit 2
253253
| 'u' hex_digit 4
254254
| 'U' hex_digit 8 ;
@@ -962,24 +962,76 @@ parameters to allow methods with that trait to be called on values
962962
of that type.
963963

964964

965-
#### Unsafe functions
966-
967-
Unsafe functions are those containing unsafe operations that are not contained in an [`unsafe` block](#unsafe-blocks).
968-
Such a function must be prefixed with the keyword `unsafe`.
965+
#### Unsafety
969966

970967
Unsafe operations are those that potentially violate the memory-safety guarantees of Rust's static semantics.
971-
Specifically, the following operations are considered unsafe:
968+
969+
The following language level features cannot be used in the safe subset of Rust:
972970

973971
- Dereferencing a [raw pointer](#pointer-types).
974-
- Casting a [raw pointer](#pointer-types) to a safe pointer type.
975-
- Calling an unsafe function.
972+
- Calling an unsafe function (including an intrinsic or foreign function).
976973

977-
##### Unsafe blocks
974+
##### Unsafe functions
978975

979-
A block of code can also be prefixed with the `unsafe` keyword, to permit a sequence of unsafe operations in an otherwise-safe function.
980-
This facility exists because the static semantics of Rust are a necessary approximation of the dynamic semantics.
981-
When a programmer has sufficient conviction that a sequence of unsafe operations is actually safe, they can encapsulate that sequence (taken as a whole) within an `unsafe` block. The compiler will consider uses of such code "safe", to the surrounding context.
976+
Unsafe functions are functions that are not safe in all contexts and/or for all possible inputs.
977+
Such a function must be prefixed with the keyword `unsafe`.
978+
979+
##### Unsafe blocks
982980

981+
A block of code can also be prefixed with the `unsafe` keyword, to permit calling `unsafe` functions
982+
or dereferencing raw pointers within a safe function.
983+
984+
When a programmer has sufficient conviction that a sequence of potentially unsafe operations is
985+
actually safe, they can encapsulate that sequence (taken as a whole) within an `unsafe` block. The
986+
compiler will consider uses of such code safe, in the surrounding context.
987+
988+
Unsafe blocks are used to wrap foreign libraries, make direct use of hardware or implement features
989+
not directly present in the language. For example, Rust provides the language features necessary to
990+
implement memory-safe concurrency in the language but the implementation of tasks and message
991+
passing is in the standard library.
992+
993+
Rust's type system is a conservative approximation of the dynamic safety requirements, so in some
994+
cases there is a performance cost to using safe code. For example, a doubly-linked list is not a
995+
tree structure and can only be represented with managed or reference-counted pointers in safe code.
996+
By using `unsafe` blocks to represent the reverse links as raw pointers, it can be implemented with
997+
only owned pointers.
998+
999+
##### Behavior considered unsafe
1000+
1001+
This is a list of behavior which is forbidden in all Rust code. Type checking provides the guarantee
1002+
that these issues are never caused by safe code. An `unsafe` block or function is responsible for
1003+
never invoking this behaviour or exposing an API making it possible for it to occur in safe code.
1004+
1005+
* Data races
1006+
* Dereferencing a null/dangling raw pointer
1007+
* Mutating an immutable value/reference, if it is not marked as non-`Freeze`
1008+
* Reads of [undef](http://llvm.org/docs/LangRef.html#undefined-values) (uninitialized) memory
1009+
* Breaking the [pointer aliasing rules](http://llvm.org/docs/LangRef.html#pointer-aliasing-rules)
1010+
with raw pointers (a subset of the rules used by C)
1011+
* Invoking undefined behavior via compiler intrinsics:
1012+
* Indexing outside of the bounds of an object with `std::ptr::offset` (`offset` intrinsic), with
1013+
the exception of one byte past the end which is permitted.
1014+
* Using `std::ptr::copy_nonoverlapping_memory` (`memcpy32`/`memcpy64` instrinsics) on
1015+
overlapping buffers
1016+
* Invalid values in primitive types, even in private fields/locals:
1017+
* Dangling/null pointers in non-raw pointers, or slices
1018+
* A value other than `false` (0) or `true` (1) in a `bool`
1019+
* A discriminant in an `enum` not included in the type definition
1020+
* A value in a `char` which is a surrogate or above `char::MAX`
1021+
* non-UTF-8 byte sequences in a `str`
1022+
1023+
##### Behaviour not considered unsafe
1024+
1025+
This is a list of behaviour not considered *unsafe* in Rust terms, but that may be undesired.
1026+
1027+
* Deadlocks
1028+
* Reading data from private fields (`std::repr`, `format!("{:?}", x)`)
1029+
* Leaks due to reference count cycles, even in the global heap
1030+
* Exiting without calling destructors
1031+
* Sending signals
1032+
* Accessing/modifying the file system
1033+
* Unsigned integer overflow (well-defined as wrapping)
1034+
* Signed integer overflow (well-defined as two's complement representation wrapping)
9831035

9841036
#### Diverging functions
9851037

@@ -3376,8 +3428,8 @@ sign (`=`) followed by the log level, from 1 to 4, inclusive. Level 1
33763428
is the error level, 2 is warning, 3 info, and 4 debug. You can also
33773429
use the symbolic constants `error`, `warn`, `info`, and `debug`. Any
33783430
logs less than or equal to the specified level will be output. If not
3379-
specified then log level 4 is assumed. However, debug messages are
3380-
only available if `--cfg=debug` is passed to `rustc`.
3431+
specified then log level 4 is assumed. Debug messages can be omitted
3432+
by passing `--cfg ndebug` to `rustc`.
33813433

33823434
As an example, to see all the logs generated by the compiler, you would set
33833435
`RUST_LOG` to `rustc`, which is the crate name (as specified in its `link`

0 commit comments

Comments
 (0)