|
1 | 1 | Version 1.2.0 (August 2015)
|
2 | 2 | ===========================
|
3 | 3 |
|
| 4 | +* ~1200 changes, numerous bugfixes |
| 5 | + |
4 | 6 | Highlights
|
5 | 7 | ----------
|
6 | 8 |
|
7 |
| -* [Parallel codegen][parcodegen] is now working again, which can substantially |
8 |
| - speed up large builds in debug mode; It also gets another ~33% speedup when |
9 |
| - bootstrapping on a 4 core machine (using 8 jobs). It's not enabled by default, |
10 |
| - but will be "in the near future" |
| 9 | +* [Dynamically-sized-type coercions][dst] allow smart pointer types |
| 10 | + like `Rc` to contain types without a fixed size, arrays and trait |
| 11 | + objects, finally enabling use of `Rc<[T]>` and completing the |
| 12 | + implementation of DST. |
| 13 | +* [Parallel codegen][parcodegen] is now working again, which can |
| 14 | + substantially speed up large builds in debug mode; It also gets |
| 15 | + another ~33% speedup when bootstrapping on a 4 core machine (using 8 |
| 16 | + jobs). It's not enabled by default, but will be "in the near |
| 17 | + future". It can be activated with the `-C codegen-units=N` flag to |
| 18 | + `rustc`. |
| 19 | + |
| 20 | +Breaking Changes |
| 21 | +---------------- |
| 22 | + |
| 23 | +* The [`to_uppercase`] and [`to_lowercase`] methods on `char` now do |
| 24 | + unicode case mapping, which is a previously-planned change in |
| 25 | + behavior and considered a bugfix. |
| 26 | +* [`mem::align_of`] now specifies [the *minimum alignment* for |
| 27 | + T][align], which is usually the alignment programs are interested |
| 28 | + in, and the same value reported by clang's |
| 29 | + `alignof`. [`mem::min_align_of`] is deprecated. This is not known to |
| 30 | + break real code. |
| 31 | + |
| 32 | +Language |
| 33 | +-------- |
11 | 34 |
|
| 35 | +* Patterns with `ref mut` now correctly invoke [`DerefMut`] when |
| 36 | + matching against dereferencable values. |
| 37 | + |
| 38 | +Libraries |
| 39 | +--------- |
12 | 40 |
|
| 41 | +* The [`Extend`] trait, which grows a collection from an iterator, is |
| 42 | + implemented over iterators of references, for `String`, `Vec`, |
| 43 | + `LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`, |
| 44 | + `BTreeSet` and `BTreeMap`. [RFC][extend-rfc]. |
| 45 | +* The [`iter::once`] function returns an iterator that yields a single |
| 46 | + element. |
| 47 | +* The [`iter::empty`] function returns an iterator that yields no |
| 48 | + elements. |
| 49 | +* The [`matches`] and [`rmatches`] methods on `str` return iterators |
| 50 | + over substring matches. |
| 51 | +* [`Cell`] and [`RefCell`] both implement [`Eq`]. |
| 52 | +* A number of methods for wrapping arithmetic are added to the |
| 53 | + integral types, [`wrapping_div`], [`wrapping_rem`], |
| 54 | + [`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in |
| 55 | + addition to the existing [`wrapping_add`], [`wrapping_sub`], and |
| 56 | + [`wrapping_mul`] methods, and alternatives to the [`Wrapping`] |
| 57 | + type.. It is illegal for the default arithmetic operations in Rust |
| 58 | + to overflow; the desire to wrap must be explicit. |
| 59 | +* The `{:#?}` formatting specifier [displays the alternate, |
| 60 | + pretty-printed][debugfmt] form of the `Debug` formatter. This |
| 61 | + feature was actually introduced prior to 1.0 with little |
| 62 | + fanfare. |
| 63 | +* [`fmt::Formatter`] implements [`fmt::Write`], a `fmt`-specific trait |
| 64 | + for writing data to formatted strings, similar to [`io::Write`]. |
| 65 | +* [`fmt::Formatter`] adds 'debug builder' methods, [`debug_struct`], |
| 66 | + [`debug_tuple`], [`debug_list`], [`debug_set`], [`debug_map`]. These |
| 67 | + are used by code generators to emit implementations of [`Debug`]. |
| 68 | +* `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow] |
| 69 | + methods that convert case, following Unicode case mapping. |
| 70 | +* It is now easier to handle to poisoned locks. The [`PoisonError`] |
| 71 | + type, returned by failing lock operations, exposes `into_inner`, |
| 72 | + `get_ref`, and `get_mut`, which all give access to the inner lock |
| 73 | + guard, and allow the poisoned lock to continue to operate. The |
| 74 | + `is_poisoned` method of [`RwLock`] and [`Mutex`] can poll for a |
| 75 | + poisoned lock without attempting to take the lock. |
| 76 | +* On Unix the [`FromRawFd`] trait is implemented for [`Stdio`], and |
| 77 | + [`AsRawFd`] for [`ChildStdin`], [`ChildStdout`], [`ChildStderr`]. |
| 78 | + On Windows the `FromRawHandle` trait is implemented for `Stdio`, |
| 79 | + and `AsRawHandle` for `ChildStdin`, `ChildStdout`, |
| 80 | + `ChildStderr`. |
| 81 | +* [`io::ErrorKind`] has a new variant, `InvalidData`, which indicates |
| 82 | + malformed input. |
| 83 | + |
| 84 | +Misc |
| 85 | +---- |
| 86 | + |
| 87 | +* `rustc` employs smarter heuristics for guessing at [typos]. |
| 88 | +* `rustc` emits more efficient code for [no-op conversions between |
| 89 | + unsafe pointers][nop]. |
| 90 | +* Fat pointers are now [passed in pairs of immediate arguments][fat], |
| 91 | + resulting in faster compile times and smaller code. |
| 92 | + |
| 93 | +[`Extend`]: http://doc.rust-lang.org/nightly/std/iter/trait.Extend.html |
| 94 | +[extend-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md |
| 95 | +[`iter::once`]: http://doc.rust-lang.org/nightly/std/iter/fn.once.html |
| 96 | +[`iter::empty`]: http://doc.rust-lang.org/nightly/std/iter/fn.empty.html |
| 97 | +[`matches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.matches |
| 98 | +[`rmatches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatches |
| 99 | +[`Cell`]: http://doc.rust-lang.org/nightly/std/cell/struct.Cell.html |
| 100 | +[`RefCell`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html |
| 101 | +[`wrapping_add`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_add |
| 102 | +[`wrapping_sub`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_sub |
| 103 | +[`wrapping_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_mul |
| 104 | +[`wrapping_div`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_div |
| 105 | +[`wrapping_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_rem |
| 106 | +[`wrapping_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_neg |
| 107 | +[`wrapping_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shl |
| 108 | +[`wrapping_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shr |
| 109 | +[`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html |
| 110 | +[`fmt::Formatter`]: http://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html |
| 111 | +[`fmt::Write`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Write.html |
| 112 | +[`io::Write`]: http://doc.rust-lang.org/nightly/std/io/trait.Write.html |
| 113 | +[`debug_struct`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_struct |
| 114 | +[`debug_tuple`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_tuple |
| 115 | +[`debug_list`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_list |
| 116 | +[`debug_set`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_set |
| 117 | +[`debug_map`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_map |
| 118 | +[`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html |
| 119 | +[strup]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_uppercase |
| 120 | +[strlow]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_lowercase |
| 121 | +[`to_uppercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_uppercase |
| 122 | +[`to_lowercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_lowercase |
| 123 | +[`PoisonError`]: http://doc.rust-lang.org/nightly/std/sync/struct.PoisonError.html |
| 124 | +[`RwLock`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html |
| 125 | +[`Mutex`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html |
| 126 | +[`FromRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html |
| 127 | +[`AsRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html |
| 128 | +[`Stdio`]: http://doc.rust-lang.org/nightly/std/process/struct.Stdio.html |
| 129 | +[`ChildStdin`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdin.html |
| 130 | +[`ChildStdout`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdout.html |
| 131 | +[`ChildStderr`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStderr.html |
| 132 | +[`io::ErrorKind`]: http://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html |
| 133 | +[debugfmt]: https://www.reddit.com/r/rust/comments/3ceaui/psa_produces_prettyprinted_debug_output/ |
| 134 | +[`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html |
| 135 | +[`mem::align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of.html |
| 136 | +[align]: https://github.com/rust-lang/rust/pull/25646 |
| 137 | +[`mem::min_align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.min_align_of.html |
| 138 | +[typos]: https://github.com/rust-lang/rust/pull/26087 |
| 139 | +[nop]: https://github.com/rust-lang/rust/pull/26336 |
| 140 | +[fat]: https://github.com/rust-lang/rust/pull/26411 |
| 141 | +[dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md |
13 | 142 | [parcodegen]: https://github.com/rust-lang/rust/pull/26018
|
14 | 143 |
|
15 | 144 |
|
|
0 commit comments