Version 1.17.0 (2017-04-27)
Language
- The lifetime of statics and consts defaults to
'static. RFC 1623 - Fields of structs may be initialized without duplicating the field/variable names. RFC 1682
Selfmay be included in thewhereclause ofimpls. RFC 1647- When coercing to an unsized type lifetimes must be equal. That is,
there is no subtyping between
TandUwhenT: Unsize<U>. For example, coercing&mut [&'a X; N]to&mut [&'b X]requires'abe equal to'b. Soundness fix. - Values passed to the indexing operator,
[], automatically coerce - Static variables may contain references to other statics
Compiler
- Exit quickly on only
--emit dep-info - Make
-C relocation-modelmore correctly determine whether the linker creates a position-independent executable - Add
-C overflow-checksto directly control whether integer overflow panics - The rustc type checker now checks items on demand instead of in a single
in-order pass. This is mostly an internal refactoring in support of
future work, including incremental type checking, but also resolves RFC
1647, allowing
Selfto appear inimplwhereclauses. - Optimize vtable loads
- Turn off vectorization for Emscripten targets
- Provide suggestions for unknown macros imported with
use - Fix ICEs in path resolution
- Strip exception handling code on Emscripten when
panic=abort - Add clearer error message using
&str + &str
Stabilized APIs
Arc::into_rawArc::from_rawArc::ptr_eqRc::into_rawRc::from_rawRc::ptr_eqOrdering::thenOrdering::then_withBTreeMap::rangeBTreeMap::range_mutcollections::Boundprocess::abortptr::read_unalignedptr::write_unalignedResult::expect_errCell::swapCell::replaceCell::into_innerCell::take
Libraries
BTreeMapandBTreeSetcan iterate over rangesCellcan store non-Copytypes. RFC 1651StringimplementsFromIterator<&char>Boximplements a number of new conversions:From<Box<str>> for String,From<Box<[T]>> for Vec<T>,From<Box<CStr>> for CString,From<Box<OsStr>> for OsString,From<Box<Path>> for PathBuf,Into<Box<str>> for String,Into<Box<[T]>> for Vec<T>,Into<Box<CStr>> for CString,Into<Box<OsStr>> for OsString,Into<Box<Path>> for PathBuf,Default for Box<str>,Default for Box<CStr>,Default for Box<OsStr>,From<&CStr> for Box<CStr>,From<&OsStr> for Box<OsStr>,From<&Path> for Box<Path>ffi::FromBytesWithNulErrorimplementsErrorandDisplay- Specialize
PartialOrd<A> for [A] where A: Ord - Slightly optimize
slice::sort - Add
ToStringtrait specialization forCow<'a, str>andString Box<[T]>implementsFrom<&[T]> where T: Copy,Box<str>implementsFrom<&str>IpAddrimplementsFromfor various arrays.SocketAddrimplementsFrom<(I, u16)> where I: Into<IpAddr>format!estimates the needed capacity before writing a string- Support unprivileged symlink creation in Windows
PathBufimplementsDefault- Implement
PartialEq<[A]>forVecDeque<A> HashMapresizes adaptively to guard against DOS attacks and poor hash functions.
Cargo
- Add
cargo check --all - Add an option to ignore SSL revocation checking
- Add
cargo run --package - Add
required_features - Assume
build.rsis a build script - Find workspace via
workspace_rootlink in containing member
Misc
- Documentation is rendered with mdbook instead of the obsolete, in-tree
rustbook - The "Unstable Book" documents nightly-only features
- Improve the style of the sidebar in rustdoc output
- Configure build correctly on 64-bit CPU's with the armhf ABI
- Fix MSP430 breakage due to
i128 - Preliminary Solaris/SPARCv9 support
rustcis linked statically on Windows MSVC targets, allowing it to run without installing the MSVC runtime.rustdoc --testincludes file names in test names- This release includes builds of
stdforsparc64-unknown-linux-gnu,aarch64-unknown-linux-fuchsia, andx86_64-unknown-linux-fuchsia. - Initial support for
aarch64-unknown-freebsd - Initial support for
i686-unknown-netbsd - This release no longer includes the old makefile build system. Rust is built with a custom build system, written in Rust, and with Cargo.
- Add Debug implementations for libcollection structs
TypeIdimplementsPartialOrdandOrd--test-threads=0produces an errorrustupinstalls documentation by default- The Rust source includes NatVis visualizations. 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. As a workaround, either use MSVC 2015 or run vcvars.bat.
- When coercing to an unsized type lifetimes must be equal. That is,
disallow subtyping between
TandUwhenT: Unsize<U>, e.g. coercing&mut [&'a X; N]to&mut [&'b X]requires'abe equal to'b. Soundness fix. format!andDisplay::to_stringpanic if an underlying formatting implementation returns an error. Previously the error was silently ignored. It is incorrect forwrite_fmtto return an error when writing to a string.- In-tree crates are verified to be unstable. Previously, some minor crates were marked stable and could be accessed from the stable toolchain.
- Rust git source no longer includes vendored crates. Those that need to build with vendored crates should build from release tarballs.
- Fix inert attributes from
proc_macro_derives - During crate resolution, rustc prefers a crate in the sysroot if two crates are otherwise identical. Unlikely to be encountered outside the Rust build system.
- Fixed bugs around how type inference interacts with dead-code. 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
- Lifetime parameters that do not appear in the arguments are now considered
early-bound, resolving a soundness bug (#32330). The
hr_lifetime_in_assoc_typefuture-compatibility lint has been in effect since April of 2016. - rustdoc: fix doctests with non-feature crate attributes
- Make transmuting from fn item types to pointer-sized types a hard error