Rust 1.20.0
Released on August 31, 2017
What's Changed
- [Associated constants are now stabilised.][42809]
- [A lot of macro bugs are now fixed.][42913]
- [Struct fields are now properly coerced to the expected field type.][42807]
- [Enabled wasm LLVM backend][42571] WASM can now be built with the
- [Changed some of the error messages to be more helpful.][42033]
- [Add support for RELRO(RELocation Read-Only) for platforms that support
- [rustc now reports the total number of errors on compilation failure][43015]
- [Expansion in rustc has been sped up 29x.][42533]
- [added
msp430-none-elftarget.][43099] - [rustc will now suggest one-argument enum variant to fix type mismatch when
- [Fixes backtraces on Redox][43228]
- [rustc now identifies different versions of same crate when absolute paths of
- [Relaxed Debug constraints on
{HashMap,BTreeMap}::{Keys,Values}.][42854] - [Impl
PartialEq,Eq,PartialOrd,Ord,Debug,Hashfor unsized - [Impl
fmt::{Display, Debug}forRef,RefMut,MutexGuard, - [Impl
CloneforDefaultHasher.][42799] - [Impl
SyncforSyncSender.][42397] - [Impl
FromStrforchar][42271] - [Fixed how
{f32, f64}::{is_sign_negative, is_sign_positive}handles - [allow messages in the
unimplemented!()macro.][42155] - [
pub(restricted)is now supported in thethread_local!macro.][43185] - [Upgrade to Unicode 10.0.0][42999]
- [Reimplemented
{f32, f64}::{min, max}in Rust instead of using CMath.][42430] - [Skip the main thread's manual stack guard on Linux][43072]
- [Iterator::nth for
ops::{Range, RangeFrom}is now done in O(1) time][43077] - [
#[repr(align(N))]attribute max number is now 2^31 - 1.][43097] This was - [
{OsStr, Path}::Displaynow avoids allocations where possible][42613] - [
CStr::into_c_string] - [
CString::as_c_str] - [
CString::into_boxed_c_str] - [
Chain::get_mut] - [
Chain::get_ref] - [
Chain::into_inner] - [
Option::get_or_insert_with] - [
Option::get_or_insert] - [
OsStr::into_os_string] - [
OsString::into_boxed_os_str] - [
Take::get_mut] - [
Take::get_ref] - [
Utf8Error::error_len] - [
char::EscapeDebug] - [
char::escape_debug] - [
compile_error!] - [
f32::from_bits] - [
f32::to_bits] - [
f64::from_bits] - [
f64::to_bits] - [
mem::ManuallyDrop] - [
slice::sort_unstable_by_key] - [
slice::sort_unstable_by] - [
slice::sort_unstable] - [
str::from_boxed_utf8_unchecked] - [
str::as_bytes_mut] - [
str::as_bytes_mut] - [
str::from_utf8_mut] - [
str::from_utf8_unchecked_mut] - [
str::get_mut] - [
str::get_unchecked_mut] - [
str::get_unchecked] - [
str::get] - [
str::into_boxed_bytes]
- [Cargo API token location moved from
~/.cargo/configto - [Cargo will now build
main.rsbinaries that are in sub-directories of - [You can now specify version of a binary when installed through
- [Added
--no-fail-fastflag to cargo to run all benchmarks regardless of - [Changed the convention around which file is the crate root.][cargo/4259]
- [Functions with
'staticin their return types will now not be as usable as - [The reimplementation of
{f32, f64}::is_sign_{negative, positive}now
Full Changelog
Language
--------
- [Associated constants are now stabilised.][42809]
- [A lot of macro bugs are now fixed.][42913]
Compiler
--------
- [Struct fields are now properly coerced to the expected field type.][42807]
- [Enabled wasm LLVM backend][42571] WASM can now be built with the
wasm32-experimental-emscripten target.
- [Changed some of the error messages to be more helpful.][42033]
- [Add support for RELRO(RELocation Read-Only) for platforms that support
it.][43170]
- [rustc now reports the total number of errors on compilation failure][43015]
previously this was only the number of errors in the pass that failed.
- [Expansion in rustc has been sped up 29x.][42533]
- [added msp430-none-elf target.][43099]
- [rustc will now suggest one-argument enum variant to fix type mismatch when
applicable][43178]
- [Fixes backtraces on Redox][43228]
- [rustc now identifies different versions of same crate when absolute paths of
different types match in an error message.][42826]
Libraries
---------
- [Relaxed Debug constraints on {HashMap,BTreeMap}::{Keys,Values}.][42854]
- [Impl PartialEq, Eq, PartialOrd, Ord, Debug, Hash for unsized
tuples.][43011]
- [Impl fmt::{Display, Debug} for Ref, RefMut, MutexGuard,
RwLockReadGuard, RwLockWriteGuard][42822]
- [Impl Clone for DefaultHasher.][42799]
- [Impl Sync for SyncSender.][42397]
- [Impl FromStr for char][42271]
- [Fixed how {f32, f64}::{is_sign_negative, is_sign_positive} handles
NaN.][42431]
- [allow messages in the unimplemented!() macro.][42155]
ie. unimplemented!("Waiting for 1.21 to be stable")
- [pub(restricted) is now supported in the thread_local! macro.][43185]
- [Upgrade to Unicode 10.0.0][42999]
- [Reimplemented {f32, f64}::{min, max} in Rust instead of using CMath.][42430]
- [Skip the main thread's manual stack guard on Linux][43072]
- [Iterator::nth for ops::{Range, RangeFrom} is now done in O(1) time][43077]
- [#[repr(align(N))] attribute max number is now 2^31 - 1.][43097] This was
previously 2^15.
- [{OsStr, Path}::Display now avoids allocations where possible][42613]
Stabilized APIs
---------------
- [CStr::into_c_string]
- [CString::as_c_str]
- [CString::into_boxed_c_str]
- [Chain::get_mut]
- [Chain::get_ref]
- [Chain::into_inner]
- [Option::get_or_insert_with]
- [Option::get_or_insert]
- [OsStr::into_os_string]
- [OsString::into_boxed_os_str]
- [Take::get_mut]
- [Take::get_ref]
- [Utf8Error::error_len]
- [char::EscapeDebug]
- [char::escape_debug]
- [compile_error!]
- [f32::from_bits]
- [f32::to_bits]
- [f64::from_bits]
- [f64::to_bits]
- [mem::ManuallyDrop]
- [slice::sort_unstable_by_key]
- [slice::sort_unstable_by]
- [slice::sort_unstable]
- [str::from_boxed_utf8_unchecked]
- [str::as_bytes_mut]
- [str::as_bytes_mut]
- [str::from_utf8_mut]
- [str::from_utf8_unchecked_mut]
- [str::get_mut]
- [str::get_unchecked_mut]
- [str::get_unchecked]
- [str::get]
- [str::into_boxed_bytes]
Cargo
-----
- [Cargo API token location moved from ~/.cargo/config to
~/.cargo/credentials.][cargo/3978]
- [Cargo will now build main.rs binaries that are in sub-directories of
src/bin.][cargo/4214] ie. Having src/bin/server/main.rs and
src/bin/client/main.rs generates target/debug/server and target/debug/client
- [You can now specify version of a binary when installed through
cargo install using --vers.][cargo/4229]
- [Added --no-fail-fast flag to cargo to run all benchmarks regardless of
failure.][cargo/4248]
- [Changed the convention around which file is the crate root.][cargo/4259]
Compatibility Notes
-------------------
- [Functions with 'static in their return types will now not be as usable as
if they were using lifetime parameters instead.][42417]
- [The reimplementation of {f32, f64}::is_sign_{negative, positive} now
takes the sign of NaN into account where previously didn't.][42430]
[42033]: https://github.com/rust-lang/rust/pull/42033
[42155]: https://github.com/rust-lang/rust/pull/42155
[42271]: https://github.com/rust-lang/rust/pull/42271
[42397]: https://github.com/rust-lang/rust/pull/42397
[42417]: https://github.com/rust-lang/rust/pull/42417
[42430]: https://github.com/rust-lang/rust/pull/42430
[42431]: https://github.com/rust-lang/rust/pull/42431
[42533]: https://github.com/rust-lang/rust/pull/42533
[42571]: https://github.com/rust-lang/rust/pull/42571
[42613]: https://github.com/rust-lang/rust/pull/42613
[42799]: https://github.com/rust-lang/rust/pull/42799
[42807]: https://github.com/rust-lang/rust/pull/42807
[42809]: https://github.com/rust-lang/rust/pull/42809
[42822]: https://github.com/rust-lang/rust/pull/42822
[42826]: https://github.com/rust-lang/rust/pull/42826
[42854]: https://github.com/rust-lang/rust/pull/42854
[42913]: https://github.com/rust-lang/rust/pull/42913
[42999]: https://github.com/rust-lang/rust/pull/42999
[43011]: https://github.com/rust-lang/rust/pull/43011
[43015]: https://github.com/rust-lang/rust/pull/43015
[43072]: https://github.com/rust-lang/rust/pull/43072
[43077]: https://github.com/rust-lang/rust/pull/43077
[43097]: https://github.com/rust-lang/rust/pull/43097
[43099]: https://github.com/rust-lang/rust/pull/43099
[43170]: https://github.com/rust-lang/rust/pull/43170
[43178]: https://github.com/rust-lang/rust/pull/43178
[43185]: https://github.com/rust-lang/rust/pull/43185
[43228]: https://github.com/rust-lang/rust/pull/43228
[cargo/3978]: https://github.com/rust-lang/cargo/pull/3978
[cargo/4214]: https://github.com/rust-lang/cargo/pull/4214
[cargo/4229]: https://github.com/rust-lang/cargo/pull/4229
[cargo/4248]: https://github.com/rust-lang/cargo/pull/4248
[cargo/4259]: https://github.com/rust-lang/cargo/pull/4259
[CStr::into_c_string]: https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.into_c_string
[CString::as_c_str]: https://doc.rust-lang.org/std/ffi/struct.CString.html#method.as_c_str
[CString::into_boxed_c_str]: https://doc.rust-lang.org/std/ffi/struct.CString.html#method.into_boxed_c_str
[Chain::get_mut]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.get_mut
[Chain::get_ref]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.get_ref
[Chain::into_inner]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.into_inner
[Option::get_or_insert_with]: https://doc.rust-lang.org/std/option/enum.Option.html#method.get_or_insert_with
[Option::get_or_insert]: https://doc.rust-lang.org/std/option/enum.Option.html#method.get_or_insert
[OsStr::into_os_string]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.into_os_string
[OsString::into_boxed_os_str]: https://doc.rust-lang.org/std/ffi/struct.OsString.html#method.into_boxed_os_str
[Take::get_mut]: https://doc.rust-lang.org/std/io/struct.Take.html#method.get_mut
[Take::get_ref]: https://doc.rust-lang.org/std/io/struct.Take.html#method.get_ref
[Utf8Error::error_len]: https://doc.rust-lang.org/std/str/struct.Utf8Error.html#method.error_len
[char::EscapeDebug]: https://doc.rust-lang.org/std/char/struct.EscapeDebug.html
[char::escape_debug]: https://doc.rust-lang.org/std/primitive.char.html#method.escape_debug
[compile_error!]: https://doc.rust-lang.org/std/macro.compile_error.html
[f32::from_bits]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_bits
[f32::to_bits]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_bits
[f64::from_bits]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_bits
[f64::to_bits]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_bits
[mem::ManuallyDrop]: https://doc.rust-lang.org/std/mem/union.ManuallyDrop.html
[slice::sort_unstable_by_key]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable_by_key
[slice::sort_unstable_by]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable_by
[slice::sort_unstable]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable
[str::from_boxed_utf8_unchecked]: https://doc.rust-lang.org/std/str/fn.from_boxed_utf8_unchecked.html
[str::as_bytes_mut]: https://doc.rust-lang.org/std/primitive.str.html#method.as_bytes_mut
[str::from_utf8_mut]: https://doc.rust-lang.org/std/str/fn.from_utf8_mut.html
[str::from_utf8_unchecked_mut]: https://doc.rust-lang.org/std/str/fn.from_utf8_unchecked_mut.html
[str::get_mut]: https://doc.rust-lang.org/std/primitive.str.html#method.get_mut
[str::get_unchecked_mut]: https://doc.rust-lang.org/std/primitive.str.html#method.get_unchecked_mut
[str::get_unchecked]: https://doc.rust-lang.org/std/primitive.str.html#method.get_unchecked
[str::get]: https://doc.rust-lang.org/std/primitive.str.html#method.get
[str::into_boxed_bytes]: https://doc.rust-lang.org/std/primitive.str.html#method.into_boxed_bytes