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`.
+* This is the first release with [experimental support for linking
+ with the MSVC linker and lib C on Windows (instead of using the GNU
+ variants via MinGW)][win]. It is yet recommended only for the most
+ intrepid Rusticians.
+* Benchmark compilations are showing a 30% improvement in
+ bootstrapping over 1.1.
+
+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.
+* [The `#[packed]` attribute is no longer silently accepted by the
+ compiler][packed]. This attribute did nothing and code that
+ mentioned it likely did not work as intended.
+* Associated type defaults are [now behind the
+ `associated_type_defaults` feature gate][ad]. In 1.1 associated type
+ defaults *did not work*, but could be mentioned syntactically. As
+ such this breakage has minimal impact.
+Language
+--------
-[parcodegen]: https://github.com/rust-lang/rust/pull/26018
+* 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, and [`iter::empty`] 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 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
+[packed]: https://github.com/rust-lang/rust/pull/25541
+[ad]: https://github.com/rust-lang/rust/pull/27382
+[win]: https://github.com/rust-lang/rust/pull/25350
Version 1.1.0 (June 2015)
=========================