Rust 1.19.0
Released on July 20, 2017
What's Changed
- [Numeric fields can now be used for creating tuple structs.][41145] [RFC 1506]
- [Macro recursion limit increased to 1024 from 64.][41676]
- [Added lint for detecting unused macros.][41907]
- [
loopcan now return a value withbreak.][42016] [RFC 1624] - [C compatible
unions are now available.][42068] [RFC 1444] They can only - [Non capturing closures can now be coerced into
fns,][42162] [RFC 1558]
- [Add support for bootstrapping the Rust compiler toolchain on Android.][41370]
- [Change
arm-linux-androideabito correspond to thearmeabi - [Fixed ICE when removing a source file between compilation sessions.][41873]
- [Minor optimisation of string operations.][42037]
- [Compiler error message is now
aborting due to previous error(s)instead of - [The compiler now supports Visual Studio 2017][42225]
- [The compiler is now built against LLVM 4.0.1 by default][42948]
- [Added a lot][42264] of [new error codes][42302]
- [Added
target-feature=+crt-staticoption][37406] [RFC 1721] Which allows - [Fixed various ARM codegen bugs][42740]
- [
Stringnow implementsFromIteratorand> - [
Vecnow implementsFrom<&mut [T]>][41530] - [
Box<[u8]>now implementsFrom][41258]> - [
SplitWhitespacenow implementsClone][41659] - [
[u8]::reverseis now 5x faster and[u16]::reverseis now - [
eprint!andeprintln!macros added to prelude.][41192] Same as theprint! - [
OsString::shrink_to_fit] - [
cmp::Reverse] - [
Command::envs] - [
thread::ThreadId]
- [Build scripts can now add environment variables to the environment
- [Subcommands now replace the current process rather than spawning a new
- [Workspace members can now accept glob file patterns][cargo/3979]
- [Added
--allflag to thecargo benchsubcommand to run benchmarks of all - [Updated
libssh2-systo 0.2.6][cargo/4008] - [Target directory path is now in the cargo metadata][cargo/4022]
- [Cargo no longer checks out a local working directory for the
- [Added an
--excludeoption for excluding certain packages when using the - [Cargo will now automatically retry when receiving a 5xx error
- [The
--featuresoption now accepts multiple comma or space - [Added support for custom target specific runners][cargo/3954]
- [
MutexGuardmay only beSyncifTisSync.][41624] - [
-Zflags are now no longer allowed to be used on the stable - [As a result of the
-Zflag change, thecargo-checkplugin no - [Ending a float literal with
._is now a hard error. - [Any use of a private
extern crateoutside of its module is now a - [
use ::self::foo;is now a hard error.][36888]selfpaths are always - [Floating point constants in match patterns is now a hard error][36890]
- [Struct or enum constants that don't derive
PartialEq&Eqused - [Lifetimes named
'_are no longer allowed.][36892] This was previously - [From the pound escape, lines consisting of multiple
#s are - [It is an error to re-export private enum variants][42460]. This is
- [On Windows, if
VCINSTALLDIRis set incorrectly,rustcwill try
- [Added
rust-windbg.cmd][39983] for loading rust.natvisfiles in the - [Rust will now release XZ compressed packages][rust-installer/57]
- [rustup will now prefer to download rust packages with
- [Added the ability to escape
#in rust documentation][41785] By adding
Full Changelog
Language
--------
- [Numeric fields can now be used for creating tuple structs.][41145] [RFC 1506]
For example struct Point(u32, u32); let x = Point { 0: 7, 1: 0 };.
- [Macro recursion limit increased to 1024 from 64.][41676]
- [Added lint for detecting unused macros.][41907]
- [loop can now return a value with break.][42016] [RFC 1624]
For example: let x = loop { break 7; };
- [C compatible unions are now available.][42068] [RFC 1444] They can only
contain Copy types and cannot have a Drop implementation.
Example: union Foo { bar: u8, baz: usize }
- [Non capturing closures can now be coerced into fns,][42162] [RFC 1558]
Example: let foo: fn(u8) -> u8 = |v: u8| { v };
Compiler
--------
- [Add support for bootstrapping the Rust compiler toolchain on Android.][41370]
- [Change arm-linux-androideabi to correspond to the armeabi
official ABI.][41656] If you wish to continue targeting the armeabi-v7a ABI
you should use --target armv7-linux-androideabi.
- [Fixed ICE when removing a source file between compilation sessions.][41873]
- [Minor optimisation of string operations.][42037]
- [Compiler error message is now aborting due to previous error(s) instead of
aborting due to N previous errors][42150] This was previously inaccurate and
would only count certain kinds of errors.
- [The compiler now supports Visual Studio 2017][42225]
- [The compiler is now built against LLVM 4.0.1 by default][42948]
- [Added a lot][42264] of [new error codes][42302]
- [Added target-feature=+crt-static option][37406] [RFC 1721] Which allows
libraries with C Run-time Libraries(CRT) to be statically linked.
- [Fixed various ARM codegen bugs][42740]
Libraries
---------
- [String now implements FromIterator and
Extend> ][41449]
- [Vec now implements From<&mut [T]>][41530]
- [Box<[u8]> now implements From][41258]
- [SplitWhitespace now implements Clone][41659]
- [[u8]::reverse is now 5x faster and [u16]::reverse is now
1.5x faster][41764]
- [eprint! and eprintln! macros added to prelude.][41192] Same as the print!
macros, but for printing to stderr.
Stabilized APIs
---------------
- [OsString::shrink_to_fit]
- [cmp::Reverse]
- [Command::envs]
- [thread::ThreadId]
Cargo
-----
- [Build scripts can now add environment variables to the environment
the crate is being compiled in.
Example: println!("cargo:rustc-env=FOO=bar");][cargo/3929]
- [Subcommands now replace the current process rather than spawning a new
child process][cargo/3970]
- [Workspace members can now accept glob file patterns][cargo/3979]
- [Added --all flag to the cargo bench subcommand to run benchmarks of all
the members in a given workspace.][cargo/3988]
- [Updated libssh2-sys to 0.2.6][cargo/4008]
- [Target directory path is now in the cargo metadata][cargo/4022]
- [Cargo no longer checks out a local working directory for the
crates.io index][cargo/4026] This should provide smaller file size for the
registry, and improve cloning times, especially on Windows machines.
- [Added an --exclude option for excluding certain packages when using the
--all option][cargo/4031]
- [Cargo will now automatically retry when receiving a 5xx error
from crates.io][cargo/4032]
- [The --features option now accepts multiple comma or space
delimited values.][cargo/4084]
- [Added support for custom target specific runners][cargo/3954]
Misc
----
- [Added rust-windbg.cmd][39983] for loading rust .natvis files in the
Windows Debugger.
- [Rust will now release XZ compressed packages][rust-installer/57]
- [rustup will now prefer to download rust packages with
XZ compression][rustup/1100] over GZip packages.
- [Added the ability to escape # in rust documentation][41785] By adding
additional #'s ie. ## is now #
Compatibility Notes
-------------------
- [MutexGuard may only be Sync if T is Sync.][41624]
- [-Z flags are now no longer allowed to be used on the stable
compiler.][41751] This has been a warning for a year previous to this.
- [As a result of the -Z flag change, the cargo-check plugin no
longer works][42844]. Users should migrate to the built-in check
command, which has been available since 1.16.
- [Ending a float literal with ._ is now a hard error.
Example: 42._ .][41946]
- [Any use of a private extern crate outside of its module is now a
hard error.][36886] This was previously a warning.
- [use ::self::foo; is now a hard error.][36888] self paths are always
relative while the :: prefix makes a path absolute, but was ignored and the
path was relative regardless.
- [Floating point constants in match patterns is now a hard error][36890]
This was previously a warning.
- [Struct or enum constants that don't derive PartialEq & Eq used
match patterns is now a hard error][36891] This was previously a warning.
- [Lifetimes named '_ are no longer allowed.][36892] This was previously
a warning.
- [From the pound escape, lines consisting of multiple #s are
now visible][41785]
- [It is an error to re-export private enum variants][42460]. This is
known to break a number of crates that depend on an older version of
mustache.
- [On Windows, if VCINSTALLDIR is set incorrectly, rustc will try
to use it to find the linker, and the build will fail where it did
not previously][42607]
[36886]: https://github.com/rust-lang/rust/issues/36886
[36888]: https://github.com/rust-lang/rust/issues/36888
[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
[37406]: https://github.com/rust-lang/rust/issues/37406
[39983]: https://github.com/rust-lang/rust/pull/39983
[41145]: https://github.com/rust-lang/rust/pull/41145
[41192]: https://github.com/rust-lang/rust/pull/41192
[41258]: https://github.com/rust-lang/rust/pull/41258
[41370]: https://github.com/rust-lang/rust/pull/41370
[41449]: https://github.com/rust-lang/rust/pull/41449
[41530]: https://github.com/rust-lang/rust/pull/41530
[41624]: https://github.com/rust-lang/rust/pull/41624
[41656]: https://github.com/rust-lang/rust/pull/41656
[41659]: https://github.com/rust-lang/rust/pull/41659
[41676]: https://github.com/rust-lang/rust/pull/41676
[41751]: https://github.com/rust-lang/rust/pull/41751
[41764]: https://github.com/rust-lang/rust/pull/41764
[41785]: https://github.com/rust-lang/rust/pull/41785
[41873]: https://github.com/rust-lang/rust/pull/41873
[41907]: https://github.com/rust-lang/rust/pull/41907
[41946]: https://github.com/rust-lang/rust/pull/41946
[42016]: https://github.com/rust-lang/rust/pull/42016
[42037]: https://github.com/rust-lang/rust/pull/42037
[42068]: https://github.com/rust-lang/rust/pull/42068
[42150]: https://github.com/rust-lang/rust/pull/42150
[42162]: https://github.com/rust-lang/rust/pull/42162
[42225]: https://github.com/rust-lang/rust/pull/42225
[42264]: https://github.com/rust-lang/rust/pull/42264
[42302]: https://github.com/rust-lang/rust/pull/42302
[42460]: https://github.com/rust-lang/rust/issues/42460
[42607]: https://github.com/rust-lang/rust/issues/42607
[42740]: https://github.com/rust-lang/rust/pull/42740
[42844]: https://github.com/rust-lang/rust/issues/42844
[42948]: https://github.com/rust-lang/rust/pull/42948
[RFC 1444]: https://github.com/rust-lang/rfcs/pull/1444
[RFC 1506]: https://github.com/rust-lang/rfcs/pull/1506
[RFC 1558]: https://github.com/rust-lang/rfcs/pull/1558
[RFC 1624]: https://github.com/rust-lang/rfcs/pull/1624
[RFC 1721]: https://github.com/rust-lang/rfcs/pull/1721
[Command::envs]: https://doc.rust-lang.org/std/process/struct.Command.html#method.envs
[OsString::shrink_to_fit]: https://doc.rust-lang.org/std/ffi/struct.OsString.html#method.shrink_to_fit
[cmp::Reverse]: https://doc.rust-lang.org/std/cmp/struct.Reverse.html
[thread::ThreadId]: https://doc.rust-lang.org/std/thread/struct.ThreadId.html
[cargo/3929]: https://github.com/rust-lang/cargo/pull/3929
[cargo/3954]: https://github.com/rust-lang/cargo/pull/3954
[cargo/3970]: https://github.com/rust-lang/cargo/pull/3970
[cargo/3979]: https://github.com/rust-lang/cargo/pull/3979
[cargo/3988]: https://github.com/rust-lang/cargo/pull/3988
[cargo/4008]: https://github.com/rust-lang/cargo/pull/4008
[cargo/4022]: https://github.com/rust-lang/cargo/pull/4022
[cargo/4026]: https://github.com/rust-lang/cargo/pull/4026
[cargo/4031]: https://github.com/rust-lang/cargo/pull/4031
[cargo/4032]: https://github.com/rust-lang/cargo/pull/4032
[cargo/4084]: https://github.com/rust-lang/cargo/pull/4084
[rust-installer/57]: https://github.com/rust-lang/rust-installer/pull/57
[rustup/1100]: https://github.com/rust-lang-nursery/rustup.rs/pull/1100