Version 1.19.0 (2017-07-20)
Language
- Numeric fields can now be used for creating tuple structs. RFC 1506
For example
struct Point(u32, u32); let x = Point { 0: 7, 1: 0 };. - Macro recursion limit increased to 1024 from 64.
- Added lint for detecting unused macros.
loopcan now return a value withbreak. RFC 1624 For example:let x = loop { break 7; };- C compatible
unions are now available. RFC 1444 They can only containCopytypes and cannot have aDropimplementation. Example:union Foo { bar: u8, baz: usize } - Non capturing closures can now be coerced into
fns, RFC 1558 Example:let foo: fn(u8) -> u8 = |v: u8| { v };
Compiler
- Add support for bootstrapping the Rust compiler toolchain on Android.
- Change
arm-linux-androideabito correspond to thearmeabiofficial ABI. If you wish to continue targeting thearmeabi-v7aABI you should use--target armv7-linux-androideabi. - Fixed ICE when removing a source file between compilation sessions.
- Minor optimisation of string operations.
- Compiler error message is now
aborting due to previous error(s)instead ofaborting due to N previous errorsThis was previously inaccurate and would only count certain kinds of errors. - The compiler now supports Visual Studio 2017
- The compiler is now built against LLVM 4.0.1 by default
- Added a lot of new error codes
- Added
target-feature=+crt-staticoption RFC 1721 Which allows libraries with C Run-time Libraries(CRT) to be statically linked. - Fixed various ARM codegen bugs
Libraries
Stringnow implementsFromIterator<Cow<'a, str>>andExtend<Cow<'a, str>>Vecnow implementsFrom<&mut [T]>Box<[u8]>now implementsFrom<Box<str>>SplitWhitespacenow implementsClone[u8]::reverseis now 5x faster and[u16]::reverseis now 1.5x fastereprint!andeprintln!macros added to prelude. Same as theprint!macros, but for printing to stderr.
Stabilized APIs
Cargo
- Build scripts can now add environment variables to the environment
the crate is being compiled in.
Example:
println!("cargo:rustc-env=FOO=bar"); - Subcommands now replace the current process rather than spawning a new child process
- Workspace members can now accept glob file patterns
- Added
--allflag to thecargo benchsubcommand to run benchmarks of all the members in a given workspace. - Updated
libssh2-systo 0.2.6 - Target directory path is now in the cargo metadata
- Cargo no longer checks out a local working directory for the crates.io index This should provide smaller file size for the registry, and improve cloning times, especially on Windows machines.
- Added an
--excludeoption for excluding certain packages when using the--alloption - Cargo will now automatically retry when receiving a 5xx error from crates.io
- The
--featuresoption now accepts multiple comma or space delimited values. - Added support for custom target specific runners
Misc
- Added
rust-windbg.cmdfor loading rust.natvisfiles in the Windows Debugger. - Rust will now release XZ compressed packages
- rustup will now prefer to download rust packages with XZ compression over GZip packages.
- Added the ability to escape
#in rust documentation By adding additional#'s ie.##is now#
Compatibility Notes
MutexGuard<T>may only beSyncifTisSync.-Zflags are now no longer allowed to be used on the stable compiler. This has been a warning for a year previous to this.- As a result of the
-Zflag change, thecargo-checkplugin no longer works. Users should migrate to the built-incheckcommand, which has been available since 1.16. - Ending a float literal with
._is now a hard error. Example:42._. - Any use of a private
extern crateoutside of its module is now a hard error. This was previously a warning. use ::self::foo;is now a hard error.selfpaths 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 This was previously a warning.
- Struct or enum constants that don't derive
PartialEq&Eqused match patterns is now a hard error This was previously a warning. - Lifetimes named
'_are no longer allowed. This was previously a warning. - From the pound escape, lines consisting of multiple
#s are now visible - It is an error to re-export private enum variants. This is known to break a number of crates that depend on an older version of mustache.
- On Windows, if
VCINSTALLDIRis set incorrectly,rustcwill try to use it to find the linker, and the build will fail where it did not previously