← Back to all releases

Rust 1.14.0

Released on December 22, 2016

What's Changed

  • [.. matches multiple tuple fields in enum variants, structs
  • [Safe fn items can be coerced to unsafe fn pointers][37389]
  • [use and use :: both glob-import from the crate root][37367]
  • [It's now possible to call a Vec> without explicit

  • [Mark enums with non-zero discriminant as non-zero][37224]
  • [Lower-case static mut names are linted like other
  • [Fix ICE on some macros in const integer positions
  • [Improve error message and snippet for "did you mean x"][36798]
  • [Add a panic-strategy field to the target specification][36794]
  • [Include LLVM version in --version --verbose][37200]

  • [println!(), with no arguments, prints newline][36825].
  • [Wrapping impls standard binary and unary operators, as well as
  • [Implement From> for String and `From> for
  • [Improve fold performance for chain, cloned, map, and
  • [Improve SipHasher performance on small values][37312]
  • [Add Iterator trait TrustedLen to enable better FromIterator /
  • [Expand .zip() specialization to .map() and .cloned()][37230]
  • [ReadDir implements Debug][37221]
  • [Implement RefUnwindSafe for atomic types][37178]
  • [Specialize Vec::extend to Vec::extend_from_slice][37094]
  • [Avoid allocations in Decoder::read_str][37064]
  • [io::Error implements From][37037]
  • [Impl Debug for raw pointers to unsized data][36880]
  • [Don't reuse HashMap random seeds][37470]
  • [The internal memory layout of HashMap is more cache-friendly, for
  • [HashMap uses less memory on 32-bit architectures][36595]
  • [Impl Add<{str, Cow}> for Cow][36430]

  • [Expose rustc cfg values to build scripts][cargo/3243]
  • [Allow cargo to work with read-only CARGO_HOME][cargo/3259]
  • [Fix passing --features when testing multiple packages][cargo/3280]
  • [Use a single profile set per workspace][cargo/3249]
  • [Load replace sections from lock files][cargo/3220]
  • [Ignore panic configuration for test/bench profiles][cargo/3175]
  • [rustup is the recommended Rust installation method][1.14rustup]
  • This release includes host (rustc) builds for Linux on MIPS, PowerPC, and
  • mips-unknown-linux-gnu
  • mipsel-unknown-linux-gnu
  • mips64-unknown-linux-gnuabi64
  • mips64el-unknown-linux-gnuabi64
  • powerpc-unknown-linux-gnu
  • powerpc64-unknown-linux-gnu
  • powerpc64le-unknown-linux-gnu
  • s390x-unknown-linux-gnu
  • This release includes target (std) builds for ARM Linux running MUSL
  • arm-unknown-linux-musleabi
  • arm-unknown-linux-musleabihf
  • armv7-unknown-linux-musleabihf
  • This release includes [experimental support for WebAssembly][1.14wasm], via
  • rustup no longer installs documentation by default. Run `rustup
  • [Fix line stepping in debugger][37310]
  • [Enable line number debuginfo in releases][37280]

  • [A number of forward-compatibility lints used by the compiler
  • ["use of inaccessible extern crate erroneously allowed"][36886]
  • ["type parameter default erroneously allowed in invalid location"][36887]
  • ["detects super or self keywords at the beginning of global path"][36888]
  • ["two overlapping inherent impls define an item with the same name
  • ["floating-point constants cannot be used in patterns"][36890]
  • ["constants of struct or enum type can only be used in a pattern if
  • ["lifetimes or labels named '_ were erroneously allowed"][36892]
  • [Prohibit patterns in trait methods without bodies][37378]
  • [The atomic Ordering enum may not be matched exhaustively][37351]
  • [Future-proofing #[no_link] breaks some obscure cases][37247]
  • [The $crate macro variable is accepted in fewer locations][37213]
  • [Impls specifying extra region requirements beyond the trait
  • [Enums may not be unsized][37111]. Unsized enums are intended to
  • [Enforce the shadowing restrictions from RFC 1560 for today's macros][36767]

  • [Improve macro expansion performance][37569]
  • [Shrink Expr_::ExprInlineAsm][37445]
  • [Replace all uses of SHA-256 with BLAKE2b][37439]
  • [Reduce the number of bytes hashed by IchHasher][37427]
  • [Avoid more allocations when compiling html5ever][37373]
  • [Use SmallVector in CombineFields::instantiate][37322]
  • [Avoid some allocations in the macro parser][37318]
  • [Use a faster deflate setting][37298]
  • [Add ArrayVec and AccumulateVec to reduce heap allocations
  • [Optimize write_metadata][37267]
  • [Don't process obligation forest cycles when stalled][37231]
  • [Avoid many CrateConfig clones][37161]
  • [Optimize Substs::super_fold_with][37108]
  • [Optimize ObligationForest's NodeState handling][36993]
  • [Speed up plug_leaks][36917]
  • [Disable jemalloc on aarch64/powerpc/mips][37392]
  • [Add support for Fuchsia OS][37313]
  • [Detect local-rebuild by only MAJOR.MINOR version][37273]
Full Changelog

Language

--------

* [.. matches multiple tuple fields in enum variants, structs

and tuples][36843]. [RFC 1492].

* [Safe fn items can be coerced to unsafe fn pointers][37389]

[use and use ::* both glob-import from the crate root][37367]

* [It's now possible to call a Vec> without explicit

dereferencing][36822]

Compiler

--------

* [Mark enums with non-zero discriminant as non-zero][37224]

* [Lower-case static mut names are linted like other

statics and consts][37162]

* [Fix ICE on some macros in const integer positions

(e.g. [u8; m!()])][36819]

* [Improve error message and snippet for "did you mean x"][36798]

* [Add a panic-strategy field to the target specification][36794]

* [Include LLVM version in --version --verbose][37200]

Compile-time Optimizations

--------------------------

* [Improve macro expansion performance][37569]

* [Shrink Expr_::ExprInlineAsm][37445]

* [Replace all uses of SHA-256 with BLAKE2b][37439]

* [Reduce the number of bytes hashed by IchHasher][37427]

* [Avoid more allocations when compiling html5ever][37373]

* [Use SmallVector in CombineFields::instantiate][37322]

* [Avoid some allocations in the macro parser][37318]

* [Use a faster deflate setting][37298]

* [Add ArrayVec and AccumulateVec to reduce heap allocations

during interning of slices][37270]

* [Optimize write_metadata][37267]

* [Don't process obligation forest cycles when stalled][37231]

* [Avoid many CrateConfig clones][37161]

* [Optimize Substs::super_fold_with][37108]

* [Optimize ObligationForest's NodeState handling][36993]

* [Speed up plug_leaks][36917]

Libraries

---------

* [println!(), with no arguments, prints newline][36825].

Previously, an empty string was required to achieve the same.

* [Wrapping impls standard binary and unary operators, as well as

the Sum and Product iterators][37356]

* [Implement From> for String and From> for

Vec][37326]

* [Improve fold performance for chain, cloned, map, and

VecDeque iterators][37315]

* [Improve SipHasher performance on small values][37312]

* [Add Iterator trait TrustedLen to enable better FromIterator /

Extend][37306]

* [Expand .zip() specialization to .map() and .cloned()][37230]

* [ReadDir implements Debug][37221]

* [Implement RefUnwindSafe for atomic types][37178]

* [Specialize Vec::extend to Vec::extend_from_slice][37094]

* [Avoid allocations in Decoder::read_str][37064]

* [io::Error implements From][37037]

* [Impl Debug for raw pointers to unsized data][36880]

* [Don't reuse HashMap random seeds][37470]

* [The internal memory layout of HashMap is more cache-friendly, for

significant improvements in some operations][36692]

* [HashMap uses less memory on 32-bit architectures][36595]

* [Impl Add<{str, Cow}> for Cow][36430]

Cargo

-----

* [Expose rustc cfg values to build scripts][cargo/3243]

* [Allow cargo to work with read-only CARGO_HOME][cargo/3259]

* [Fix passing --features when testing multiple packages][cargo/3280]

* [Use a single profile set per workspace][cargo/3249]

* [Load replace sections from lock files][cargo/3220]

* [Ignore panic configuration for test/bench profiles][cargo/3175]

Tooling

-------

* [rustup is the recommended Rust installation method][1.14rustup]

* This release includes host (rustc) builds for Linux on MIPS, PowerPC, and

S390x. These are [tier 2] platforms and may have major defects. Follow the

instructions on the website to install, or add the targets to an existing

installation with rustup target add. The new target triples are:

- mips-unknown-linux-gnu

- mipsel-unknown-linux-gnu

- mips64-unknown-linux-gnuabi64

- mips64el-unknown-linux-gnuabi64

- powerpc-unknown-linux-gnu

- powerpc64-unknown-linux-gnu

- powerpc64le-unknown-linux-gnu

- s390x-unknown-linux-gnu

* This release includes target (std) builds for ARM Linux running MUSL

libc. These are [tier 2] platforms and may have major defects. Add the

following triples to an existing rustup installation with rustup target add:

- arm-unknown-linux-musleabi

- arm-unknown-linux-musleabihf

- armv7-unknown-linux-musleabihf

* This release includes [experimental support for WebAssembly][1.14wasm], via

the wasm32-unknown-emscripten target. This target is known to have major

defects. Please test, report, and fix.

* rustup no longer installs documentation by default. Run rustup

component add rust-docs to install.

* [Fix line stepping in debugger][37310]

* [Enable line number debuginfo in releases][37280]

Misc

----

* [Disable jemalloc on aarch64/powerpc/mips][37392]

* [Add support for Fuchsia OS][37313]

* [Detect local-rebuild by only MAJOR.MINOR version][37273]

Compatibility Notes

-------------------

* [A number of forward-compatibility lints used by the compiler

to gradually introduce language changes have been converted

to deny by default][36894]:

- ["use of inaccessible extern crate erroneously allowed"][36886]

- ["type parameter default erroneously allowed in invalid location"][36887]

- ["detects super or self keywords at the beginning of global path"][36888]

- ["two overlapping inherent impls define an item with the same name

were erroneously allowed"][36889]

- ["floating-point constants cannot be used in patterns"][36890]

- ["constants of struct or enum type can only be used in a pattern if

the struct or enum has #[derive(PartialEq, Eq)]"][36891]

- ["lifetimes or labels named '_ were erroneously allowed"][36892]

* [Prohibit patterns in trait methods without bodies][37378]

* [The atomic Ordering enum may not be matched exhaustively][37351]

* [Future-proofing #[no_link] breaks some obscure cases][37247]

* [The $crate macro variable is accepted in fewer locations][37213]

* [Impls specifying extra region requirements beyond the trait

they implement are rejected][37167]

* [Enums may not be unsized][37111]. Unsized enums are intended to

work but never have. For now they are forbidden.

* [Enforce the shadowing restrictions from RFC 1560 for today's macros][36767]

[tier 2]: https://forge.rust-lang.org/platform-support.html

[1.14rustup]: https://internals.rust-lang.org/t/beta-testing-rustup-rs/3316/204

[1.14wasm]: https://users.rust-lang.org/t/compiling-to-the-web-with-rust-and-emscripten/7627

[36430]: https://github.com/rust-lang/rust/pull/36430

[36595]: https://github.com/rust-lang/rust/pull/36595

[36692]: https://github.com/rust-lang/rust/pull/36692

[36767]: https://github.com/rust-lang/rust/pull/36767

[36794]: https://github.com/rust-lang/rust/pull/36794

[36798]: https://github.com/rust-lang/rust/pull/36798

[36819]: https://github.com/rust-lang/rust/pull/36819

[36822]: https://github.com/rust-lang/rust/pull/36822

[36825]: https://github.com/rust-lang/rust/pull/36825

[36843]: https://github.com/rust-lang/rust/pull/36843

[36880]: https://github.com/rust-lang/rust/pull/36880

[36886]: https://github.com/rust-lang/rust/issues/36886

[36887]: https://github.com/rust-lang/rust/issues/36887

[36888]: https://github.com/rust-lang/rust/issues/36888

[36889]: https://github.com/rust-lang/rust/issues/36889

[36890]: https://github.com/rust-lang/rust/issues/36890

[36891]: https://github.com/rust-lang/rust/issues/36891

[36892]: https://github.com/rust-lang/rust/issues/36892

[36894]: https://github.com/rust-lang/rust/pull/36894

[36917]: https://github.com/rust-lang/rust/pull/36917

[36993]: https://github.com/rust-lang/rust/pull/36993

[37037]: https://github.com/rust-lang/rust/pull/37037

[37064]: https://github.com/rust-lang/rust/pull/37064

[37094]: https://github.com/rust-lang/rust/pull/37094

[37108]: https://github.com/rust-lang/rust/pull/37108

[37111]: https://github.com/rust-lang/rust/pull/37111

[37161]: https://github.com/rust-lang/rust/pull/37161

[37162]: https://github.com/rust-lang/rust/pull/37162

[37167]: https://github.com/rust-lang/rust/pull/37167

[37178]: https://github.com/rust-lang/rust/pull/37178

[37200]: https://github.com/rust-lang/rust/pull/37200

[37213]: https://github.com/rust-lang/rust/pull/37213

[37221]: https://github.com/rust-lang/rust/pull/37221

[37224]: https://github.com/rust-lang/rust/pull/37224

[37230]: https://github.com/rust-lang/rust/pull/37230

[37231]: https://github.com/rust-lang/rust/pull/37231

[37247]: https://github.com/rust-lang/rust/pull/37247

[37267]: https://github.com/rust-lang/rust/pull/37267

[37270]: https://github.com/rust-lang/rust/pull/37270

[37273]: https://github.com/rust-lang/rust/pull/37273

[37280]: https://github.com/rust-lang/rust/pull/37280

[37298]: https://github.com/rust-lang/rust/pull/37298

[37306]: https://github.com/rust-lang/rust/pull/37306

[37310]: https://github.com/rust-lang/rust/pull/37310

[37312]: https://github.com/rust-lang/rust/pull/37312

[37313]: https://github.com/rust-lang/rust/pull/37313

[37315]: https://github.com/rust-lang/rust/pull/37315

[37318]: https://github.com/rust-lang/rust/pull/37318

[37322]: https://github.com/rust-lang/rust/pull/37322

[37326]: https://github.com/rust-lang/rust/pull/37326

[37351]: https://github.com/rust-lang/rust/pull/37351

[37356]: https://github.com/rust-lang/rust/pull/37356

[37367]: https://github.com/rust-lang/rust/pull/37367

[37373]: https://github.com/rust-lang/rust/pull/37373

[37378]: https://github.com/rust-lang/rust/pull/37378

[37389]: https://github.com/rust-lang/rust/pull/37389

[37392]: https://github.com/rust-lang/rust/pull/37392

[37427]: https://github.com/rust-lang/rust/pull/37427

[37439]: https://github.com/rust-lang/rust/pull/37439

[37445]: https://github.com/rust-lang/rust/pull/37445

[37470]: https://github.com/rust-lang/rust/pull/37470

[37569]: https://github.com/rust-lang/rust/pull/37569

[RFC 1492]: https://github.com/rust-lang/rfcs/blob/master/text/1492-dotdot-in-patterns.md

[cargo/3175]: https://github.com/rust-lang/cargo/pull/3175

[cargo/3220]: https://github.com/rust-lang/cargo/pull/3220

[cargo/3243]: https://github.com/rust-lang/cargo/pull/3243

[cargo/3249]: https://github.com/rust-lang/cargo/pull/3249

[cargo/3259]: https://github.com/rust-lang/cargo/pull/3259

[cargo/3280]: https://github.com/rust-lang/cargo/pull/3280