Rust versions / 1.7
Rust release · Mar 3, 2016
Rust 1.7: what's new, what was stabilized
Short answerRust 1.7 was released on Mar 3, 2016: 5 compatibility notes that can affect existing code.
← Rust 1.6All versionsRust 1.8 →
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
- Soundness fixes to the interactions between associated types and
- [Several bugs in the compiler's visibility calculations were
- Defaulted type parameters were accidentally accepted in positions
- [Parsing "." as a float results in an error instead of 0][1.7p].
- [Borrows of closure parameters may not outlive the closure][1.7bc].
Use it
rustup update stable # get the newest release
rustup install 1.7 # or exactly this one
rustup override set 1.7 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.7" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
Libraries
- Stabilized APIs
Path- [
Path::strip_prefix] (renamed from relative_from) - [
path::StripPrefixError] (new error type returned from strip_prefix) Ipv4Addr- [
Ipv4Addr::is_loopback] - [
Ipv4Addr::is_private] - [
Ipv4Addr::is_link_local] - [
Ipv4Addr::is_multicast] - [
Ipv4Addr::is_broadcast] - [
Ipv4Addr::is_documentation] Ipv6Addr- [
Ipv6Addr::is_unspecified] - [
Ipv6Addr::is_loopback] - [
Ipv6Addr::is_multicast] Vec- [
Vec::as_slice] - [
Vec::as_mut_slice] String- [
String::as_str] - [
String::as_mut_str] - Slices
<[T]>::[clone_from_slice], which now requires the two slices to be the same length<[T]>::[sort_by_key]- checked, saturated, and overflowing operations
- [
i32::checked_rem], [i32::checked_neg], [i32::checked_shl], [i32::checked_shr] - [
i32::saturating_mul] - [
i32::overflowing_add], [i32::overflowing_sub], [i32::overflowing_mul], [i32::overflowing_div] - [
i32::overflowing_rem], [i32::overflowing_neg], [i32::overflowing_shl], [i32::overflowing_shr] - [
u32::checked_rem], [u32::checked_neg], [u32::checked_shl], [u32::checked_shl] - [
u32::saturating_mul] - [
u32::overflowing_add], [u32::overflowing_sub], [u32::overflowing_mul], [u32::overflowing_div] - [
u32::overflowing_rem], [u32::overflowing_neg], [u32::overflowing_shl], [u32::overflowing_shr] - and checked, saturated, and overflowing operations for other primitive types
- FFI
- [
ffi::IntoStringError] - [
CString::into_string] - [
CString::into_bytes] - [
CString::into_bytes_with_nul] From<CString> for Vec<u8>IntoStringError- [
IntoStringError::into_cstring] - [
IntoStringError::utf8_error] Error for IntoStringError- Hashing
- [
std::hash::BuildHasher] - [
BuildHasher::Hasher] - [
BuildHasher::build_hasher] - [
std::hash::BuildHasherDefault] - [
HashMap::with_hasher] - [
HashMap::with_capacity_and_hasher] - [
HashSet::with_hasher] - [
HashSet::with_capacity_and_hasher] - [
std::collections::hash_map::RandomState] - [
RandomState::new] - [Validating UTF-8 is faster by a factor of between 7 and 14x for ASCII input][1.7utf8]. This means that creating
Strings andstrs from bytes is faster. - [The performance of
LineWriter(and thusio::stdout) was improved by usingmemchrto search for newlines][1.7m]. - [
f32::to_degreesandf32::to_radiansare stable][1.7f]. Thef64variants were stabilized previously. - [
BTreeMapwas rewritten to use less memory and improve the performance of insertion and iteration, the latter by as much as 5x][1.7bm]. - [
BTreeSetand its iterators,Iter,IntoIter, andRangeare covariant over their contained type][1.7bt]. - [
LinkedListand its iterators,IterandIntoIterare covariant over their contained type][1.7ll]. - [
str::replacenow accepts aPattern][1.7rp], like other string searching methods. - [
Anyis implemented for unsized types][1.7a]. - [
Hashis implemented forDuration][1.7h].
Misc
- [When running tests with
--test, rustdoc will pass--cfgarguments to the compiler][1.7dt]. - [The compiler is built with RPATH information by default][1.7rpa]. This means that it will be possible to run
rustcwhen installed in unusual configurations without configuring the dynamic linker search path explicitly. - [
rustcpasses--enable-new-dtagsto GNU ld][1.7dta]. This makes any RPATH entries (emitted with-C rpath) *not* take precedence overLD_LIBRARY_PATH.
Cargo
- [
cargo rustcaccepts a--profileflag that runsrustcunder any of the compilation profiles, 'dev', 'bench', or 'test'][1.7cp]. - [The
rerun-if-changedbuild script directive no longer causes the build script to incorrectly run twice in certain scenarios][1.7rr].
Compatibility Notes
- Soundness fixes to the interactions between associated types and lifetimes, specified in RFC 1214, now generate errors for code that violates the new rules. This is a significant change that is known to break existing code, so it has emitted warnings for the new error cases since 1.4 to give crate authors time to adapt. The details of what is changing are subtle; read the RFC for more.
- Several bugs in the compiler's visibility calculations were fixed. Since this was found to break significant amounts of code, the new errors will be emitted as warnings for several release cycles, under the
private_in_publiclint. - Defaulted type parameters were accidentally accepted in positions that were not intended. In this release, defaulted type parameters appearing outside of type definitions will generate a warning, which will become an error in future releases.
- Parsing "." as a float results in an error instead of 0. That is,
".".parse::<f32>()returnsErr, notOk(0.0). - Borrows of closure parameters may not outlive the closure.
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.8Released Apr 14, 2016.Read it next →Also worth your time
Did this answer your question?