Update RELEASES.md for 1.2

This commit is contained in:
Brian Anderson 2015-07-09 14:34:30 -07:00
parent e7dbcf8f57
commit 0d60e8d002
1 changed files with 133 additions and 4 deletions

View File

@ -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