Rust 1.7.0
Released on March 3, 2016
What's Changed
- 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<[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] Fromfor Vec 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
- [The performance of
LineWriter(and thusio::stdout) was - [
f32::to_degreesandf32::to_radiansare stable][1.7f]. The - [
BTreeMapwas rewritten to use less memory and improve the performance - [
BTreeSetand its iterators,Iter,IntoIter, andRangeare - [
LinkedListand its iterators,IterandIntoIterare covariant - [
str::replacenow accepts aPattern][1.7rp], like other string - [
Anyis implemented for unsized types][1.7a]. - [
Hashis implemented forDuration][1.7h].
- [
cargo rustcaccepts a--profileflag that runsrustcunder - [The
rerun-if-changedbuild script directive no longer causes the
- 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].
- [When running tests with
--test, rustdoc will pass--cfg - [The compiler is built with RPATH information by default][1.7rpa].
- [
rustcpasses--enable-new-dtagsto GNU ld][1.7dta]. This makes
Full Changelog
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
* 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 and strs
from bytes is faster.
* [The performance of LineWriter (and thus io::stdout) was
improved by using memchr to search for newlines][1.7m].
* [f32::to_degrees and f32::to_radians are stable][1.7f]. The
f64 variants were stabilized previously.
* [BTreeMap was rewritten to use less memory and improve the performance
of insertion and iteration, the latter by as much as 5x][1.7bm].
* [BTreeSet and its iterators, Iter, IntoIter, and Range are
covariant over their contained type][1.7bt].
* [LinkedList and its iterators, Iter and IntoIter are covariant
over their contained type][1.7ll].
* [str::replace now accepts a Pattern][1.7rp], like other string
searching methods.
* [Any is implemented for unsized types][1.7a].
* [Hash is implemented for Duration][1.7h].
Misc
----
* [When running tests with --test, rustdoc will pass --cfg
arguments 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 rustc when installed in
unusual configurations without configuring the dynamic linker search
path explicitly.
* [rustc passes --enable-new-dtags to GNU ld][1.7dta]. This makes
any RPATH entries (emitted with -C rpath) not take precedence
over LD_LIBRARY_PATH.
Cargo
-----
* [cargo rustc accepts a --profile flag that runs rustc under
any of the compilation profiles, 'dev', 'bench', or 'test'][1.7cp].
* [The rerun-if-changed build 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][1.7sf] 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][1.7v]. 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_public lint.
* 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][1.7d], which will become an error in future releases.
* [Parsing "." as a float results in an error instead of 0][1.7p].
That is, ".".parse:: returns Err, not Ok(0.0).
* [Borrows of closure parameters may not outlive the closure][1.7bc].
[1.7a]: https://github.com/rust-lang/rust/pull/30928
[1.7bc]: https://github.com/rust-lang/rust/pull/30341
[1.7bm]: https://github.com/rust-lang/rust/pull/30426
[1.7bt]: https://github.com/rust-lang/rust/pull/30998
[1.7cp]: https://github.com/rust-lang/cargo/pull/2224
[1.7d]: https://github.com/rust-lang/rust/pull/30724
[1.7dt]: https://github.com/rust-lang/rust/pull/30372
[1.7dta]: https://github.com/rust-lang/rust/pull/30394
[1.7f]: https://github.com/rust-lang/rust/pull/30672
[1.7h]: https://github.com/rust-lang/rust/pull/30818
[1.7ll]: https://github.com/rust-lang/rust/pull/30663
[1.7m]: https://github.com/rust-lang/rust/pull/30381
[1.7p]: https://github.com/rust-lang/rust/pull/30681
[1.7rp]: https://github.com/rust-lang/rust/pull/29498
[1.7rpa]: https://github.com/rust-lang/rust/pull/30353
[1.7rr]: https://github.com/rust-lang/cargo/pull/2279
[1.7sf]: https://github.com/rust-lang/rust/pull/30389
[1.7utf8]: https://github.com/rust-lang/rust/pull/30740
[1.7v]: https://github.com/rust-lang/rust/pull/29973
[RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
[BuildHasher::Hasher]: http://doc.rust-lang.org/nightly/std/hash/trait.Hasher.html
[BuildHasher::build_hasher]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html#tymethod.build_hasher
[CString::into_bytes_with_nul]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes_with_nul
[CString::into_bytes]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes
[CString::into_string]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_string
[HashMap::with_capacity_and_hasher]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_capacity_and_hasher
[HashMap::with_hasher]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_hasher
[HashSet::with_capacity_and_hasher]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_capacity_and_hasher
[HashSet::with_hasher]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_hasher
[IntoStringError::into_cstring]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.into_cstring
[IntoStringError::utf8_error]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.utf8_error
[Ipv4Addr::is_broadcast]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_broadcast
[Ipv4Addr::is_documentation]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_documentation
[Ipv4Addr::is_link_local]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_link_local
[Ipv4Addr::is_loopback]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_loopback
[Ipv4Addr::is_multicast]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_multicast
[Ipv4Addr::is_private]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_private
[Ipv6Addr::is_loopback]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_loopback
[Ipv6Addr::is_multicast]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_multicast
[Ipv6Addr::is_unspecified]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_unspecified
[Path::strip_prefix]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.strip_prefix
[RandomState::new]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html#method.new
[String::as_mut_str]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_mut_str
[String::as_str]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_str
[Vec::as_mut_slice]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_mut_slice
[Vec::as_slice]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_slice
[clone_from_slice]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
[ffi::IntoStringError]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html
[i32::checked_neg]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_neg
[i32::checked_rem]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_rem
[i32::checked_shl]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shl
[i32::checked_shr]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shr
[i32::overflowing_add]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_add
[i32::overflowing_div]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_div
[i32::overflowing_mul]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_mul
[i32::overflowing_neg]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_neg
[i32::overflowing_rem]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_rem
[i32::overflowing_shl]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shl
[i32::overflowing_shr]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shr
[i32::overflowing_sub]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_sub
[i32::saturating_mul]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.saturating_mul
[path::StripPrefixError]: http://doc.rust-lang.org/nightly/std/path/struct.StripPrefixError.html
[sort_by_key]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key
[std::collections::hash_map::RandomState]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html
[std::hash::BuildHasherDefault]: http://doc.rust-lang.org/nightly/std/hash/struct.BuildHasherDefault.html
[std::hash::BuildHasher]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html
[u32::checked_neg]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
[u32::checked_rem]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_rem
[u32::checked_neg]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
[u32::checked_shl]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_shl
[u32::overflowing_add]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_add
[u32::overflowing_div]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_div
[u32::overflowing_mul]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_mul
[u32::overflowing_neg]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_neg
[u32::overflowing_rem]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_rem
[u32::overflowing_shl]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shl
[u32::overflowing_shr]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shr
[u32::overflowing_sub]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_sub
[u32::saturating_mul]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.saturating_mul