diff --git a/RELEASES.md b/RELEASES.md index 571389041d6b6..8f641792add66 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,3 +1,261 @@ +Version 1.17.0 (2017-04-27) +=========================== + +Language +-------- + +* [The lifetime of statics and consts defaults to `'static`][39265]. [RFC 1623] +* [Fields of structs may be initialized without duplicating the field/variable + names][39761]. [RFC 1682] +* [`Self` may be included in the `where` clause of `impls`][38864]. [RFC 1647] +* [When coercing to an unsized type lifetimes must be equal][40319]. That is, + there is no subtyping between `T` and `U` when `T: Unsize`. For example, + coercing `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to + `'b`. Soundness fix. +* [Values passed to the indexing operator, `[]`, automatically coerce][40166] +* [Static variables may contain references to other statics][40027] + +Compiler +-------- + +* [Exit quickly on only `--emit dep-info`][40336] +* [Make `-C relocation-model` more correctly determine whether the linker + creates a position-independent executable][40245] +* [Add `-C overflow-checks` to directly control whether integer overflow + panics][40037] +* [The rustc type checker now checks items on demand instead of in a single + in-order pass][40008]. This is mostly an internal refactoring in support of + future work, including incremental type checking, but also resolves [RFC + 1647], allowing `Self` to appear in `impl` `where` clauses. +* [Optimize vtable loads][39995] +* [Turn off vectorization for Emscripten targets][39990] +* [Provide suggestions for unknown macros imported with `use`][39953] +* [Fix ICEs in path resolution][39939] +* [Strip exception handling code on Emscripten when `panic=abort`][39193] +* [Add clearer error message using `&str + &str`][39116] + +Stabilized APIs +--------------- + +* [`Arc::into_raw`] +* [`Arc::from_raw`] +* [`Arc::ptr_eq`] +* [`Rc::into_raw`] +* [`Rc::from_raw`] +* [`Rc::ptr_eq`] +* [`Ordering::then`] +* [`Ordering::then_with`] +* [`BTreeMap::range`] +* [`BTreeMap::range_mut`] +* [`collections::Bound`] +* [`process::abort`] +* [`ptr::read_unaligned`] +* [`ptr::write_unaligned`] +* [`Result::expect_err`] +* [`Cell::swap`] +* [`Cell::replace`] +* [`Cell::into_inner`] +* [`Cell::take`] + +Libraries +--------- + +* [`BTreeMap` and `BTreeSet` can iterate over ranges][27787] +* [`Cell` can store non-`Copy` types][39793]. [RFC 1651] +* [`String` implements `FromIterator<&char>`][40028] +* `Box` [implements][40009] a number of new conversions: + `From> for String`, + `From> for Vec`, + `From> for CString`, + `From> for OsString`, + `From> for PathBuf`, + `Into> for String`, + `Into> for Vec`, + `Into> for CString`, + `Into> for OsString`, + `Into> for PathBuf`, + `Default for Box`, + `Default for Box`, + `Default for Box`, + `From<&CStr> for Box`, + `From<&OsStr> for Box`, + `From<&Path> for Box` +* [`ffi::FromBytesWithNulError` implements `Error` and `Display`][39960] +* [Specialize `PartialOrd for [A] where A: Ord`][39642] +* [Slightly optimize `slice::sort`][39538] +* [Add `ToString` trait specialization for `Cow<'a, str>` and `String`][39440] +* [`Box<[T]>` implements `From<&[T]> where T: Copy`, + `Box` implements `From<&str>`][39438] +* [`IpAddr` implements `From` for various arrays. `SocketAddr` implements + `From<(I, u16)> where I: Into`][39372] +* [`format!` estimates the needed capacity before writing a string][39356] +* [Support unprivileged symlink creation in Windows][38921] +* [`PathBuf` implements `Default`][38764] +* [Implement `PartialEq<[A]>` for `VecDeque`][38661] +* [`HashMap` resizes adaptively][38368] to guard against DOS attacks + and poor hash functions. + +Cargo +----- + +* [Add `cargo check --all`][cargo/3731] +* [Add an option to ignore SSL revocation checking][cargo/3699] +* [Add `cargo run --package`][cargo/3691] +* [Add `required_features`][cargo/3667] +* [Assume `build.rs` is a build script][cargo/3664] +* [Find workspace via `workspace_root` link in containing member][cargo/3562] + +Misc +---- + +* [Documentation is rendered with mdbook instead of the obsolete, in-tree + `rustbook`][39633] +* [The "Unstable Book" documents nightly-only features][ubook] +* [Improve the style of the sidebar in rustdoc output][40265] +* [Configure build correctly on 64-bit CPU's with the armhf ABI][40261] +* [Fix MSP430 breakage due to `i128`][40257] +* [Preliminary Solaris/SPARCv9 support][39903] +* [`rustc` is linked statically on Windows MSVC targets][39837], allowing it to + run without installing the MSVC runtime. +* [`rustdoc --test` includes file names in test names][39788] +* This release includes builds of `std` for `sparc64-unknown-linux-gnu`, + `aarch64-unknown-linux-fuchsia`, and `x86_64-unknown-linux-fuchsia`. +* [Initial support for `aarch64-unknown-freebsd`][39491] +* [Initial support for `i686-unknown-netbsd`][39426] +* [This release no longer includes the old makefile build system][39431]. Rust + is built with a custom build system, written in Rust, and with Cargo. +* [Add Debug implementations for libcollection structs][39002] +* [`TypeId` implements `PartialOrd` and `Ord`][38981] +* [`--test-threads=0` produces an error][38945] +* [`rustup` installs documentation by default][40526] +* [The Rust source includes NatVis visualizations][39843]. These can be used by + WinDbg and Visual Studio to improve the debugging experience. + +Compatibility Notes +------------------- + +* [Rust 1.17 does not correctly detect the MSVC 2017 linker][38584]. As a + workaround, either use MSVC 2015 or run vcvars.bat. +* [When coercing to an unsized type lifetimes must be equal][40319]. That is, + disallow subtyping between `T` and `U` when `T: Unsize`, e.g. coercing + `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to `'b`. Soundness + fix. +* [`format!` and `Display::to_string` panic if an underlying formatting + implementation returns an error][40117]. Previously the error was silently + ignored. It is incorrect for `write_fmt` to return an error when writing + to a string. +* [In-tree crates are verified to be unstable][39851]. Previously, some minor + crates were marked stable and could be accessed from the stable toolchain. +* [Rust git source no longer includes vendored crates][39728]. Those that need + to build with vendored crates should build from release tarballs. +* [Fix inert attributes from `proc_macro_derives`][39572] +* [During crate resolution, rustc prefers a crate in the sysroot if two crates + are otherwise identical][39518]. Unlikely to be encountered outside the Rust + build system. +* [Fixed bugs around how type inference interacts with dead-code][39485]. The + existing code generally ignores the type of dead-code unless a type-hint is + provided; this can cause surprising inference interactions particularly around + defaulting. The new code uniformly ignores the result type of dead-code. +* [Tuple-struct constructors with private fields are no longer visible][38932] +* [Lifetime parameters that do not appear in the arguments are now considered + early-bound][38897], resolving a soundness bug (#[32330]). The + `hr_lifetime_in_assoc_type` future-compatibility lint has been in effect since + April of 2016. +* [rustdoc: fix doctests with non-feature crate attributes][38161] +* [Make transmuting from fn item types to pointer-sized types a hard + error][34198] + +[27787]: https://github.com/rust-lang/rust/issues/27787 +[32330]: https://github.com/rust-lang/rust/issues/32330 +[34198]: https://github.com/rust-lang/rust/pull/34198 +[38161]: https://github.com/rust-lang/rust/pull/38161 +[38368]: https://github.com/rust-lang/rust/pull/38368 +[38584]: https://github.com/rust-lang/rust/issues/38584 +[38661]: https://github.com/rust-lang/rust/pull/38661 +[38764]: https://github.com/rust-lang/rust/pull/38764 +[38864]: https://github.com/rust-lang/rust/issues/38864 +[38897]: https://github.com/rust-lang/rust/pull/38897 +[38921]: https://github.com/rust-lang/rust/pull/38921 +[38932]: https://github.com/rust-lang/rust/pull/38932 +[38945]: https://github.com/rust-lang/rust/pull/38945 +[38981]: https://github.com/rust-lang/rust/pull/38981 +[39002]: https://github.com/rust-lang/rust/pull/39002 +[39116]: https://github.com/rust-lang/rust/pull/39116 +[39193]: https://github.com/rust-lang/rust/pull/39193 +[39265]: https://github.com/rust-lang/rust/pull/39265 +[39356]: https://github.com/rust-lang/rust/pull/39356 +[39372]: https://github.com/rust-lang/rust/pull/39372 +[39426]: https://github.com/rust-lang/rust/pull/39426 +[39431]: https://github.com/rust-lang/rust/pull/39431 +[39438]: https://github.com/rust-lang/rust/pull/39438 +[39440]: https://github.com/rust-lang/rust/pull/39440 +[39485]: https://github.com/rust-lang/rust/pull/39485 +[39491]: https://github.com/rust-lang/rust/pull/39491 +[39518]: https://github.com/rust-lang/rust/pull/39518 +[39538]: https://github.com/rust-lang/rust/pull/39538 +[39572]: https://github.com/rust-lang/rust/pull/39572 +[39633]: https://github.com/rust-lang/rust/pull/39633 +[39642]: https://github.com/rust-lang/rust/pull/39642 +[39728]: https://github.com/rust-lang/rust/pull/39728 +[39761]: https://github.com/rust-lang/rust/pull/39761 +[39788]: https://github.com/rust-lang/rust/pull/39788 +[39793]: https://github.com/rust-lang/rust/pull/39793 +[39837]: https://github.com/rust-lang/rust/pull/39837 +[39843]: https://github.com/rust-lang/rust/pull/39843 +[39851]: https://github.com/rust-lang/rust/pull/39851 +[39903]: https://github.com/rust-lang/rust/pull/39903 +[39939]: https://github.com/rust-lang/rust/pull/39939 +[39953]: https://github.com/rust-lang/rust/pull/39953 +[39960]: https://github.com/rust-lang/rust/pull/39960 +[39990]: https://github.com/rust-lang/rust/pull/39990 +[39995]: https://github.com/rust-lang/rust/pull/39995 +[40008]: https://github.com/rust-lang/rust/pull/40008 +[40009]: https://github.com/rust-lang/rust/pull/40009 +[40027]: https://github.com/rust-lang/rust/pull/40027 +[40028]: https://github.com/rust-lang/rust/pull/40028 +[40037]: https://github.com/rust-lang/rust/pull/40037 +[40117]: https://github.com/rust-lang/rust/pull/40117 +[40166]: https://github.com/rust-lang/rust/pull/40166 +[40245]: https://github.com/rust-lang/rust/pull/40245 +[40257]: https://github.com/rust-lang/rust/pull/40257 +[40261]: https://github.com/rust-lang/rust/pull/40261 +[40265]: https://github.com/rust-lang/rust/pull/40265 +[40319]: https://github.com/rust-lang/rust/pull/40319 +[40336]: https://github.com/rust-lang/rust/pull/40336 +[40526]: https://github.com/rust-lang/rust/pull/40526 +[RFC 1623]: https://github.com/rust-lang/rfcs/blob/master/text/1623-static.md +[RFC 1647]: https://github.com/rust-lang/rfcs/blob/master/text/1647-allow-self-in-where-clauses.md +[RFC 1651]: https://github.com/rust-lang/rfcs/blob/master/text/1651-movecell.md +[RFC 1682]: https://github.com/rust-lang/rfcs/blob/master/text/1682-field-init-shorthand.md +[`Arc::from_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.from_raw +[`Arc::into_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.into_raw +[`Arc::ptr_eq`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.ptr_eq +[`BTreeMap::range_mut`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range_mut +[`BTreeMap::range`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range +[`Cell::into_inner`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.into_inner +[`Cell::replace`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.replace +[`Cell::swap`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.swap +[`Cell::take`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.take +[`Ordering::then_with`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then_with +[`Ordering::then`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then +[`Rc::from_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.from_raw +[`Rc::into_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.into_raw +[`Rc::ptr_eq`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.ptr_eq +[`Result::expect_err`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.expect_err +[`collections::Bound`]: https://doc.rust-lang.org/std/collections/enum.Bound.html +[`process::abort`]: https://doc.rust-lang.org/std/process/fn.abort.html +[`ptr::read_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html +[`ptr::write_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.write_unaligned.html +[cargo/3562]: https://github.com/rust-lang/cargo/pull/3562 +[cargo/3664]: https://github.com/rust-lang/cargo/pull/3664 +[cargo/3667]: https://github.com/rust-lang/cargo/pull/3667 +[cargo/3691]: https://github.com/rust-lang/cargo/pull/3691 +[cargo/3699]: https://github.com/rust-lang/cargo/pull/3699 +[cargo/3731]: https://github.com/rust-lang/cargo/pull/3731 +[mdbook]: https://crates.io/crates/mdbook +[ubook]: https://doc.rust-lang.org/unstable-book/ + + Version 1.16.0 (2017-03-16) ===========================