Rust 1.16.0
Released on March 16, 2017
What's Changed
- [The compiler's
dead_codelint now accounts for type aliases][38051]. - [Uninhabitable enums (those without any variants) no longer permit wildcard
- [Clean up semantics of
selfin an import list][38313] - [
Selfmay appear inimplheaders][38920] - [
Selfmay appear in struct expressions][39282]
- [
rustcnow supports--emit=metadata, which causes rustc to emit - [Levenshtein based typo suggestions now work in most places, while
- [Fix
transmute::whereTrequires a bigger alignment than - [rustc: use -Xlinker when specifying an rpath with ',' in it][38798]
- [
rustcno longer attempts to provide "consider using an explicit
- [
VecDeque::truncate] - [
VecDeque::resize] - [
String::insert_str] - [
Duration::checked_add] - [
Duration::checked_sub] - [
Duration::checked_div] - [
Duration::checked_mul] - [
str::replacen] - [
str::repeat] - [
SocketAddr::is_ipv4] - [
SocketAddr::is_ipv6] - [
IpAddr::is_ipv4] - [
IpAddr::is_ipv6] - [
Vec::dedup_by] - [
Vec::dedup_by_key] - [
Result::unwrap_or_default] - [
<*const T>::wrapping_offset] - [
<*mut T>::wrapping_offset] CommandExt::creation_flags- [
File::set_permissions] - [
String::split_off] - [
[T]::binary_searchand[T]::binary_search_by_keynow take - [All public types in std implement
Debug][38006] - [
IpAddrimplementsFromandFrom][38327] - [
Ipv6AddrimplementsFrom<[u16; 8]>][38131] - [Ctrl-Z returns from
Stdin.read()when reading from the console on - [std: Fix partial writes in
LineWriter][38062] - [std: Clamp max read/write sizes on Unix][38622]
- [Use more specific panic message for
&strslicing errors][38066] - [
TcpListener::set_only_v6is deprecated][38304]. This - [
writeln!, likeprintln!, now accepts a form with no string - [Implement
iter::Sumanditer::ProductforResult][38580] - [Reduce the size of static data in
std_unicode::tables][38781] - [
char::EscapeDebug,EscapeDefault,EscapeUnicode, - [
DurationimplementsSum][38712] - [
StringimplementsToSocketAddrs][39048]
- [The
cargo checkcommand does a type check of a project without - [crates.io will display CI badges from Travis and AppVeyor, if
- [crates.io will display categories listed in Cargo.toml][cargo/3301]
- [Compilation profiles accept integer values for
debug, in addition - [Implement
cargo --version --verbose][cargo/3604] - [All builds now output 'dep-info' build dependencies compatible with
- [Build all workspace members with
build --all][cargo/3511] - [Document all workspace members with
doc --all][cargo/3515] - [Path deps outside workspace are not members][cargo/3443]
- [Uninhabitable enums (those without any variants) no longer permit wildcard
- In this release, references to uninhabited types can not be
- [The compiler's
dead_codelint now accounts for type aliases][38051]. - [Ctrl-Z returns from
Stdin.read()when reading from the console on - [Clean up semantics of
selfin an import list][38313] - Reimplemented lifetime elision. This change was almost entirely compatible
- [
rustdochas a--sysrootargument that, likerustc, specifies - [The
armv7-linux-androideabitarget no longer enables NEON - [The stock standard library can be compiled for Redox OS][38401]
- [Rust has initial SPARC support][38726]. Tier 3. No builds
- [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No
- [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379]
Full Changelog
Language
--------
* [The compiler's dead_code lint now accounts for type aliases][38051].
* [Uninhabitable enums (those without any variants) no longer permit wildcard
match patterns][38069]
* [Clean up semantics of self in an import list][38313]
* [Self may appear in impl headers][38920]
* [Self may appear in struct expressions][39282]
Compiler
--------
* [rustc now supports --emit=metadata, which causes rustc to emit
a .rmeta file containing only crate metadata][38571]. This can be
used by tools like the Rust Language Service to perform
metadata-only builds.
* [Levenshtein based typo suggestions now work in most places, while
previously they worked only for fields and sometimes for local
variables][38927]. Together with the overhaul of "no
resolution"/"unexpected resolution" errors (#[38154]) they result in
large and systematic improvement in resolution diagnostics.
* [Fix transmute:: where T requires a bigger alignment than
U][38670]
* [rustc: use -Xlinker when specifying an rpath with ',' in it][38798]
* [rustc no longer attempts to provide "consider using an explicit
lifetime" suggestions][37057]. They were inaccurate.
Stabilized APIs
---------------
* [VecDeque::truncate]
* [VecDeque::resize]
* [String::insert_str]
* [Duration::checked_add]
* [Duration::checked_sub]
* [Duration::checked_div]
* [Duration::checked_mul]
* [str::replacen]
* [str::repeat]
* [SocketAddr::is_ipv4]
* [SocketAddr::is_ipv6]
* [IpAddr::is_ipv4]
* [IpAddr::is_ipv6]
* [Vec::dedup_by]
* [Vec::dedup_by_key]
* [Result::unwrap_or_default]
<const T>::wrapping_offset]
[<mut T>::wrapping_offset]
* CommandExt::creation_flags
* [File::set_permissions]
* [String::split_off]
Libraries
---------
* [[T]::binary_search and [T]::binary_search_by_key now take
their argument by Borrow parameter][37761]
* [All public types in std implement Debug][38006]
* [IpAddr implements From and From][38327]
* [Ipv6Addr implements From<[u16; 8]>][38131]
* [Ctrl-Z returns from Stdin.read() when reading from the console on
Windows][38274]
* [std: Fix partial writes in LineWriter][38062]
* [std: Clamp max read/write sizes on Unix][38622]
* [Use more specific panic message for &str slicing errors][38066]
* [TcpListener::set_only_v6 is deprecated][38304]. This
functionality cannot be achieved in std currently.
* [writeln!, like println!, now accepts a form with no string
or formatting arguments, to just print a newline][38469]
* [Implement iter::Sum and iter::Product for Result][38580]
* [Reduce the size of static data in std_unicode::tables][38781]
* [char::EscapeDebug, EscapeDefault, EscapeUnicode,
CaseMappingIter, ToLowercase, ToUppercase, implement
Display][38909]
* [Duration implements Sum][38712]
* [String implements ToSocketAddrs][39048]
Cargo
-----
* [The cargo check command does a type check of a project without
building it][cargo/3296]
* [crates.io will display CI badges from Travis and AppVeyor, if
specified in Cargo.toml][cargo/3546]
* [crates.io will display categories listed in Cargo.toml][cargo/3301]
* [Compilation profiles accept integer values for debug, in addition
to true and false. These are passed to rustc as the value to
-C debuginfo][cargo/3534]
* [Implement cargo --version --verbose][cargo/3604]
* [All builds now output 'dep-info' build dependencies compatible with
make and ninja][cargo/3557]
* [Build all workspace members with build --all][cargo/3511]
* [Document all workspace members with doc --all][cargo/3515]
* [Path deps outside workspace are not members][cargo/3443]
Misc
----
* [rustdoc has a --sysroot argument that, like rustc, specifies
the path to the Rust implementation][38589]
* [The armv7-linux-androideabi target no longer enables NEON
extensions, per Google's ABI guide][38413]
* [The stock standard library can be compiled for Redox OS][38401]
* [Rust has initial SPARC support][38726]. Tier 3. No builds
available.
* [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No
builds available.
* [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379]
Compatibility Notes
-------------------
* [Uninhabitable enums (those without any variants) no longer permit wildcard
match patterns][38069]
* In this release, references to uninhabited types can not be
pattern-matched. This was accidentally allowed in 1.15.
* [The compiler's dead_code lint now accounts for type aliases][38051].
* [Ctrl-Z returns from Stdin.read() when reading from the console on
Windows][38274]
* [Clean up semantics of self in an import list][38313]
* Reimplemented lifetime elision. This change was almost entirely compatible
with existing code, but it did close a number of small bugs and loopholes,
as well as being more accepting in some other [cases][41105].
[37057]: https://github.com/rust-lang/rust/pull/37057
[37761]: https://github.com/rust-lang/rust/pull/37761
[38006]: https://github.com/rust-lang/rust/pull/38006
[38051]: https://github.com/rust-lang/rust/pull/38051
[38062]: https://github.com/rust-lang/rust/pull/38062
[38622]: https://github.com/rust-lang/rust/pull/38622
[38066]: https://github.com/rust-lang/rust/pull/38066
[38069]: https://github.com/rust-lang/rust/pull/38069
[38131]: https://github.com/rust-lang/rust/pull/38131
[38154]: https://github.com/rust-lang/rust/pull/38154
[38274]: https://github.com/rust-lang/rust/pull/38274
[38304]: https://github.com/rust-lang/rust/pull/38304
[38313]: https://github.com/rust-lang/rust/pull/38313
[38327]: https://github.com/rust-lang/rust/pull/38327
[38401]: https://github.com/rust-lang/rust/pull/38401
[38413]: https://github.com/rust-lang/rust/pull/38413
[38469]: https://github.com/rust-lang/rust/pull/38469
[38559]: https://github.com/rust-lang/rust/pull/38559
[38571]: https://github.com/rust-lang/rust/pull/38571
[38580]: https://github.com/rust-lang/rust/pull/38580
[38589]: https://github.com/rust-lang/rust/pull/38589
[38670]: https://github.com/rust-lang/rust/pull/38670
[38712]: https://github.com/rust-lang/rust/pull/38712
[38726]: https://github.com/rust-lang/rust/pull/38726
[38781]: https://github.com/rust-lang/rust/pull/38781
[38798]: https://github.com/rust-lang/rust/pull/38798
[38909]: https://github.com/rust-lang/rust/pull/38909
[38920]: https://github.com/rust-lang/rust/pull/38920
[38927]: https://github.com/rust-lang/rust/pull/38927
[39048]: https://github.com/rust-lang/rust/pull/39048
[39282]: https://github.com/rust-lang/rust/pull/39282
[39379]: https://github.com/rust-lang/rust/pull/39379
[41105]: https://github.com/rust-lang/rust/issues/41105
[<*const T>::wrapping_offset]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
[<*mut T>::wrapping_offset]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset-1
[Duration::checked_add]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_add
[Duration::checked_div]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_div
[Duration::checked_mul]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_mul
[Duration::checked_sub]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_sub
[File::set_permissions]: https://doc.rust-lang.org/std/fs/struct.File.html#method.set_permissions
[IpAddr::is_ipv4]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv4
[IpAddr::is_ipv6]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv6
[Result::unwrap_or_default]: https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_default
[SocketAddr::is_ipv4]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv4
[SocketAddr::is_ipv6]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv6
[String::insert_str]: https://doc.rust-lang.org/std/string/struct.String.html#method.insert_str
[String::split_off]: https://doc.rust-lang.org/std/string/struct.String.html#method.split_off
[Vec::dedup_by_key]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by_key
[Vec::dedup_by]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by
[VecDeque::resize]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.resize
[VecDeque::truncate]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.truncate
[str::repeat]: https://doc.rust-lang.org/std/primitive.str.html#method.repeat
[str::replacen]: https://doc.rust-lang.org/std/primitive.str.html#method.replacen
[cargo/3296]: https://github.com/rust-lang/cargo/pull/3296
[cargo/3301]: https://github.com/rust-lang/cargo/pull/3301
[cargo/3443]: https://github.com/rust-lang/cargo/pull/3443
[cargo/3511]: https://github.com/rust-lang/cargo/pull/3511
[cargo/3515]: https://github.com/rust-lang/cargo/pull/3515
[cargo/3534]: https://github.com/rust-lang/cargo/pull/3534
[cargo/3546]: https://github.com/rust-lang/cargo/pull/3546
[cargo/3557]: https://github.com/rust-lang/cargo/pull/3557
[cargo/3604]: https://github.com/rust-lang/cargo/pull/3604