diff --git a/RELEASES.md b/RELEASES.md index 751205f8219..636bcc4312e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,15 +1,144 @@ Version 1.2.0 (August 2015) =========================== +* ~1200 changes, numerous bugfixes + Highlights ---------- -* [Parallel codegen][parcodegen] is now working again, which can substantially - speed up large builds in debug mode; It also gets another ~33% speedup when - bootstrapping on a 4 core machine (using 8 jobs). It's not enabled by default, - but will be "in the near future" +* [Dynamically-sized-type coercions][dst] allow smart pointer types + like `Rc` to contain types without a fixed size, arrays and trait + objects, finally enabling use of `Rc<[T]>` and completing the + implementation of DST. +* [Parallel codegen][parcodegen] is now working again, which can + substantially speed up large builds in debug mode; It also gets + another ~33% speedup when bootstrapping on a 4 core machine (using 8 + jobs). It's not enabled by default, but will be "in the near + future". It can be activated with the `-C codegen-units=N` flag to + `rustc`. +Breaking Changes +---------------- +* The [`to_uppercase`] and [`to_lowercase`] methods on `char` now do + unicode case mapping, which is a previously-planned change in + behavior and considered a bugfix. +* [`mem::align_of`] now specifies [the *minimum alignment* for + T][align], which is usually the alignment programs are interested + in, and the same value reported by clang's + `alignof`. [`mem::min_align_of`] is deprecated. This is not known to + break real code. + +Language +-------- + +* Patterns with `ref mut` now correctly invoke [`DerefMut`] when + matching against dereferencable values. + +Libraries +--------- + +* The [`Extend`] trait, which grows a collection from an iterator, is + implemented over iterators of references, for `String`, `Vec`, + `LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`, + `BTreeSet` and `BTreeMap`. [RFC][extend-rfc]. +* The [`iter::once`] function returns an iterator that yields a single + element. +* The [`iter::empty`] function returns an iterator that yields no + elements. +* The [`matches`] and [`rmatches`] methods on `str` return iterators + over substring matches. +* [`Cell`] and [`RefCell`] both implement [`Eq`]. +* A number of methods for wrapping arithmetic are added to the + integral types, [`wrapping_div`], [`wrapping_rem`], + [`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in + addition to the existing [`wrapping_add`], [`wrapping_sub`], and + [`wrapping_mul`] methods, and alternatives to the [`Wrapping`] + type.. It is illegal for the default arithmetic operations in Rust + to overflow; the desire to wrap must be explicit. +* The `{:#?}` formatting specifier [displays the alternate, + pretty-printed][debugfmt] form of the `Debug` formatter. This + feature was actually introduced prior to 1.0 with little + fanfare. +* [`fmt::Formatter`] implements [`fmt::Write`], a `fmt`-specific trait + for writing data to formatted strings, similar to [`io::Write`]. +* [`fmt::Formatter`] adds 'debug builder' methods, [`debug_struct`], + [`debug_tuple`], [`debug_list`], [`debug_set`], [`debug_map`]. These + are used by code generators to emit implementations of [`Debug`]. +* `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow] + methods that convert case, following Unicode case mapping. +* It is now easier to handle to poisoned locks. The [`PoisonError`] + type, returned by failing lock operations, exposes `into_inner`, + `get_ref`, and `get_mut`, which all give access to the inner lock + guard, and allow the poisoned lock to continue to operate. The + `is_poisoned` method of [`RwLock`] and [`Mutex`] can poll for a + poisoned lock without attempting to take the lock. +* On Unix the [`FromRawFd`] trait is implemented for [`Stdio`], and + [`AsRawFd`] for [`ChildStdin`], [`ChildStdout`], [`ChildStderr`]. + On Windows the `FromRawHandle` trait is implemented for `Stdio`, + and `AsRawHandle` for `ChildStdin`, `ChildStdout`, + `ChildStderr`. +* [`io::ErrorKind`] has a new variant, `InvalidData`, which indicates + malformed input. + +Misc +---- + +* `rustc` employs smarter heuristics for guessing at [typos]. +* `rustc` emits more efficient code for [no-op conversions between + unsafe pointers][nop]. +* Fat pointers are now [passed in pairs of immediate arguments][fat], + resulting in faster compile times and smaller code. + +[`Extend`]: http://doc.rust-lang.org/nightly/std/iter/trait.Extend.html +[extend-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md +[`iter::once`]: http://doc.rust-lang.org/nightly/std/iter/fn.once.html +[`iter::empty`]: http://doc.rust-lang.org/nightly/std/iter/fn.empty.html +[`matches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.matches +[`rmatches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatches +[`Cell`]: http://doc.rust-lang.org/nightly/std/cell/struct.Cell.html +[`RefCell`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html +[`wrapping_add`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_add +[`wrapping_sub`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_sub +[`wrapping_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_mul +[`wrapping_div`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_div +[`wrapping_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_rem +[`wrapping_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_neg +[`wrapping_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shl +[`wrapping_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shr +[`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html +[`fmt::Formatter`]: http://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html +[`fmt::Write`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Write.html +[`io::Write`]: http://doc.rust-lang.org/nightly/std/io/trait.Write.html +[`debug_struct`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_struct +[`debug_tuple`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_tuple +[`debug_list`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_list +[`debug_set`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_set +[`debug_map`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_map +[`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html +[strup]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_uppercase +[strlow]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_lowercase +[`to_uppercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_uppercase +[`to_lowercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_lowercase +[`PoisonError`]: http://doc.rust-lang.org/nightly/std/sync/struct.PoisonError.html +[`RwLock`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html +[`Mutex`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html +[`FromRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html +[`AsRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html +[`Stdio`]: http://doc.rust-lang.org/nightly/std/process/struct.Stdio.html +[`ChildStdin`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdin.html +[`ChildStdout`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdout.html +[`ChildStderr`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStderr.html +[`io::ErrorKind`]: http://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html +[debugfmt]: https://www.reddit.com/r/rust/comments/3ceaui/psa_produces_prettyprinted_debug_output/ +[`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html +[`mem::align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of.html +[align]: https://github.com/rust-lang/rust/pull/25646 +[`mem::min_align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.min_align_of.html +[typos]: https://github.com/rust-lang/rust/pull/26087 +[nop]: https://github.com/rust-lang/rust/pull/26336 +[fat]: https://github.com/rust-lang/rust/pull/26411 +[dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md [parcodegen]: https://github.com/rust-lang/rust/pull/26018