]> git.lizzy.rs Git - rust.git/blobdiff - RELEASES.md
Rollup merge of #27285 - lastorset:trait-operator-impl, r=steveklabnik
[rust.git] / RELEASES.md
index 751205f8219ac0f2720608e71df8cf0232964a72..1dfd2186e138510ecacaa4afcbfe9eef0835d8bc 100644 (file)
 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)
 =========================